mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	gh-110367: Make regrtest --verbose3 compatible with --huntrleaks -jN (#111577)
"./python -m test -j1 -R 3:3 --verbose3" now works as expected, since run_single_test() does not replace sys.stdout with StringIO in this case.
This commit is contained in:
		
							parent
							
								
									ef83b3fc00
								
							
						
					
					
						commit
						d9a5530d23
					
				
					 3 changed files with 34 additions and 2 deletions
				
			
		| 
						 | 
					@ -493,10 +493,16 @@ def _parse_args(args, **kwargs):
 | 
				
			||||||
        ns.randomize = True
 | 
					        ns.randomize = True
 | 
				
			||||||
    if ns.verbose:
 | 
					    if ns.verbose:
 | 
				
			||||||
        ns.header = True
 | 
					        ns.header = True
 | 
				
			||||||
    if ns.huntrleaks and ns.verbose3:
 | 
					    # When -jN option is used, a worker process does not use --verbose3
 | 
				
			||||||
 | 
					    # and so -R 3:3 -jN --verbose3 just works as expected: there is no false
 | 
				
			||||||
 | 
					    # alarm about memory leak.
 | 
				
			||||||
 | 
					    if ns.huntrleaks and ns.verbose3 and ns.use_mp is None:
 | 
				
			||||||
        ns.verbose3 = False
 | 
					        ns.verbose3 = False
 | 
				
			||||||
 | 
					        # run_single_test() replaces sys.stdout with io.StringIO if verbose3
 | 
				
			||||||
 | 
					        # is true. In this case, huntrleaks sees an write into StringIO as
 | 
				
			||||||
 | 
					        # a memory leak, whereas it is not (gh-71290).
 | 
				
			||||||
        print("WARNING: Disable --verbose3 because it's incompatible with "
 | 
					        print("WARNING: Disable --verbose3 because it's incompatible with "
 | 
				
			||||||
              "--huntrleaks: see http://bugs.python.org/issue27103",
 | 
					              "--huntrleaks without -jN option",
 | 
				
			||||||
              file=sys.stderr)
 | 
					              file=sys.stderr)
 | 
				
			||||||
    if ns.forever:
 | 
					    if ns.forever:
 | 
				
			||||||
        # --forever implies --failfast
 | 
					        # --forever implies --failfast
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2120,6 +2120,29 @@ def test_crash(self):
 | 
				
			||||||
            self.assertIn(f"Exit code {exitcode} (SIGSEGV)", output)
 | 
					            self.assertIn(f"Exit code {exitcode} (SIGSEGV)", output)
 | 
				
			||||||
        self.check_line(output, "just before crash!", full=True, regex=False)
 | 
					        self.check_line(output, "just before crash!", full=True, regex=False)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_verbose3(self):
 | 
				
			||||||
 | 
					        code = textwrap.dedent(r"""
 | 
				
			||||||
 | 
					            import unittest
 | 
				
			||||||
 | 
					            from test import support
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            class VerboseTests(unittest.TestCase):
 | 
				
			||||||
 | 
					                def test_pass(self):
 | 
				
			||||||
 | 
					                    print("SPAM SPAM SPAM")
 | 
				
			||||||
 | 
					        """)
 | 
				
			||||||
 | 
					        testname = self.create_test(code=code)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # Run sequentially
 | 
				
			||||||
 | 
					        output = self.run_tests("--verbose3", testname)
 | 
				
			||||||
 | 
					        self.check_executed_tests(output, testname, stats=1)
 | 
				
			||||||
 | 
					        self.assertNotIn('SPAM SPAM SPAM', output)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        # -R option needs a debug build
 | 
				
			||||||
 | 
					        if support.Py_DEBUG:
 | 
				
			||||||
 | 
					            # Check for reference leaks, run in parallel
 | 
				
			||||||
 | 
					            output = self.run_tests("-R", "3:3", "-j1", "--verbose3", testname)
 | 
				
			||||||
 | 
					            self.check_executed_tests(output, testname, stats=1, parallel=True)
 | 
				
			||||||
 | 
					            self.assertNotIn('SPAM SPAM SPAM', output)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TestUtils(unittest.TestCase):
 | 
					class TestUtils(unittest.TestCase):
 | 
				
			||||||
    def test_format_duration(self):
 | 
					    def test_format_duration(self):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,3 @@
 | 
				
			||||||
 | 
					Make regrtest ``--verbose3`` option compatible with ``--huntrleaks -jN``
 | 
				
			||||||
 | 
					options. The ``./python -m test -j1 -R 3:3 --verbose3`` command now works as
 | 
				
			||||||
 | 
					expected. Patch by Victor Stinner.
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue