]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Add skips to crashing tests under sanitizers instead of manually skipping them (GH...
authorPablo Galindo Salgado <Pablogsal@gmail.com>
Tue, 25 Jan 2022 23:14:03 +0000 (23:14 +0000)
committerGitHub <noreply@github.com>
Tue, 25 Jan 2022 23:14:03 +0000 (23:14 +0000)
.github/workflows/build.yml
Lib/test/support/__init__.py
Lib/test/test_crypt.py
Lib/test/test_idle.py
Lib/test/test_tix.py
Lib/test/test_tk.py
Lib/test/test_ttk_guionly.py

index d6af174d1c3a7fbab08449cda4fd7d58230d61b5..5d36dffa80108b40d5397ff2e1d0da44058c53bf 100644 (file)
@@ -311,4 +311,7 @@ jobs:
       #
       # Skip multiprocessing and concurrent.futures tests which are affected by
       # bpo-45200 bug: libasan dead lock in pthread_create().
-      run: xvfb-run make buildbottest TESTOPTS="-j4 -uall,-cpu -x test_ctypes test_crypt test_decimal test_faulthandler test_interpreters test___all__ test_idle test_tix test_tk test_ttk_guionly test_ttk_textonly test_multiprocessing_fork test_multiprocessing_forkserver test_multiprocessing_spawn test_tools test_peg_generator test_concurrent_futures"
+      #
+      # test___all__ is skipped because importing some modules directly can trigger
+      # known problems with ASAN (like tk or crypt).
+      run: xvfb-run make buildbottest TESTOPTS="-j4 -uall,-cpu -x test___all__ test_multiprocessing_fork test_multiprocessing_forkserver test_multiprocessing_spawn test_tools test_peg_generator test_concurrent_futures"
index 583d94f41e563060779be175100d231c943d5923..d71cfe5ee44fd070b5b61473bfcad8b92320fb1d 100644 (file)
@@ -43,7 +43,7 @@ __all__ = [
     "has_subprocess_support", "requires_subprocess",
     "anticipate_failure", "load_package_tests", "detect_api_mismatch",
     "check__all__", "skip_if_buggy_ucrt_strfptime",
-    "check_disallow_instantiation", "skip_if_sanitizer",
+    "check_disallow_instantiation", "check_sanitizer", "skip_if_sanitizer",
     # sys
     "is_jython", "is_android", "is_emscripten", "is_wasi",
     "check_impl_detail", "unix_shell", "setswitchinterval",
@@ -384,13 +384,11 @@ def skip_if_buildbot(reason=None):
         isbuildbot = os.environ.get('USER') == 'buildbot'
     return unittest.skipIf(isbuildbot, reason)
 
-def skip_if_sanitizer(reason=None, *, address=False, memory=False, ub=False):
-    """Decorator raising SkipTest if running with a sanitizer active."""
+def check_sanitizer(*, address=False, memory=False, ub=False):
+    """Returns True if Python is compiled with sanitizer support"""
     if not (address or memory or ub):
         raise ValueError('At least one of address, memory, or ub must be True')
 
-    if not reason:
-        reason = 'not working with sanitizers active'
 
     _cflags = sysconfig.get_config_var('CFLAGS') or ''
     _config_args = sysconfig.get_config_var('CONFIG_ARGS') or ''
@@ -406,11 +404,18 @@ def skip_if_sanitizer(reason=None, *, address=False, memory=False, ub=False):
         '-fsanitize=undefined' in _cflags or
         '--with-undefined-behavior-sanitizer' in _config_args
     )
-    skip = (
+    return (
         (memory and memory_sanitizer) or
         (address and address_sanitizer) or
         (ub and ub_sanitizer)
     )
+
+
+def skip_if_sanitizer(reason=None, *, address=False, memory=False, ub=False):
+    """Decorator raising SkipTest if running with a sanitizer active."""
+    if not reason:
+        reason = 'not working with sanitizers active'
+    skip = check_sanitizer(address=address, memory=memory, ub=ub)
     return unittest.skipIf(skip, reason)
 
 
index 5dc83b4ecbfa008d78d41ef2d51bd1784ba2d111..877c575c5534ae76bdfec11f85394bb1f29a6ee6 100644 (file)
@@ -1,8 +1,11 @@
 import sys
 import unittest
+from test.support import check_sanitizer
 
 
 try:
+    if check_sanitizer(address=True, memory=True):
+        raise unittest.SkipTest("The crypt module SEGFAULTs on ASAN/MSAN builds")
     import crypt
     IMPORT_ERROR = None
 except ImportError as ex:
index 8756b766334e831254d784669411338740290c2d..b94b18a541a7018258d91e0a8b3c00748d882179 100644 (file)
@@ -1,5 +1,9 @@
 import unittest
 from test.support.import_helper import import_module
+from test.support import check_sanitizer
+
+if check_sanitizer(address=True, memory=True):
+    raise unittest.SkipTest("Tests involvin libX11 can SEGFAULT on ASAN/MSAN builds")
 
 # Skip test_idle if _tkinter wasn't built, if tkinter is missing,
 # if tcl/tk is not the 8.5+ needed for ttk widgets,
index 8a60c7c8e1fbd57fcafce8e474bf901325ea31bf..454baeb38a93425a1d32d57ec530b4e43a42fd7d 100644 (file)
@@ -2,6 +2,11 @@ import sys
 import unittest
 from test import support
 from test.support import import_helper
+from test.support import check_sanitizer
+
+if check_sanitizer(address=True, memory=True):
+    raise unittest.SkipTest("Tests involvin libX11 can SEGFAULT on ASAN/MSAN builds")
+
 
 # Skip this test if the _tkinter module wasn't built.
 _tkinter = import_helper.import_module('_tkinter')
index 69cc2322cd9aa8732277864ac94f2bf561b0da6e..8f90cbaba9f7c4ebf589a03696d86248f0ce7358 100644 (file)
@@ -1,5 +1,11 @@
+import unittest
 from test import support
 from test.support import import_helper
+from test.support import check_sanitizer
+
+if check_sanitizer(address=True, memory=True):
+    raise unittest.SkipTest("Tests involvin libX11 can SEGFAULT on ASAN/MSAN builds")
+
 # Skip test if _tkinter wasn't built.
 import_helper.import_module('_tkinter')
 
index 8f59839d066e682d58312ed418a03db87e457a5e..c4919045d75cb7b43449328bcf3375c8151f0653 100644 (file)
@@ -1,6 +1,10 @@
 import unittest
 from test import support
 from test.support import import_helper
+from test.support import check_sanitizer
+
+if check_sanitizer(address=True, memory=True):
+    raise unittest.SkipTest("Tests involvin libX11 can SEGFAULT on ASAN/MSAN builds")
 
 # Skip this test if _tkinter wasn't built.
 import_helper.import_module('_tkinter')