bpo-46633: Skip tests on ASAN and/or MSAN builds (GH-31632)

Skip tests on ASAN and/or MSAN builds:

* multiprocessing tests
* test___all__
* test_concurrent_futures
* test_decimal
* test_peg_generator
* test_tools

The ASAN job of GitHub Actions no longer excludes these tests.
This commit is contained in:
Victor Stinner 2022-03-01 15:44:08 +01:00 committed by GitHub
parent 0cc6364185
commit 9204bb72a2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 40 additions and 24 deletions

View file

@ -306,12 +306,4 @@ jobs:
- name: Display build info - name: Display build info
run: make pythoninfo run: make pythoninfo
- name: Tests - name: Tests
# Skip test_tools test_peg_generator test_concurrent_futures because run: xvfb-run make buildbottest TESTOPTS="-j4 -uall,-cpu"
# there are too slow: between 5 and 20 minutes on this CI.
#
# Skip multiprocessing and concurrent.futures tests which are affected by
# bpo-45200 bug: libasan dead lock in pthread_create().
#
# 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"

View file

@ -73,6 +73,12 @@ except ImportError:
msvcrt = None msvcrt = None
if support.check_sanitizer(address=True):
# bpo-45200: Skip multiprocessing tests if Python is built with ASAN to
# work around a libasan race condition: dead lock in pthread_create().
raise unittest.SkipTest("libasan has a pthread_create() dead lock")
def latin(s): def latin(s):
return s.encode('latin') return s.encode('latin')

View file

@ -11,6 +11,13 @@ except ModuleNotFoundError:
_multiprocessing = None _multiprocessing = None
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 or crypt).
raise unittest.SkipTest("workaround ASAN build issues on loading tests "
"like tk or crypt")
class NoAll(RuntimeError): class NoAll(RuntimeError):
pass pass

View file

@ -32,6 +32,12 @@ import multiprocessing.process
import multiprocessing.util import multiprocessing.util
if support.check_sanitizer(address=True, memory=True):
# bpo-46633: 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")
def create_future(state=PENDING, exception=None, result=None): def create_future(state=PENDING, exception=None, result=None):
f = Future() f = Future()
f._state = state f._state = state

View file

@ -34,7 +34,7 @@ import numbers
import locale import locale
from test.support import (run_unittest, run_doctest, is_resource_enabled, from test.support import (run_unittest, run_doctest, is_resource_enabled,
requires_IEEE_754, requires_docstrings, requires_IEEE_754, requires_docstrings,
requires_legacy_unicode_capi) requires_legacy_unicode_capi, check_sanitizer)
from test.support import (TestFailed, from test.support import (TestFailed,
run_with_locale, cpython_only, run_with_locale, cpython_only,
darwin_malloc_err_warning) darwin_malloc_err_warning)
@ -43,17 +43,6 @@ from test.support import warnings_helper
import random import random
import inspect import inspect
import threading import threading
import sysconfig
_cflags = sysconfig.get_config_var('CFLAGS') or ''
_config_args = sysconfig.get_config_var('CONFIG_ARGS') or ''
MEMORY_SANITIZER = (
'-fsanitize=memory' in _cflags or
'--with-memory-sanitizer' in _config_args
)
ADDRESS_SANITIZER = (
'-fsanitize=address' in _cflags
)
if sys.platform == 'darwin': if sys.platform == 'darwin':
@ -5518,7 +5507,8 @@ class CWhitebox(unittest.TestCase):
# Issue 41540: # Issue 41540:
@unittest.skipIf(sys.platform.startswith("aix"), @unittest.skipIf(sys.platform.startswith("aix"),
"AIX: default ulimit: test is flaky because of extreme over-allocation") "AIX: default ulimit: test is flaky because of extreme over-allocation")
@unittest.skipIf(MEMORY_SANITIZER or ADDRESS_SANITIZER, "sanitizer defaults to crashing " @unittest.skipIf(check_sanitizer(address=True, memory=True),
"ASAN/MSAN sanitizer defaults to crashing "
"instead of returning NULL for malloc failure.") "instead of returning NULL for malloc failure.")
def test_maxcontext_exact_arith(self): def test_maxcontext_exact_arith(self):

View file

@ -1,7 +1,15 @@
import os import os.path
import unittest
from test import support
from test.support import load_package_tests 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
# with ASAN/MSAN: between 5 and 20 minutes on GitHub Actions.
raise unittest.SkipTest("test too slow on ASAN/MSAN build")
# Load all tests in package # Load all tests in package
def load_tests(*args): def load_tests(*args):
return load_package_tests(os.path.dirname(__file__), *args) return load_package_tests(os.path.dirname(__file__), *args)

View file

@ -6,6 +6,13 @@ import unittest
from test import support from test import support
from test.support import import_helper 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
# with ASAN/MSAN: between 5 and 20 minutes on GitHub Actions.
raise unittest.SkipTest("test too slow on ASAN/MSAN build")
basepath = os.path.normpath( basepath = os.path.normpath(
os.path.dirname( # <src/install dir> os.path.dirname( # <src/install dir>
os.path.dirname( # Lib os.path.dirname( # Lib