]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-112536: Add --tsan test for reasonable TSAN execution times. (gh-116601)
authorDonghee Na <donghee.na@python.org>
Fri, 15 Mar 2024 16:07:16 +0000 (01:07 +0900)
committerGitHub <noreply@github.com>
Fri, 15 Mar 2024 16:07:16 +0000 (01:07 +0900)
Lib/test/libregrtest/cmdline.py
Lib/test/libregrtest/main.py
Lib/test/libregrtest/tsan.py [new file with mode: 0644]
Misc/NEWS.d/next/Tests/2024-03-11-23-20-28.gh-issue-112536.Qv1RrX.rst [new file with mode: 0644]
Tools/tsan/supressions.txt [new file with mode: 0644]

index 608b12bb6f2a3813cc0b4581a8975f47cf2a3f43..876b1bcd2ca40668e55e57c2d57687a17246f528 100644 (file)
@@ -164,6 +164,7 @@ class Namespace(argparse.Namespace):
         self.match_tests: TestFilter = []
         self.pgo = False
         self.pgo_extended = False
+        self.tsan = False
         self.worker_json = None
         self.start = None
         self.timeout = None
@@ -333,6 +334,8 @@ def _create_parser():
                        help='enable Profile Guided Optimization (PGO) training')
     group.add_argument('--pgo-extended', action='store_true',
                        help='enable extended PGO training (slower training)')
+    group.add_argument('--tsan', dest='tsan', action='store_true',
+                       help='run a subset of test cases that are proper for the TSAN test')
     group.add_argument('--fail-env-changed', action='store_true',
                        help='if a test file alters the environment, mark '
                             'the test as failed')
index 126daca388fd7f13125fdd52b1918af89f58188b..70f723a92eb44ae447591c10e77ec86bc03188e8 100644 (file)
@@ -18,6 +18,7 @@ from .results import TestResults, EXITCODE_INTERRUPTED
 from .runtests import RunTests, HuntRefleak
 from .setup import setup_process, setup_test_dir
 from .single import run_single_test, PROGRESS_MIN_TIME
+from .tsan import setup_tsan_tests
 from .utils import (
     StrPath, StrJSON, TestName, TestList, TestTuple, TestFilter,
     strip_py_suffix, count, format_duration,
@@ -56,6 +57,7 @@ class Regrtest:
         self.quiet: bool = ns.quiet
         self.pgo: bool = ns.pgo
         self.pgo_extended: bool = ns.pgo_extended
+        self.tsan: bool = ns.tsan
 
         # Test results
         self.results: TestResults = TestResults()
@@ -183,6 +185,9 @@ class Regrtest:
             # add default PGO tests if no tests are specified
             setup_pgo_tests(self.cmdline_args, self.pgo_extended)
 
+        if self.tsan:
+            setup_tsan_tests(self.cmdline_args)
+
         exclude_tests = set()
         if self.exclude:
             for arg in self.cmdline_args:
diff --git a/Lib/test/libregrtest/tsan.py b/Lib/test/libregrtest/tsan.py
new file mode 100644 (file)
index 0000000..150fcec
--- /dev/null
@@ -0,0 +1,24 @@
+# Set of tests run by default if --tsan is specified.  The tests below were
+# chosen because they use threads and run in a reasonable amount of time.
+
+TSAN_TESTS = [
+    'test_code',
+    'test_enum',
+    'test_functools',
+    'test_httpservers',
+    'test_imaplib',
+    'test_importlib',
+    'test_io',
+    'test_logging',
+    'test_ssl',
+    'test_syslog',
+    'test_thread',
+    'test_threadedtempfile',
+    'test_threading_local',
+    'test_threadsignals',
+]
+
+
+def setup_tsan_tests(cmdline_args):
+    if not cmdline_args:
+        cmdline_args[:] = TSAN_TESTS[:]
diff --git a/Misc/NEWS.d/next/Tests/2024-03-11-23-20-28.gh-issue-112536.Qv1RrX.rst b/Misc/NEWS.d/next/Tests/2024-03-11-23-20-28.gh-issue-112536.Qv1RrX.rst
new file mode 100644 (file)
index 0000000..de9e1c5
--- /dev/null
@@ -0,0 +1,2 @@
+Add --tsan to test.regrtest for running TSAN tests in reasonable execution
+times. Patch by Donghee Na.
diff --git a/Tools/tsan/supressions.txt b/Tools/tsan/supressions.txt
new file mode 100644 (file)
index 0000000..448dfac
--- /dev/null
@@ -0,0 +1,5 @@
+## reference: https://github.com/google/sanitizers/wiki/ThreadSanitizerSuppressions
+race:get_allocator_unlocked
+race:set_allocator_unlocked
+race:mi_heap_visit_pages
+race:_mi_heap_delayed_free_partial