]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-109276: libregrtest: fix work dir on WASI (#109356)
authorVictor Stinner <vstinner@python.org>
Wed, 13 Sep 2023 01:40:44 +0000 (03:40 +0200)
committerGitHub <noreply@github.com>
Wed, 13 Sep 2023 01:40:44 +0000 (01:40 +0000)
On WASI platform, get_temp_dir() should behave differently since the
parent process is a WASI process and uses a different get_temp_dir()
path.

Fix also WorkerThread._runtest(): don't read JSON file if the worker
process exit code is non-zero.

Lib/test/libregrtest/run_workers.py
Lib/test/libregrtest/utils.py

index f99ca343eefb0622f7d12cfe1a3702929c659cf6..45b2f424ce4e5dfed6841850c7b3ae83de5ea362 100644 (file)
@@ -338,12 +338,11 @@ class WorkerThread(threading.Thread):
 
             if retcode is None:
                 raise WorkerError(self.test_name, None, stdout, state=State.TIMEOUT)
+            if retcode != 0:
+                raise WorkerError(self.test_name, f"Exit code {retcode}", stdout)
 
             result, stdout = self.read_json(json_file, json_tmpfile, stdout)
 
-        if retcode != 0:
-            raise WorkerError(self.test_name, f"Exit code {retcode}", stdout)
-
         if tmp_files:
             msg = (f'\n\n'
                    f'Warning -- {test_name} leaked temporary files '
index ce7342aabfffbe84ba590c6ce55cbeb7ce8c6289..880cec5cc50f4a0fbe1954c79c83764eb9ec8eaa 100644 (file)
@@ -360,14 +360,25 @@ def get_temp_dir(tmp_dir: StrPath | None = None) -> StrPath:
         # to keep the test files in a subfolder.  This eases the cleanup of leftover
         # files using the "make distclean" command.
         if sysconfig.is_python_build():
-            tmp_dir = sysconfig.get_config_var('abs_builddir')
-            if tmp_dir is None:
-                # bpo-30284: On Windows, only srcdir is available. Using
-                # abs_builddir mostly matters on UNIX when building Python
-                # out of the source tree, especially when the source tree
-                # is read only.
-                tmp_dir = sysconfig.get_config_var('srcdir')
-            tmp_dir = os.path.join(tmp_dir, 'build')
+            if not support.is_wasi:
+                tmp_dir = sysconfig.get_config_var('abs_builddir')
+                if tmp_dir is None:
+                    # bpo-30284: On Windows, only srcdir is available. Using
+                    # abs_builddir mostly matters on UNIX when building Python
+                    # out of the source tree, especially when the source tree
+                    # is read only.
+                    tmp_dir = sysconfig.get_config_var('srcdir')
+                tmp_dir = os.path.join(tmp_dir, 'build')
+            else:
+                # WASI platform
+                tmp_dir = sysconfig.get_config_var('projectbase')
+                tmp_dir = os.path.join(tmp_dir, 'build')
+
+                # When get_temp_dir() is called in a worker process,
+                # get_temp_dir() path is different than in the parent process
+                # which is not a WASI process. So the parent does not create
+                # the same "tmp_dir" than the test worker process.
+                os.makedirs(tmp_dir, exist_ok=True)
         else:
             tmp_dir = tempfile.gettempdir()