]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-93353: regrtest supports checking tmp files with -j2 (#93909)
authorVictor Stinner <vstinner@python.org>
Thu, 16 Jun 2022 19:48:26 +0000 (21:48 +0200)
committerGitHub <noreply@github.com>
Thu, 16 Jun 2022 19:48:26 +0000 (21:48 +0200)
regrtest now also implements checking for leaked temporary files and
directories when using -jN for N >= 2. Use tempfile.mkdtemp() to
create the temporary directory. Skip this check on WASI.

Lib/test/libregrtest/runtest_mp.py
Lib/test/test_regrtest.py
Misc/NEWS.d/next/Tests/2022-06-16-17-50-58.gh-issue-93353.JdpATx.rst [new file with mode: 0644]

index a901b582f27dac75f3b771467ecd0d8137db1a50..71ababd19b876a99d326340529296fd81f11ae11 100644 (file)
@@ -6,6 +6,7 @@ import shlex
 import signal
 import subprocess
 import sys
+import tempfile
 import threading
 import time
 import traceback
@@ -273,14 +274,16 @@ class TestWorkerProcess(threading.Thread):
             self.current_test_name = None
 
     def _runtest(self, test_name: str) -> MultiprocessResult:
-        if self.ns.use_mp == 1:
+        # Don't check for leaked temporary files and directories if Python is
+        # run on WASI. WASI don't pass environment variables like TMPDIR to
+        # worker processes.
+        if not support.is_wasi:
             # 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 = tempfile.mkdtemp(prefix="test_python_")
             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)
index 93c0cae1473a0c495b85133a2e86862cd0aba668..a36d18488a5ef70fe1ad5d95607969d5ad9a5bb0 100644 (file)
@@ -1357,6 +1357,8 @@ class ArgsTestCase(BaseTestCase):
         for name in names:
             self.assertFalse(os.path.exists(name), name)
 
+    @unittest.skipIf(support.is_wasi,
+                     'checking temp files is not implemented on WASI')
     def test_leak_tmp_file(self):
         code = textwrap.dedent(r"""
             import os.path
@@ -1369,15 +1371,17 @@ class ArgsTestCase(BaseTestCase):
                     with open(filename, "wb") as fp:
                         fp.write(b'content')
         """)
-        testname = self.create_test(code=code)
+        testnames = [self.create_test(code=code) for _ in range(3)]
 
-        output = self.run_tests("--fail-env-changed", "-v", "-j1", testname, exitcode=3)
-        self.check_executed_tests(output, [testname],
-                                  env_changed=[testname],
-                                  fail_env_changed=True)
-        self.assertIn(f"Warning -- {testname} leaked temporary "
-                      f"files (1): mytmpfile",
-                      output)
+        output = self.run_tests("--fail-env-changed", "-v", "-j2", *testnames, exitcode=3)
+        self.check_executed_tests(output, testnames,
+                                  env_changed=testnames,
+                                  fail_env_changed=True,
+                                  randomize=True)
+        for testname in testnames:
+            self.assertIn(f"Warning -- {testname} leaked temporary "
+                          f"files (1): mytmpfile",
+                          output)
 
 
 class TestUtils(unittest.TestCase):
diff --git a/Misc/NEWS.d/next/Tests/2022-06-16-17-50-58.gh-issue-93353.JdpATx.rst b/Misc/NEWS.d/next/Tests/2022-06-16-17-50-58.gh-issue-93353.JdpATx.rst
new file mode 100644 (file)
index 0000000..4e23294
--- /dev/null
@@ -0,0 +1,2 @@
+regrtest now checks if a test leaks temporary files or directories if run
+with -jN option. Patch by Victor Stinner.