]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Issue 28668: Skip tests where instanciation of multiprocessing.Queue
authorXavier de Gaye <xdegaye@users.sourceforge.net>
Tue, 15 Nov 2016 15:57:52 +0000 (16:57 +0100)
committerXavier de Gaye <xdegaye@users.sourceforge.net>
Tue, 15 Nov 2016 15:57:52 +0000 (16:57 +0100)
would raise ImportError

Lib/test/support/__init__.py
Lib/test/test_logging.py

index 007f3bcf37bd94f920982ff468627f2ab046a527..09095db265ab40eb3220ab076c0bcfeab25e8821 100644 (file)
@@ -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:
index 85344de5735c4b4368cdc03aa6c9b0e675d0ab0b..0e70ccd5f0ee7467c65182ad0cdde5f12545438f 100644 (file)
@@ -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