summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'patches/22_all_tests_environment.patch')
-rw-r--r--patches/22_all_tests_environment.patch131
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)