mirror of https://github.com/python/cpython
gh-93353: regrtest supports checking tmp files with -j2 (#93909)
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.
This commit is contained in:
parent
138db8e48b
commit
4f85cec9e2
|
@ -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)
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
regrtest now checks if a test leaks temporary files or directories if run
|
||||
with -jN option. Patch by Victor Stinner.
|
Loading…
Reference in New Issue