From: Gregory P. Smith Date: Thu, 13 Sep 2018 00:58:40 +0000 (-0700) Subject: bpo-34200: Fix non-determinism of test_pkg (GH-9248) X-Git-Tag: v3.8.0a1~1014 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4ae8ece5cd4c5853b625381db13429f25512108d;p=python bpo-34200: Fix non-determinism of test_pkg (GH-9248) This causes the tearDown code to only unimport the test modules specifically created as part of each test via the self.mkhier method rather than abusing test.support.modules_setup() and the scary test.support.modules_cleanup() code. https://bugs.python.org/issue34200 --- diff --git a/Lib/test/test_pkg.py b/Lib/test/test_pkg.py index 8130eab50a..eed0fd1c6b 100644 --- a/Lib/test/test_pkg.py +++ b/Lib/test/test_pkg.py @@ -5,7 +5,6 @@ import os import tempfile import textwrap import unittest -from test import support # Helpers to create and destroy hierarchies. @@ -50,11 +49,13 @@ class TestPkg(unittest.TestCase): self.root = None self.pkgname = None self.syspath = list(sys.path) - self.modules_before = support.modules_setup() + self.modules_to_cleanup = set() # Populated by mkhier(). def tearDown(self): sys.path[:] = self.syspath - support.modules_cleanup(*self.modules_before) + for modulename in self.modules_to_cleanup: + if modulename in sys.modules: + del sys.modules[modulename] if self.root: # Only clean if the test was actually run cleanout(self.root) @@ -75,17 +76,17 @@ class TestPkg(unittest.TestCase): os.mkdir(root) for name, contents in descr: comps = name.split() + self.modules_to_cleanup.add('.'.join(comps)) fullname = root for c in comps: fullname = os.path.join(fullname, c) if contents is None: os.mkdir(fullname) else: - f = open(fullname, "w") - f.write(contents) - if contents and contents[-1] != '\n': - f.write('\n') - f.close() + with open(fullname, "w") as f: + f.write(contents) + if not contents.endswith('\n'): + f.write('\n') self.root = root # package name is the name of the first item self.pkgname = descr[0][0] diff --git a/Misc/NEWS.d/next/Tests/2018-09-12-17-00-34.bpo-34200.dfxYQK.rst b/Misc/NEWS.d/next/Tests/2018-09-12-17-00-34.bpo-34200.dfxYQK.rst new file mode 100644 index 0000000000..b53339c585 --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2018-09-12-17-00-34.bpo-34200.dfxYQK.rst @@ -0,0 +1,3 @@ +Fixed non-deterministic flakiness of test_pkg by not using the scary +test.support.module_cleanup() logic to save and restore sys.modules contents +between test cases.