diff options
Diffstat (limited to 'patches/22_all_tests_environment.patch')
-rw-r--r-- | patches/22_all_tests_environment.patch | 131 |
1 files changed, 68 insertions, 63 deletions
diff --git a/patches/22_all_tests_environment.patch b/patches/22_all_tests_environment.patch index 4bd2589..3cd7c7c 100644 --- a/patches/22_all_tests_environment.patch +++ b/patches/22_all_tests_environment.patch @@ -19,7 +19,7 @@ https://bugs.python.org/issue1674555 sethelper() --- Lib/test/regrtest.py +++ Lib/test/regrtest.py -@@ -143,6 +143,7 @@ +@@ -152,6 +152,7 @@ import unittest import warnings from inspect import isabstract @@ -27,7 +27,7 @@ https://bugs.python.org/issue1674555 try: import threading -@@ -437,7 +438,6 @@ +@@ -478,7 +479,6 @@ subprocess exits, its return code, stdout and stderr are returned as a 3-tuple. """ @@ -35,11 +35,11 @@ https://bugs.python.org/issue1674555 base_cmd = ([sys.executable] + support.args_from_interpreter_flags() + ['-X', 'faulthandler', '-m', 'test.regrtest']) # required to spawn a new process with PGO flag on/off -@@ -660,9 +660,62 @@ +@@ -711,9 +711,57 @@ support.use_resources = ns.use_resources save_modules = sys.modules.keys() -+ def _runtest(test, verbose, quiet, huntrleaks=False, use_resources=None, ++ def _runtest(ns, test, verbose, quiet, huntrleaks=False, use_resources=None, + output_on_failure=False, failfast=False, match_tests=None, + timeout=None, *, pgo=False): + if test == "test_site": @@ -48,18 +48,15 @@ https://bugs.python.org/issue1674555 + # required to spawn a new process with PGO flag on/off + if pgo: + base_cmd = base_cmd + ['--pgo'] -+ slaveargs = ((test, verbose, quiet), -+ dict(huntrleaks=huntrleaks, -+ use_resources=use_resources, -+ output_on_failure=output_on_failure, -+ timeout=timeout, failfast=failfast, -+ match_tests=match_tests, pgo=pgo)) ++ ns_dict = vars(ns) ++ slaveargs = (ns_dict, test) ++ slaveargs = json.dumps(slaveargs) + env = os.environ.copy() + try: + del env["_PYTHONNOSITEPACKAGES"] + except KeyError: + pass -+ popen = Popen(base_cmd + ['--slaveargs', json.dumps(slaveargs)], ++ popen = Popen(base_cmd + ['--slaveargs', slaveargs], + stdout=PIPE, stderr=PIPE, + universal_newlines=True, + close_fds=(os.name != 'nt'), @@ -67,26 +64,24 @@ https://bugs.python.org/issue1674555 + env=env) + stdout, stderr = popen.communicate() + retcode = popen.wait() -+ stdout, _, result = stdout.strip().rpartition("\n") + if retcode != 0: + result = (CHILD_ERROR, None) + else: ++ stdout, _, result = stdout.strip().rpartition("\n") + if not result: + return (None, None) + result = json.loads(result) + stdout = stdout.rstrip() + stderr = stderr.rstrip() + if stdout: -+ print(stdout) ++ print(stdout, flush=True) + if stderr and not pgo: -+ print(stderr, file=sys.stderr) -+ sys.stdout.flush() -+ sys.stderr.flush() ++ print(stderr, file=sys.stderr, flush=True) + if result[0] == INTERRUPTED: + raise KeyboardInterrupt + return result + else: -+ return runtest(test, verbose, quiet, huntrleaks=huntrleaks, ++ return runtest(ns, test, verbose, quiet, huntrleaks=huntrleaks, + use_resources=use_resources, + output_on_failure=output_on_failure, + failfast=failfast, match_tests=match_tests, @@ -99,51 +94,43 @@ https://bugs.python.org/issue1674555 test_times.append((test_time, test)) if ok == PASSED: good.append(test) -@@ -776,15 +829,15 @@ +@@ -726,7 +774,7 @@ + elif ok == RESOURCE_DENIED: + skipped.append(test) + resource_denieds.append(test) +- elif ok != INTERRUPTED: ++ elif ok not in (None, INTERRUPTED): + raise ValueError("invalid test result: %r" % ok) + + if ns.list_tests: +@@ -856,11 +904,11 @@ + display_progress(test_index, test) + + def runtest_accumulate(): +- result = runtest(ns, test, ns.verbose, ns.quiet, +- ns.huntrleaks, +- output_on_failure=ns.verbose3, +- timeout=ns.timeout, failfast=ns.failfast, +- match_tests=ns.match_tests, pgo=ns.pgo) ++ result = _runtest(ns, test, ns.verbose, ns.quiet, ++ ns.huntrleaks, ++ output_on_failure=ns.verbose3, ++ timeout=ns.timeout, failfast=ns.failfast, ++ match_tests=ns.match_tests, pgo=ns.pgo) + accumulate_result(test, result) + if ns.trace: - # If we're tracing code coverage, then we don't exit with status - # if on a false return value from main. -- tracer.runctx('runtest(test, ns.verbose, ns.quiet, timeout=ns.timeout)', -+ tracer.runctx('_runtest(test, ns.verbose, ns.quiet, timeout=ns.timeout)', - globals=globals(), locals=vars()) - else: - try: -- result = runtest(test, ns.verbose, ns.quiet, -- ns.huntrleaks, -- output_on_failure=ns.verbose3, -- timeout=ns.timeout, failfast=ns.failfast, -- match_tests=ns.match_tests, pgo=ns.pgo) -+ result = _runtest(test, ns.verbose, ns.quiet, -+ ns.huntrleaks, -+ output_on_failure=ns.verbose3, -+ timeout=ns.timeout, failfast=ns.failfast, -+ match_tests=ns.match_tests, pgo=ns.pgo) - accumulate_result(test, result) - except KeyboardInterrupt: - interrupted = True -@@ -838,8 +891,8 @@ +@@ -923,8 +971,8 @@ sys.stdout.flush() try: ns.verbose = True -- ok = runtest(test, True, ns.quiet, ns.huntrleaks, +- ok = runtest(ns, test, True, ns.quiet, ns.huntrleaks, - timeout=ns.timeout, pgo=ns.pgo) -+ ok = _runtest(test, True, ns.quiet, ns.huntrleaks, ++ ok = _runtest(ns, test, True, ns.quiet, ns.huntrleaks, + timeout=ns.timeout, pgo=ns.pgo) except KeyboardInterrupt: # print a newline separate from the ^C print() -@@ -1259,8 +1312,9 @@ - for name, get, restore in self.resource_info(): - current = get() - original = saved_values.pop(name) -- # Check for changes to the resource's value -- if current != original: -+ # Check for changes to the resource's value. test_site is always run -+ # in a subprocess and is allowed to change os.environ and sys.path. -+ if current != original and self.testname != "test_site": - self.changed = True - restore(original) - if not self.quiet and not self.pgo: --- Lib/test/test_site.py +++ Lib/test/test_site.py @@ -8,6 +8,7 @@ @@ -154,18 +141,36 @@ https://bugs.python.org/issue1674555 import os import sys import re -@@ -26,6 +27,10 @@ +@@ -28,12 +29,19 @@ + + + OLD_SYS_PATH = None ++OLD__PYTHONNOSITEPACKAGES = None - import site -+if "_PYTHONNOSITEPACKAGES" in os.environ: -+ del os.environ["_PYTHONNOSITEPACKAGES"] -+ importlib.reload(site) + def setUpModule(): + global OLD_SYS_PATH + OLD_SYS_PATH = sys.path[:] + ++ if "_PYTHONNOSITEPACKAGES" in os.environ: ++ global OLD__PYTHONNOSITEPACKAGES ++ OLD__PYTHONNOSITEPACKAGES = os.environ.get("_PYTHONNOSITEPACKAGES") ++ del os.environ["_PYTHONNOSITEPACKAGES"] ++ importlib.reload(site) + - if site.ENABLE_USER_SITE and not os.path.isdir(site.USER_SITE): - # need to add user site directory for tests - try: -@@ -443,8 +448,11 @@ + if site.ENABLE_USER_SITE and not os.path.isdir(site.USER_SITE): + # need to add user site directory for tests + try: +@@ -47,6 +55,8 @@ + + def tearDownModule(): + sys.path[:] = OLD_SYS_PATH ++ if OLD__PYTHONNOSITEPACKAGES is not None: ++ os.environ["_PYTHONNOSITEPACKAGES"] = OLD__PYTHONNOSITEPACKAGES + + + class HelperFunctionsTests(unittest.TestCase): +@@ -456,8 +466,11 @@ def test_startup_imports(self): # This tests checks which modules are loaded by Python when it # initially starts upon startup. @@ -179,7 +184,7 @@ https://bugs.python.org/issue1674555 stdout, stderr = popen.communicate() --- Makefile.pre.in +++ Makefile.pre.in -@@ -1002,7 +1002,7 @@ +@@ -1004,7 +1004,7 @@ ###################################################################### TESTOPTS= $(EXTRATESTOPTS) |