Commit abcf558b authored by Xavier de Gaye's avatar Xavier de Gaye

Issue 28668: Skip tests where instanciation of multiprocessing.Queue

would raise ImportError
parent d42d752c
...@@ -89,6 +89,7 @@ __all__ = [ ...@@ -89,6 +89,7 @@ __all__ = [
"bigmemtest", "bigaddrspacetest", "cpython_only", "get_attribute", "bigmemtest", "bigaddrspacetest", "cpython_only", "get_attribute",
"requires_IEEE_754", "skip_unless_xattr", "requires_zlib", "requires_IEEE_754", "skip_unless_xattr", "requires_zlib",
"anticipate_failure", "load_package_tests", "detect_api_mismatch", "anticipate_failure", "load_package_tests", "detect_api_mismatch",
"requires_multiprocessing_queue",
# sys # sys
"is_jython", "check_impl_detail", "is_jython", "check_impl_detail",
# network # network
...@@ -1731,6 +1732,22 @@ def impl_detail(msg=None, **guards): ...@@ -1731,6 +1732,22 @@ def impl_detail(msg=None, **guards):
msg = msg.format(' or '.join(guardnames)) msg = msg.format(' or '.join(guardnames))
return unittest.skip(msg) 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): def _parse_guards(guards):
# Returns a tuple ({platform_name: run_me}, default_value) # Returns a tuple ({platform_name: run_me}, default_value)
if not guards: if not guards:
......
...@@ -3066,6 +3066,7 @@ if hasattr(logging.handlers, 'QueueListener'): ...@@ -3066,6 +3066,7 @@ if hasattr(logging.handlers, 'QueueListener'):
self.assertEqual(mock_handle.call_count, 5 * self.repeat, self.assertEqual(mock_handle.call_count, 5 * self.repeat,
'correct number of handled log messages') 'correct number of handled log messages')
@support.requires_multiprocessing_queue
@patch.object(logging.handlers.QueueListener, 'handle') @patch.object(logging.handlers.QueueListener, 'handle')
def test_handle_called_with_mp_queue(self, mock_handle): def test_handle_called_with_mp_queue(self, mock_handle):
for i in range(self.repeat): for i in range(self.repeat):
...@@ -3082,6 +3083,7 @@ if hasattr(logging.handlers, 'QueueListener'): ...@@ -3082,6 +3083,7 @@ if hasattr(logging.handlers, 'QueueListener'):
except queue.Empty: except queue.Empty:
return [] return []
@support.requires_multiprocessing_queue
def test_no_messages_in_queue_after_stop(self): def test_no_messages_in_queue_after_stop(self):
""" """
Five messages are logged then the QueueListener is stopped. This Five messages are logged then the QueueListener is stopped. This
......
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