mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
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
3 changed files with 20 additions and 11 deletions
|
@ -6,6 +6,7 @@ import shlex
|
||||||
import signal
|
import signal
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
|
import tempfile
|
||||||
import threading
|
import threading
|
||||||
import time
|
import time
|
||||||
import traceback
|
import traceback
|
||||||
|
@ -273,14 +274,16 @@ class TestWorkerProcess(threading.Thread):
|
||||||
self.current_test_name = None
|
self.current_test_name = None
|
||||||
|
|
||||||
def _runtest(self, test_name: str) -> MultiprocessResult:
|
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,
|
# gh-93353: Check for leaked temporary files in the parent process,
|
||||||
# since the deletion of temporary files can happen late during
|
# since the deletion of temporary files can happen late during
|
||||||
# Python finalization: too late for libregrtest.
|
# 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)
|
tmp_dir = os.path.abspath(tmp_dir)
|
||||||
try:
|
try:
|
||||||
os.mkdir(tmp_dir)
|
|
||||||
retcode, stdout = self._run_process(test_name, tmp_dir)
|
retcode, stdout = self._run_process(test_name, tmp_dir)
|
||||||
finally:
|
finally:
|
||||||
tmp_files = os.listdir(tmp_dir)
|
tmp_files = os.listdir(tmp_dir)
|
||||||
|
|
|
@ -1357,6 +1357,8 @@ class ArgsTestCase(BaseTestCase):
|
||||||
for name in names:
|
for name in names:
|
||||||
self.assertFalse(os.path.exists(name), name)
|
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):
|
def test_leak_tmp_file(self):
|
||||||
code = textwrap.dedent(r"""
|
code = textwrap.dedent(r"""
|
||||||
import os.path
|
import os.path
|
||||||
|
@ -1369,15 +1371,17 @@ class ArgsTestCase(BaseTestCase):
|
||||||
with open(filename, "wb") as fp:
|
with open(filename, "wb") as fp:
|
||||||
fp.write(b'content')
|
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)
|
output = self.run_tests("--fail-env-changed", "-v", "-j2", *testnames, exitcode=3)
|
||||||
self.check_executed_tests(output, [testname],
|
self.check_executed_tests(output, testnames,
|
||||||
env_changed=[testname],
|
env_changed=testnames,
|
||||||
fail_env_changed=True)
|
fail_env_changed=True,
|
||||||
self.assertIn(f"Warning -- {testname} leaked temporary "
|
randomize=True)
|
||||||
f"files (1): mytmpfile",
|
for testname in testnames:
|
||||||
output)
|
self.assertIn(f"Warning -- {testname} leaked temporary "
|
||||||
|
f"files (1): mytmpfile",
|
||||||
|
output)
|
||||||
|
|
||||||
|
|
||||||
class TestUtils(unittest.TestCase):
|
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…
Add table
Add a link
Reference in a new issue