"bigmemtest", "bigaddrspacetest", "cpython_only", "get_attribute",
"requires_IEEE_754", "skip_unless_xattr", "requires_zlib",
"anticipate_failure", "load_package_tests", "detect_api_mismatch",
+ "requires_multiprocessing_queue",
# sys
"is_jython", "check_impl_detail",
# network
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:
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):
for i in range(self.repeat):
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