From: Victor Stinner Date: Wed, 13 Sep 2023 01:40:44 +0000 (+0200) Subject: gh-109276: libregrtest: fix work dir on WASI (#109356) X-Git-Tag: v3.13.0a1~455 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=b544c2b1355571a36fe0c212f92e9b163ceb16af;p=thirdparty%2FPython%2Fcpython.git gh-109276: libregrtest: fix work dir on WASI (#109356) 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. --- diff --git a/Lib/test/libregrtest/run_workers.py b/Lib/test/libregrtest/run_workers.py index f99ca343eefb..45b2f424ce4e 100644 --- a/Lib/test/libregrtest/run_workers.py +++ b/Lib/test/libregrtest/run_workers.py @@ -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 ' diff --git a/Lib/test/libregrtest/utils.py b/Lib/test/libregrtest/utils.py index ce7342aabfff..880cec5cc50f 100644 --- a/Lib/test/libregrtest/utils.py +++ b/Lib/test/libregrtest/utils.py @@ -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()