mirror of
https://github.com/python/cpython.git
synced 2025-08-30 13:38:43 +00:00
bpo-28668: test.support.requires_multiprocessing_queue is removed (GH-4560)
Skip tests with test.support.import_module('multiprocessing.synchronize') instead when the semaphore implementation is broken or missing.
This commit is contained in:
parent
a561862048
commit
bf2b65e413
3 changed files with 10 additions and 20 deletions
|
@ -87,8 +87,7 @@ __all__ = [
|
|||
"bigmemtest", "bigaddrspacetest", "cpython_only", "get_attribute",
|
||||
"requires_IEEE_754", "skip_unless_xattr", "requires_zlib",
|
||||
"anticipate_failure", "load_package_tests", "detect_api_mismatch",
|
||||
"check__all__", "requires_multiprocessing_queue",
|
||||
"skip_unless_bind_unix_socket",
|
||||
"check__all__", "skip_unless_bind_unix_socket",
|
||||
# sys
|
||||
"is_jython", "is_android", "check_impl_detail", "unix_shell",
|
||||
"setswitchinterval",
|
||||
|
@ -1791,22 +1790,6 @@ def impl_detail(msg=None, **guards):
|
|||
msg = msg.format(' or '.join(guardnames))
|
||||
return unittest.skip(msg)
|
||||
|
||||
_have_mp_queue = None
|
||||
def requires_multiprocessing_queue(test):
|
||||
"""Skip decorator for tests that use multiprocessing.Queue."""
|
||||
global _have_mp_queue
|
||||
if _have_mp_queue is None:
|
||||
import multiprocessing
|
||||
# Without a functioning shared semaphore implementation attempts to
|
||||
# instantiate a Queue will result in an ImportError (issue #3770).
|
||||
try:
|
||||
multiprocessing.Queue()
|
||||
_have_mp_queue = True
|
||||
except ImportError:
|
||||
_have_mp_queue = False
|
||||
msg = "requires a functioning shared semaphore implementation"
|
||||
return test if _have_mp_queue else unittest.skip(msg)(test)
|
||||
|
||||
def _parse_guards(guards):
|
||||
# Returns a tuple ({platform_name: run_me}, default_value)
|
||||
if not guards:
|
||||
|
|
|
@ -3211,9 +3211,11 @@ if hasattr(logging.handlers, 'QueueListener'):
|
|||
self.assertEqual(mock_handle.call_count, 5 * self.repeat,
|
||||
'correct number of handled log messages')
|
||||
|
||||
@support.requires_multiprocessing_queue
|
||||
@patch.object(logging.handlers.QueueListener, 'handle')
|
||||
def test_handle_called_with_mp_queue(self, mock_handle):
|
||||
# Issue 28668: The multiprocessing (mp) module is not functional
|
||||
# when the mp.synchronize module cannot be imported.
|
||||
support.import_module('multiprocessing.synchronize')
|
||||
for i in range(self.repeat):
|
||||
log_queue = multiprocessing.Queue()
|
||||
self.setup_and_log(log_queue, '%s_%s' % (self.id(), i))
|
||||
|
@ -3230,7 +3232,6 @@ if hasattr(logging.handlers, 'QueueListener'):
|
|||
except queue.Empty:
|
||||
return []
|
||||
|
||||
@support.requires_multiprocessing_queue
|
||||
def test_no_messages_in_queue_after_stop(self):
|
||||
"""
|
||||
Five messages are logged then the QueueListener is stopped. This
|
||||
|
@ -3238,6 +3239,9 @@ if hasattr(logging.handlers, 'QueueListener'):
|
|||
indicates that messages were not registered on the queue until
|
||||
_after_ the QueueListener stopped.
|
||||
"""
|
||||
# Issue 28668: The multiprocessing (mp) module is not functional
|
||||
# when the mp.synchronize module cannot be imported.
|
||||
support.import_module('multiprocessing.synchronize')
|
||||
for i in range(self.repeat):
|
||||
queue = multiprocessing.Queue()
|
||||
self.setup_and_log(queue, '%s_%s' %(self.id(), i))
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
test.support.requires_multiprocessing_queue is removed. Skip tests with
|
||||
test.support.import_module('multiprocessing.synchronize') instead when the
|
||||
semaphore implementation is broken or missing.
|
Loading…
Add table
Add a link
Reference in a new issue