]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-90791: Enable test___all__ on ASAN build (#108286)
authorVictor Stinner <vstinner@python.org>
Tue, 22 Aug 2023 13:52:32 +0000 (15:52 +0200)
committerGitHub <noreply@github.com>
Tue, 22 Aug 2023 13:52:32 +0000 (15:52 +0200)
* Only skip modules and tests related to X11 on ASAN builds: run
  other tests with ASAN.
* Use print(flush=True) to see output earlier when it's redirected to
  a pipe.
* Update issue reference: replace bpo-46633 with gh-90791.

Lib/test/test___all__.py
Lib/test/test_concurrent_futures.py
Lib/test/test_idle.py
Lib/test/test_peg_generator/__init__.py
Lib/test/test_tkinter/__init__.py
Lib/test/test_tools/__init__.py

index 2163f1636566b79d948df5d02521720315272776..c87cde4b3d1fab19bf3a170dab9dd1f58217b37d 100644 (file)
@@ -12,10 +12,19 @@ except ModuleNotFoundError:
 
 
 if support.check_sanitizer(address=True, memory=True):
-    # bpo-46633: test___all__ is skipped because importing some modules
-    # directly can trigger known problems with ASAN (like tk).
-    raise unittest.SkipTest("workaround ASAN build issues on loading tests "
-                            "like tk")
+    SKIP_MODULES = frozenset((
+        # gh-90791: Tests involving libX11 can SEGFAULT on ASAN/MSAN builds.
+        # Skip modules, packages and tests using '_tkinter'.
+        '_tkinter',
+        'tkinter',
+        'test_tkinter',
+        'test_ttk',
+        'test_ttk_textonly',
+        'idlelib',
+        'test_idle',
+    ))
+else:
+    SKIP_MODULES = ()
 
 
 class NoAll(RuntimeError):
@@ -83,15 +92,23 @@ class AllTest(unittest.TestCase):
         for fn in sorted(os.listdir(basedir)):
             path = os.path.join(basedir, fn)
             if os.path.isdir(path):
+                if fn in SKIP_MODULES:
+                    continue
                 pkg_init = os.path.join(path, '__init__.py')
                 if os.path.exists(pkg_init):
                     yield pkg_init, modpath + fn
                     for p, m in self.walk_modules(path, modpath + fn + "."):
                         yield p, m
                 continue
-            if not fn.endswith('.py') or fn == '__init__.py':
+
+            if fn == '__init__.py':
+                continue
+            if not fn.endswith('.py'):
+                continue
+            modname = fn.removesuffix('.py')
+            if modname in SKIP_MODULES:
                 continue
-            yield path, modpath + fn[:-3]
+            yield path, modpath + modname
 
     def test_all(self):
         # List of denied modules and packages
@@ -119,14 +136,14 @@ class AllTest(unittest.TestCase):
             if denied:
                 continue
             if support.verbose:
-                print(modname)
+                print(f"Check {modname}", flush=True)
             try:
                 # This heuristic speeds up the process by removing, de facto,
                 # most test modules (and avoiding the auto-executing ones).
                 with open(path, "rb") as f:
                     if b"__all__" not in f.read():
                         raise NoAll(modname)
-                    self.check_all(modname)
+                self.check_all(modname)
             except NoAll:
                 ignored.append(modname)
             except FailedImport:
index 39dbe234e765e85402e65f23e43c5e96adc7bdd0..0f0ea6190def0642b512130f0054195d566f35ca 100644 (file)
@@ -34,7 +34,7 @@ import multiprocessing as mp
 
 
 if support.check_sanitizer(address=True, memory=True):
-    # bpo-46633: Skip the test because it is too slow when Python is built
+    # gh-90791: Skip the test because it is too slow when Python is built
     # with ASAN/MSAN: between 5 and 20 minutes on GitHub Actions.
     raise unittest.SkipTest("test too slow on ASAN/MSAN build")
 
index ebb1e8eb823b517b27a6ac9c10b1d72725f0f948..3d8b7ecc0ecb6d93c32e15398a9e439d9327c18e 100644 (file)
@@ -3,6 +3,7 @@ from test.support.import_helper import import_module
 from test.support import check_sanitizer
 
 if check_sanitizer(address=True, memory=True):
+    # See gh-90791 for details
     raise unittest.SkipTest("Tests involving libX11 can SEGFAULT on ASAN/MSAN builds")
 
 # Skip test_idle if _tkinter, tkinter, or idlelib are missing.
index 77f72fcc7c6e3bb4e0669307e63d000e397572e0..87281eb5e03c7f1c69661023ab8dac656d7223ef 100644 (file)
@@ -5,7 +5,7 @@ from test.support import load_package_tests
 
 
 if support.check_sanitizer(address=True, memory=True):
-    # bpo-46633: Skip the test because it is too slow when Python is built
+    # gh-90791: Skip the test because it is too slow when Python is built
     # with ASAN/MSAN: between 5 and 20 minutes on GitHub Actions.
     raise unittest.SkipTest("test too slow on ASAN/MSAN build")
 
index b1181bc04b7953a76fb121ba5e5bfcb34dfdf083..aa196c12c804ac0ddea838b003d283dfda0eb274 100644 (file)
@@ -10,6 +10,7 @@ from test.support import (
 
 
 if check_sanitizer(address=True, memory=True):
+    # See gh-90791 for details
     raise unittest.SkipTest("Tests involving libX11 can SEGFAULT on ASAN/MSAN builds")
 
 # Skip test if _tkinter wasn't built.
index 2102b9fceff568c0bb2e8d0a567f30b28c103faf..dde5d84e9edc6b76b76bc3d0f19c60131742c81a 100644 (file)
@@ -8,7 +8,7 @@ from test.support import import_helper
 
 
 if support.check_sanitizer(address=True, memory=True):
-    # bpo-46633: Skip the test because it is too slow when Python is built
+    # gh-90791: Skip the test because it is too slow when Python is built
     # with ASAN/MSAN: between 5 and 20 minutes on GitHub Actions.
     raise unittest.SkipTest("test too slow on ASAN/MSAN build")