]> granicus.if.org Git - python/commitdiff
Close issue 12958 by flagging expected failures in test_socket on Mac OS X
authorNick Coghlan <ncoghlan@gmail.com>
Mon, 19 Sep 2011 10:26:31 +0000 (20:26 +1000)
committerNick Coghlan <ncoghlan@gmail.com>
Mon, 19 Sep 2011 10:26:31 +0000 (20:26 +1000)
Doc/library/test.rst
Lib/test/support.py
Lib/test/test_socket.py

index be5990c221c57dac3de44213a005aa6ed6acc00a..5e4a1cb9cca2aa3f113a5409a5b5bd2acd329c7d 100644 (file)
@@ -399,12 +399,19 @@ The :mod:`test.support` module defines the following functions:
    otherwise.
 
 
-.. function:: skip_unless_symlink()
+.. decorator:: skip_unless_symlink()
 
    A decorator for running tests that require support for symbolic links.
 
 
-.. function:: run_with_locale(catstr, *locales)
+.. decorator:: anticipate_failure(condition)
+
+   A decorator to conditionally mark tests with
+   :func:`unittest.expectedFailure`. Any use of this decorator should
+   have an associated comment identifying the relevant tracker issue.
+
+
+.. decorator:: run_with_locale(catstr, *locales)
 
    A decorator for running a function in a different locale, correctly
    resetting it after it has finished.  *catstr* is the locale category as
index 03af378efee3707f6197c90d38987cc211af12e6..015564b7c0cc1e88bb3566da93189b1ac8ebd920 100644 (file)
@@ -57,6 +57,7 @@ __all__ = [
     "get_attribute", "swap_item", "swap_attr", "requires_IEEE_754",
     "TestHandler", "Matcher", "can_symlink", "skip_unless_symlink",
     "import_fresh_module", "requires_zlib", "PIPE_MAX_SIZE", "failfast",
+    "anticipate_failure"
     ]
 
 class Error(Exception):
@@ -127,6 +128,17 @@ def _save_and_block_module(name, orig_modules):
     return saved
 
 
+def anticipate_failure(condition):
+    """Decorator to mark a test that is known to be broken in some cases
+
+       Any use of this decorator should have a comment identifying the
+       associated tracker issue.
+    """
+    if condition:
+        return unittest.expectedFailure
+    return lambda f: f
+
+
 def import_fresh_module(name, fresh=(), blocked=(), deprecated=False):
     """Imports and returns a module, deliberately bypassing the sys.modules cache
     and importing a fresh copy of the module. Once the import is complete,
index 83351b9b98aa171a9cdb927a5a952c6a85f72fe8..f47e61e5f8818bad003ee143df40fc3876933875 100644 (file)
@@ -167,6 +167,9 @@ class ThreadableTest:
             raise TypeError("test_func must be a callable function")
         try:
             test_func()
+        except unittest._ExpectedFailure:
+            # We deliberately ignore expected failures
+            pass
         except BaseException as e:
             self.queue.put(e)
         finally:
@@ -2090,6 +2093,8 @@ class SCMRightsTest(SendrecvmsgServerTimeoutBase):
     def _testFDPassCMSG_LEN(self):
         self.createAndSendFDs(1)
 
+    # Issue #12958: The following test has problems on Mac OS X
+    @support.anticipate_failure(sys.platform == "darwin")
     @requireAttrs(socket, "CMSG_SPACE")
     def testFDPassSeparate(self):
         # Pass two FDs in two separate arrays.  Arrays may be combined
@@ -2099,6 +2104,7 @@ class SCMRightsTest(SendrecvmsgServerTimeoutBase):
                              maxcmsgs=2)
 
     @testFDPassSeparate.client_skip
+    @support.anticipate_failure(sys.platform == "darwin")
     def _testFDPassSeparate(self):
         fd0, fd1 = self.newFDs(2)
         self.assertEqual(
@@ -2110,6 +2116,8 @@ class SCMRightsTest(SendrecvmsgServerTimeoutBase):
                                           array.array("i", [fd1]))]),
             len(MSG))
 
+    # Issue #12958: The following test has problems on Mac OS X
+    @support.anticipate_failure(sys.platform == "darwin")
     @requireAttrs(socket, "CMSG_SPACE")
     def testFDPassSeparateMinSpace(self):
         # Pass two FDs in two separate arrays, receiving them into the
@@ -2121,6 +2129,7 @@ class SCMRightsTest(SendrecvmsgServerTimeoutBase):
                              maxcmsgs=2, ignoreflags=socket.MSG_CTRUNC)
 
     @testFDPassSeparateMinSpace.client_skip
+    @support.anticipate_failure(sys.platform == "darwin")
     def _testFDPassSeparateMinSpace(self):
         fd0, fd1 = self.newFDs(2)
         self.assertEqual(
@@ -3024,9 +3033,12 @@ class InterruptedSendTimeoutTest(InterruptedTimeoutBase,
         self.assertNotIsInstance(cm.exception, socket.timeout)
         self.assertEqual(cm.exception.errno, errno.EINTR)
 
+    # Issue #12958: The following tests have problems on Mac OS X
+    @support.anticipate_failure(sys.platform == "darwin")
     def testInterruptedSendTimeout(self):
         self.checkInterruptedSend(self.serv_conn.send, b"a"*512)
 
+    @support.anticipate_failure(sys.platform == "darwin")
     def testInterruptedSendtoTimeout(self):
         # Passing an actual address here as Python's wrapper for
         # sendto() doesn't allow passing a zero-length one; POSIX
@@ -3035,6 +3047,7 @@ class InterruptedSendTimeoutTest(InterruptedTimeoutBase,
         self.checkInterruptedSend(self.serv_conn.sendto, b"a"*512,
                                   self.serv_addr)
 
+    @support.anticipate_failure(sys.platform == "darwin")
     @requireAttrs(socket.socket, "sendmsg")
     def testInterruptedSendmsgTimeout(self):
         self.checkInterruptedSend(self.serv_conn.sendmsg, [b"a"*512])