From: Victor Stinner Date: Tue, 14 Jun 2022 16:04:53 +0000 (+0200) Subject: gh-93353: Fix regrtest for -jN with N >= 2 (GH-93813) X-Git-Tag: v3.12.0a1~1259 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=36934a16e86f34d69ba2d41630fb5b4d06d59cff;p=thirdparty%2FPython%2Fcpython.git gh-93353: Fix regrtest for -jN with N >= 2 (GH-93813) --- diff --git a/Lib/test/libregrtest/runtest_mp.py b/Lib/test/libregrtest/runtest_mp.py index c6190e5d22d5..a901b582f27d 100644 --- a/Lib/test/libregrtest/runtest_mp.py +++ b/Lib/test/libregrtest/runtest_mp.py @@ -68,8 +68,10 @@ def run_test_in_subprocess(testname: str, ns: Namespace, tmp_dir: str) -> subpro '--worker-args', worker_args] env = dict(os.environ) - env['TMPDIR'] = tmp_dir - env['TEMPDIR'] = tmp_dir + if tmp_dir is not None: + env['TMPDIR'] = tmp_dir + env['TEMP'] = tmp_dir + env['TMP'] = tmp_dir # Running the child from the same working directory as regrtest's original # invocation ensures that TEMPDIR for the child is the same when @@ -271,17 +273,21 @@ class TestWorkerProcess(threading.Thread): self.current_test_name = None def _runtest(self, test_name: str) -> MultiprocessResult: - # gh-93353: Check for leaked temporary files in the parent process, - # since the deletion of temporary files can happen late during - # Python finalization: too late for libregrtest. - tmp_dir = os.getcwd() + '_tmpdir' - tmp_dir = os.path.abspath(tmp_dir) - try: - os.mkdir(tmp_dir) - retcode, stdout = self._run_process(test_name, tmp_dir) - finally: - tmp_files = os.listdir(tmp_dir) - os_helper.rmtree(tmp_dir) + if self.ns.use_mp == 1: + # gh-93353: Check for leaked temporary files in the parent process, + # since the deletion of temporary files can happen late during + # Python finalization: too late for libregrtest. + tmp_dir = os.getcwd() + '_tmpdir' + tmp_dir = os.path.abspath(tmp_dir) + try: + os.mkdir(tmp_dir) + retcode, stdout = self._run_process(test_name, tmp_dir) + finally: + tmp_files = os.listdir(tmp_dir) + os_helper.rmtree(tmp_dir) + else: + retcode, stdout = self._run_process(test_name, None) + tmp_files = () if retcode is None: return self.mp_result_error(Timeout(test_name), stdout) @@ -306,8 +312,8 @@ class TestWorkerProcess(threading.Thread): if tmp_files: msg = (f'\n\n' - f'Warning -- Test leaked temporary files ({len(tmp_files)}): ' - f'{", ".join(sorted(tmp_files))}') + f'Warning -- {test_name} leaked temporary files ' + f'({len(tmp_files)}): {", ".join(sorted(tmp_files))}') stdout += msg if isinstance(result, Passed): result = EnvChanged.from_passed(result) diff --git a/Lib/test/test_regrtest.py b/Lib/test/test_regrtest.py index 5c072ea331d7..93c0cae1473a 100644 --- a/Lib/test/test_regrtest.py +++ b/Lib/test/test_regrtest.py @@ -1375,7 +1375,9 @@ class ArgsTestCase(BaseTestCase): self.check_executed_tests(output, [testname], env_changed=[testname], fail_env_changed=True) - self.assertIn("Warning -- Test leaked temporary files (1): mytmpfile", output) + self.assertIn(f"Warning -- {testname} leaked temporary " + f"files (1): mytmpfile", + output) class TestUtils(unittest.TestCase):