mirror of
https://github.com/python/cpython
synced 2024-09-16 00:07:33 +00:00
gh-90473: Skip and document more failing tests on WASI (GH-93436)
- Mark more ``umask()`` cases - ``dup()`` is not supported - ``/dev/null`` is not available - document missing features - mark more modules as not available
This commit is contained in:
parent
94b1586ca5
commit
069c96f84c
|
@ -434,6 +434,9 @@ class CompileallTestsWithoutSourceEpoch(CompileallTestsBase,
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
# WASI does not have a temp directory and uses cwd instead. The cwd contains
|
||||||
|
# non-ASCII chars, so _walk_dir() fails to encode self.directory.
|
||||||
|
@unittest.skipIf(support.is_wasi, "tempdir is not encodable on WASI")
|
||||||
class EncodingTest(unittest.TestCase):
|
class EncodingTest(unittest.TestCase):
|
||||||
"""Issue 6716: compileall should escape source code when printing errors
|
"""Issue 6716: compileall should escape source code when printing errors
|
||||||
to stdout."""
|
to stdout."""
|
||||||
|
|
|
@ -20,7 +20,8 @@
|
||||||
|
|
||||||
from test.support import os_helper
|
from test.support import os_helper
|
||||||
from test.support import (
|
from test.support import (
|
||||||
STDLIB_DIR, is_jython, swap_attr, swap_item, cpython_only, is_emscripten)
|
STDLIB_DIR, is_jython, swap_attr, swap_item, cpython_only, is_emscripten,
|
||||||
|
is_wasi)
|
||||||
from test.support.import_helper import (
|
from test.support.import_helper import (
|
||||||
forget, make_legacy_pyc, unlink, unload, DirsOnSysPath, CleanImport)
|
forget, make_legacy_pyc, unlink, unload, DirsOnSysPath, CleanImport)
|
||||||
from test.support.os_helper import (
|
from test.support.os_helper import (
|
||||||
|
@ -535,7 +536,10 @@ class FilePermissionTests(unittest.TestCase):
|
||||||
|
|
||||||
@unittest.skipUnless(os.name == 'posix',
|
@unittest.skipUnless(os.name == 'posix',
|
||||||
"test meaningful only on posix systems")
|
"test meaningful only on posix systems")
|
||||||
@unittest.skipIf(is_emscripten, "Emscripten's umask is a stub.")
|
@unittest.skipIf(
|
||||||
|
is_emscripten or is_wasi,
|
||||||
|
"Emscripten's/WASI's umask is a stub."
|
||||||
|
)
|
||||||
def test_creation_mode(self):
|
def test_creation_mode(self):
|
||||||
mask = 0o022
|
mask = 0o022
|
||||||
with temp_umask(mask), _ready_to_import() as (name, path):
|
with temp_umask(mask), _ready_to_import() as (name, path):
|
||||||
|
|
|
@ -186,6 +186,9 @@ def test_access(self):
|
||||||
@unittest.skipIf(
|
@unittest.skipIf(
|
||||||
support.is_emscripten, "Test is unstable under Emscripten."
|
support.is_emscripten, "Test is unstable under Emscripten."
|
||||||
)
|
)
|
||||||
|
@unittest.skipIf(
|
||||||
|
support.is_wasi, "WASI does not support dup."
|
||||||
|
)
|
||||||
def test_closerange(self):
|
def test_closerange(self):
|
||||||
first = os.open(os_helper.TESTFN, os.O_CREAT|os.O_RDWR)
|
first = os.open(os_helper.TESTFN, os.O_CREAT|os.O_RDWR)
|
||||||
# We must allocate two consecutive file descriptors, otherwise
|
# We must allocate two consecutive file descriptors, otherwise
|
||||||
|
@ -1588,7 +1591,10 @@ def test_makedir(self):
|
||||||
'dir5', 'dir6')
|
'dir5', 'dir6')
|
||||||
os.makedirs(path)
|
os.makedirs(path)
|
||||||
|
|
||||||
@unittest.skipIf(support.is_emscripten, "Emscripten's umask is a stub.")
|
@unittest.skipIf(
|
||||||
|
support.is_emscripten or support.is_wasi,
|
||||||
|
"Emscripten's/WASI's umask is a stub."
|
||||||
|
)
|
||||||
def test_mode(self):
|
def test_mode(self):
|
||||||
with os_helper.temp_umask(0o002):
|
with os_helper.temp_umask(0o002):
|
||||||
base = os_helper.TESTFN
|
base = os_helper.TESTFN
|
||||||
|
|
|
@ -2353,6 +2353,9 @@ def test_is_socket_false(self):
|
||||||
@unittest.skipIf(
|
@unittest.skipIf(
|
||||||
is_emscripten, "Unix sockets are not implemented on Emscripten."
|
is_emscripten, "Unix sockets are not implemented on Emscripten."
|
||||||
)
|
)
|
||||||
|
@unittest.skipIf(
|
||||||
|
is_wasi, "Cannot create socket on WASI."
|
||||||
|
)
|
||||||
def test_is_socket_true(self):
|
def test_is_socket_true(self):
|
||||||
P = self.cls(BASE, 'mysock')
|
P = self.cls(BASE, 'mysock')
|
||||||
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
||||||
|
|
|
@ -2652,6 +2652,7 @@ def test_stty_match(self):
|
||||||
|
|
||||||
self.assertEqual(expected, actual)
|
self.assertEqual(expected, actual)
|
||||||
|
|
||||||
|
@unittest.skipIf(support.is_wasi, "WASI has no /dev/null")
|
||||||
def test_fallback(self):
|
def test_fallback(self):
|
||||||
with os_helper.EnvironmentVarGuard() as env:
|
with os_helper.EnvironmentVarGuard() as env:
|
||||||
del env['LINES']
|
del env['LINES']
|
||||||
|
|
|
@ -237,13 +237,25 @@ ## WASI limitations and issues (WASI SDK 15.0)
|
||||||
``socket.gethostbyname()`` are not implemented and always fail.
|
``socket.gethostbyname()`` are not implemented and always fail.
|
||||||
- ``chmod(2)`` is not available. It's not possible to modify file permissions,
|
- ``chmod(2)`` is not available. It's not possible to modify file permissions,
|
||||||
yet. A future version of WASI may provide a limited ``set_permissions`` API.
|
yet. A future version of WASI may provide a limited ``set_permissions`` API.
|
||||||
|
- User/group related features like ``os.chown()``, ``os.getuid``, etc. are
|
||||||
|
stubs or fail with ``ENOTSUP``.
|
||||||
- File locking (``fcntl``) is not available.
|
- File locking (``fcntl``) is not available.
|
||||||
- ``os.pipe()``, ``os.mkfifo()``, and ``os.mknod()`` are not supported.
|
- ``os.pipe()``, ``os.mkfifo()``, and ``os.mknod()`` are not supported.
|
||||||
- ``process_time`` does not work as expected because it's implemented using
|
- ``process_time`` does not work as expected because it's implemented using
|
||||||
wall clock.
|
wall clock.
|
||||||
- ``os.umask`` is a stub.
|
- ``os.umask()`` is a stub.
|
||||||
- ``sys.executable`` is empty.
|
- ``sys.executable`` is empty.
|
||||||
- ``/dev/null`` / ``os.devnull`` may not be available.
|
- ``/dev/null`` / ``os.devnull`` may not be available.
|
||||||
|
- ``os.utime*()`` is buggy in WASM SDK 15.0, see
|
||||||
|
[utimensat() with timespec=NULL sets wrong time](https://github.com/bytecodealliance/wasmtime/issues/4184)
|
||||||
|
- ``os.symlink()`` fails with ``PermissionError`` when attempting to create a
|
||||||
|
symlink with an absolute path with wasmtime 0.36.0. The wasmtime runtime
|
||||||
|
uses ``openat2(2)`` syscall with flag ``RESOLVE_BENEATH`` to open files.
|
||||||
|
The flag causes the syscall to reject symlinks with absolute paths.
|
||||||
|
- ``os.curdir`` (aka ``.``) seems to behave differently, which breaks some
|
||||||
|
``importlib`` tests that add ``.`` to ``sys.path`` and indirectly
|
||||||
|
``sys.path_importer_cache``.
|
||||||
|
- WASI runtime environments may not provide a dedicated temp directory.
|
||||||
|
|
||||||
|
|
||||||
# Detect WebAssembly builds
|
# Detect WebAssembly builds
|
||||||
|
|
|
@ -26,6 +26,7 @@ ac_cv_func_mkfifo=no
|
||||||
ac_cv_func_mkfifoat=no
|
ac_cv_func_mkfifoat=no
|
||||||
ac_cv_func_mknod=no
|
ac_cv_func_mknod=no
|
||||||
ac_cv_func_mknodat=no
|
ac_cv_func_mknodat=no
|
||||||
|
ac_cv_func_makedev=no
|
||||||
|
|
||||||
# fdopendir() fails on SDK 15.0,
|
# fdopendir() fails on SDK 15.0,
|
||||||
# OSError: [Errno 28] Invalid argument: '.'
|
# OSError: [Errno 28] Invalid argument: '.'
|
||||||
|
|
3
configure
generated
vendored
3
configure
generated
vendored
|
@ -22472,6 +22472,9 @@ case $ac_sys_system in #(
|
||||||
|
|
||||||
py_cv_module__ctypes_test=n/a
|
py_cv_module__ctypes_test=n/a
|
||||||
py_cv_module_fcntl=n/a
|
py_cv_module_fcntl=n/a
|
||||||
|
py_cv_module_mmap=n/a
|
||||||
|
py_cv_module_resource=n/a
|
||||||
|
py_cv_module_termios=n/a
|
||||||
py_cv_module_=n/a
|
py_cv_module_=n/a
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -6606,10 +6606,13 @@ AS_CASE([$ac_sys_system],
|
||||||
],
|
],
|
||||||
[Emscripten/node*], [],
|
[Emscripten/node*], [],
|
||||||
[WASI/*], [
|
[WASI/*], [
|
||||||
dnl WASI SDK 15.0 does not support file locking.
|
dnl WASI SDK 15.0 does not support file locking, mmap, and more.
|
||||||
PY_STDLIB_MOD_SET_NA(
|
PY_STDLIB_MOD_SET_NA(
|
||||||
[_ctypes_test],
|
[_ctypes_test],
|
||||||
[fcntl],
|
[fcntl],
|
||||||
|
[mmap],
|
||||||
|
[resource],
|
||||||
|
[termios],
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in a new issue