Skip to content

Commit 21c0484

Browse files
committed
pythongh-83434: Disable XML in regrtest when -R option is used (python#117232)
(cherry picked from commit d52bdfb)
1 parent 2633b09 commit 21c0484

File tree

3 files changed

+34
-1
lines changed

3 files changed

+34
-1
lines changed

Lib/test/libregrtest/cmdline.py

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,7 @@ def __init__(self, **kwargs) -> None:
173173
self.fail_rerun = False
174174
self.tempdir = None
175175
self._add_python_opts = True
176+
self.xmlpath = None
176177

177178
super().__init__(**kwargs)
178179

@@ -499,17 +500,28 @@ def _parse_args(args, **kwargs):
499500
ns.randomize = True
500501
if ns.verbose:
501502
ns.header = True
503+
502504
# When -jN option is used, a worker process does not use --verbose3
503505
# and so -R 3:3 -jN --verbose3 just works as expected: there is no false
504506
# alarm about memory leak.
505507
if ns.huntrleaks and ns.verbose3 and ns.use_mp is None:
506-
ns.verbose3 = False
507508
# run_single_test() replaces sys.stdout with io.StringIO if verbose3
508509
# is true. In this case, huntrleaks sees an write into StringIO as
509510
# a memory leak, whereas it is not (gh-71290).
511+
ns.verbose3 = False
510512
print("WARNING: Disable --verbose3 because it's incompatible with "
511513
"--huntrleaks without -jN option",
512514
file=sys.stderr)
515+
516+
if ns.huntrleaks and ns.xmlpath:
517+
# The XML data is written into a file outside runtest_refleak(), so
518+
# it looks like a leak but it's not. Simply disable XML output when
519+
# hunting for reference leaks (gh-83434).
520+
ns.xmlpath = None
521+
print("WARNING: Disable --junit-xml because it's incompatible "
522+
"with --huntrleaks",
523+
file=sys.stderr)
524+
513525
if ns.forever:
514526
# --forever implies --failfast
515527
ns.failfast = True

Lib/test/test_regrtest.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -455,6 +455,24 @@ def test_bisect(self):
455455
regrtest = self.create_regrtest(args)
456456
self.assertTrue(regrtest.want_bisect)
457457

458+
def test_verbose3_huntrleaks(self):
459+
args = ['-R', '3:10', '--verbose3']
460+
with support.captured_stderr():
461+
regrtest = self.create_regrtest(args)
462+
self.assertIsNotNone(regrtest.hunt_refleak)
463+
self.assertEqual(regrtest.hunt_refleak.warmups, 3)
464+
self.assertEqual(regrtest.hunt_refleak.runs, 10)
465+
self.assertFalse(regrtest.output_on_failure)
466+
467+
def test_xml_huntrleaks(self):
468+
args = ['-R', '3:12', '--junit-xml', 'output.xml']
469+
with support.captured_stderr():
470+
regrtest = self.create_regrtest(args)
471+
self.assertIsNotNone(regrtest.hunt_refleak)
472+
self.assertEqual(regrtest.hunt_refleak.warmups, 3)
473+
self.assertEqual(regrtest.hunt_refleak.runs, 12)
474+
self.assertIsNone(regrtest.junit_filename)
475+
458476

459477
@dataclasses.dataclass(slots=True)
460478
class Rerun:
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Disable JUnit XML output (``--junit-xml=FILE`` command line option) in
2+
regrtest when hunting for reference leaks (``-R`` option). Patch by Victor
3+
Stinner.

0 commit comments

Comments
 (0)