Commit d9d147b8 authored by Victor Stinner's avatar Victor Stinner

Issue #7449, part 1: fix test_support.py for Python compiled without thread

parent ae9f8bd2
...@@ -18,6 +18,10 @@ import importlib ...@@ -18,6 +18,10 @@ import importlib
import UserDict import UserDict
import re import re
import time import time
try:
import thread
except ImportError:
thread = None
__all__ = ["Error", "TestFailed", "ResourceDenied", "import_module", __all__ = ["Error", "TestFailed", "ResourceDenied", "import_module",
"verbose", "use_resources", "max_memuse", "record_original_stdout", "verbose", "use_resources", "max_memuse", "record_original_stdout",
...@@ -44,7 +48,7 @@ class ResourceDenied(unittest.SkipTest): ...@@ -44,7 +48,7 @@ class ResourceDenied(unittest.SkipTest):
"""Test skipped because it requested a disallowed resource. """Test skipped because it requested a disallowed resource.
This is raised when a test calls requires() for a resource that This is raised when a test calls requires() for a resource that
has not be enabled. It is used to distinguish between expected has not been enabled. It is used to distinguish between expected
and unexpected skips. and unexpected skips.
""" """
...@@ -1078,11 +1082,14 @@ def run_doctest(module, verbosity=None): ...@@ -1078,11 +1082,14 @@ def run_doctest(module, verbosity=None):
# at the end of a test run. # at the end of a test run.
def threading_setup(): def threading_setup():
import thread if thread:
return thread._count(), return thread._count(),
else:
return 1,
def threading_cleanup(nb_threads): def threading_cleanup(nb_threads):
import thread if not thread:
return
_MAX_COUNT = 10 _MAX_COUNT = 10
for count in range(_MAX_COUNT): for count in range(_MAX_COUNT):
...@@ -1093,6 +1100,13 @@ def threading_cleanup(nb_threads): ...@@ -1093,6 +1100,13 @@ def threading_cleanup(nb_threads):
# XXX print a warning in case of failure? # XXX print a warning in case of failure?
def reap_threads(func): def reap_threads(func):
"""Use this function when threads are being used. This will
ensure that the threads are cleaned up even when the test fails.
If threading is unavailable this function does nothing.
"""
if not thread:
return func
@functools.wraps(func) @functools.wraps(func)
def decorator(*args): def decorator(*args):
key = threading_setup() key = threading_setup()
......
...@@ -109,6 +109,8 @@ Extension Modules ...@@ -109,6 +109,8 @@ Extension Modules
Tests Tests
----- -----
- Issue #7449: Fix many tests to support Python compiled without thread support
- Issue #8108: test_ftplib's non-blocking SSL server now has proper handling - Issue #8108: test_ftplib's non-blocking SSL server now has proper handling
of SSL shutdowns. of SSL shutdowns.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment