gh-110367: Fix regrtest test_worker_output_on_failure() on ASAN build (#110387)

Set ASAN_OPTIONS="handle_segv=0" env var to run the test.
This commit is contained in:
Victor Stinner 2023-10-05 14:42:36 +02:00 committed by GitHub
parent 2bbbab212f
commit af29282fce
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 20 additions and 9 deletions

View File

@ -436,6 +436,14 @@ def skip_if_sanitizer(reason=None, *, address=False, memory=False, ub=False):
return unittest.skipIf(skip, reason)
def set_sanitizer_env_var(env, option):
for name in ('ASAN_OPTIONS', 'MSAN_OPTIONS', 'UBSAN_OPTIONS'):
if name in env:
env[name] += f':{option}'
else:
env[name] = option
def system_must_validate_cert(f):
"""Skip the test on TLS certificate validation failures."""
@functools.wraps(f)

View File

@ -67,11 +67,7 @@ class FaultHandlerTests(unittest.TestCase):
# Sanitizers must not handle SIGSEGV (ex: for test_enable_fd())
option = 'handle_segv=0'
for name in ('ASAN_OPTIONS', 'MSAN_OPTIONS', 'UBSAN_OPTIONS'):
if name in env:
env[name] += f':{option}'
else:
env[name] = option
support.set_sanitizer_env_var(env, option)
with support.SuppressCrashReport():
process = script_helper.spawn_python('-c', code,

View File

@ -674,7 +674,7 @@ class BaseTestCase(unittest.TestCase):
if 'stderr' not in kw:
kw['stderr'] = subprocess.STDOUT
proc = subprocess.run(args,
universal_newlines=True,
text=True,
input=input,
stdout=subprocess.PIPE,
**kw)
@ -756,8 +756,8 @@ class ProgramsTestCase(BaseTestCase):
self.check_executed_tests(output, self.tests,
randomize=True, stats=len(self.tests))
def run_tests(self, args):
output = self.run_python(args)
def run_tests(self, args, env=None):
output = self.run_python(args, env=env)
self.check_output(output)
def test_script_regrtest(self):
@ -2061,7 +2061,14 @@ class ArgsTestCase(BaseTestCase):
""")
testname = self.create_test(code=code)
output = self.run_tests("-j1", testname, exitcode=EXITCODE_BAD_TEST)
# Sanitizers must not handle SIGSEGV (ex: for test_enable_fd())
env = dict(os.environ)
option = 'handle_segv=0'
support.set_sanitizer_env_var(env, option)
output = self.run_tests("-j1", testname,
exitcode=EXITCODE_BAD_TEST,
env=env)
self.check_executed_tests(output, testname,
failed=[testname],
stats=0, parallel=True)