mirror of
https://github.com/python/cpython.git
synced 2025-08-30 13:38:43 +00:00
gh-109162: libregrtest: fix _decode_worker_job() (#109202)
Decode also HuntRefleak() object inside the RunTests object. Add an unit test on huntrleaks with multiprocessing (-R -jN).
This commit is contained in:
parent
d3ed9921cd
commit
24fa8f2046
3 changed files with 21 additions and 5 deletions
|
@ -249,6 +249,12 @@ class RunTests:
|
|||
else:
|
||||
yield from self.tests
|
||||
|
||||
@staticmethod
|
||||
def from_json_dict(json_dict):
|
||||
if json_dict['hunt_refleak']:
|
||||
json_dict['hunt_refleak'] = HuntRefleak(**json_dict['hunt_refleak'])
|
||||
return RunTests(**json_dict)
|
||||
|
||||
|
||||
# Minimum duration of a test to display its duration or to mention that
|
||||
# the test is running in background
|
||||
|
|
|
@ -68,7 +68,7 @@ class _EncodeWorkerJob(json.JSONEncoder):
|
|||
def _decode_worker_job(d: dict[str, Any]) -> WorkerJob | dict[str, Any]:
|
||||
if "__worker_job__" in d:
|
||||
d.pop('__worker_job__')
|
||||
d['runtests'] = RunTests(**d['runtests'])
|
||||
d['runtests'] = RunTests.from_json_dict(d['runtests'])
|
||||
return WorkerJob(**d)
|
||||
if "__namespace__" in d:
|
||||
d.pop('__namespace__')
|
||||
|
|
|
@ -1018,12 +1018,16 @@ class ArgsTestCase(BaseTestCase):
|
|||
stats=TestStats(4, 1),
|
||||
forever=True)
|
||||
|
||||
def check_leak(self, code, what):
|
||||
def check_leak(self, code, what, *, multiprocessing=False):
|
||||
test = self.create_test('huntrleaks', code=code)
|
||||
|
||||
filename = 'reflog.txt'
|
||||
self.addCleanup(os_helper.unlink, filename)
|
||||
output = self.run_tests('--huntrleaks', '6:3:', test,
|
||||
cmd = ['--huntrleaks', '6:3:']
|
||||
if multiprocessing:
|
||||
cmd.append('-j1')
|
||||
cmd.append(test)
|
||||
output = self.run_tests(*cmd,
|
||||
exitcode=EXITCODE_BAD_TEST,
|
||||
stderr=subprocess.STDOUT)
|
||||
self.check_executed_tests(output, [test], failed=test, stats=1)
|
||||
|
@ -1039,7 +1043,7 @@ class ArgsTestCase(BaseTestCase):
|
|||
self.assertIn(line2, reflog)
|
||||
|
||||
@unittest.skipUnless(support.Py_DEBUG, 'need a debug build')
|
||||
def test_huntrleaks(self):
|
||||
def check_huntrleaks(self, *, multiprocessing: bool):
|
||||
# test --huntrleaks
|
||||
code = textwrap.dedent("""
|
||||
import unittest
|
||||
|
@ -1050,7 +1054,13 @@ class ArgsTestCase(BaseTestCase):
|
|||
def test_leak(self):
|
||||
GLOBAL_LIST.append(object())
|
||||
""")
|
||||
self.check_leak(code, 'references')
|
||||
self.check_leak(code, 'references', multiprocessing=multiprocessing)
|
||||
|
||||
def test_huntrleaks(self):
|
||||
self.check_huntrleaks(multiprocessing=False)
|
||||
|
||||
def test_huntrleaks_mp(self):
|
||||
self.check_huntrleaks(multiprocessing=True)
|
||||
|
||||
@unittest.skipUnless(support.Py_DEBUG, 'need a debug build')
|
||||
def test_huntrleaks_fd_leak(self):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue