diff options
author | Xavier de Gaye <xdegaye@users.sourceforge.net> | 2016-11-15 15:57:52 (GMT) |
---|---|---|
committer | Xavier de Gaye <xdegaye@users.sourceforge.net> | 2016-11-15 15:57:52 (GMT) |
commit | 49e8f2d2040d3c15d61a713dcbe14caae41c4f0d (patch) | |
tree | 8572d22f61118565fc6c4bd8f1488fcf536ac675 | |
parent | 5ae6c776a8fc96df95597a9b24109c7448131276 (diff) | |
download | cpython-49e8f2d2040d3c15d61a713dcbe14caae41c4f0d.zip cpython-49e8f2d2040d3c15d61a713dcbe14caae41c4f0d.tar.gz cpython-49e8f2d2040d3c15d61a713dcbe14caae41c4f0d.tar.bz2 |
Issue 28668: Skip tests where instanciation of multiprocessing.Queue
would raise ImportError
-rw-r--r-- | Lib/test/support/__init__.py | 17 | ||||
-rw-r--r-- | Lib/test/test_logging.py | 2 |
2 files changed, 19 insertions, 0 deletions
diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py index 007f3bc..09095db 100644 --- a/Lib/test/support/__init__.py +++ b/Lib/test/support/__init__.py @@ -89,6 +89,7 @@ __all__ = [ "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 @@ -1731,6 +1732,22 @@ 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: diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py index 85344de..0e70ccd 100644 --- a/Lib/test/test_logging.py +++ b/Lib/test/test_logging.py @@ -3066,6 +3066,7 @@ 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): for i in range(self.repeat): @@ -3082,6 +3083,7 @@ 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 |