Commit 2496f331 authored by Nick Coghlan's avatar Nick Coghlan

Close issue 12958 by flagging expected failures in test_socket on Mac OS X

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