diff options
author | Antoine Pitrou <solipsis@pitrou.net> | 2010-09-07 21:22:56 (GMT) |
---|---|---|
committer | Antoine Pitrou <solipsis@pitrou.net> | 2010-09-07 21:22:56 (GMT) |
commit | 4d7979be72ed728f3b334037d59a218314c28550 (patch) | |
tree | 547e79227acbfbaa4733f7885977e8f6fa26f8a9 /Lib/test/test_socket.py | |
parent | 824cf253e5c5085be1e29b044b6e2c0cad872080 (diff) | |
download | cpython-4d7979be72ed728f3b334037d59a218314c28550.zip cpython-4d7979be72ed728f3b334037d59a218314c28550.tar.gz cpython-4d7979be72ed728f3b334037d59a218314c28550.tar.bz2 |
Merged revisions 84597-84599 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
........
r84597 | antoine.pitrou | 2010-09-07 22:42:19 +0200 (mar., 07 sept. 2010) | 5 lines
Issue #8574: better implementation of test.support.transient_internet().
Original patch by Victor.
........
r84598 | antoine.pitrou | 2010-09-07 23:05:49 +0200 (mar., 07 sept. 2010) | 6 lines
Issue #9792: In case of connection failure, socket.create_connection()
would swallow the exception and raise a new one, making it impossible
to fetch the original errno, or to filter timeout errors. Now the
original error is re-raised.
........
r84599 | antoine.pitrou | 2010-09-07 23:09:09 +0200 (mar., 07 sept. 2010) | 4 lines
Improve transient_internet() again to detect more network errors,
and use it in test_robotparser. Fixes #8574.
........
Diffstat (limited to 'Lib/test/test_socket.py')
-rw-r--r-- | Lib/test/test_socket.py | 47 |
1 files changed, 42 insertions, 5 deletions
diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py index 5e340bf..2415d53 100644 --- a/Lib/test/test_socket.py +++ b/Lib/test/test_socket.py @@ -14,6 +14,7 @@ import queue import sys import os import array +import contextlib from weakref import proxy import signal @@ -1026,12 +1027,48 @@ class BasicTCPTest2(NetworkConnectionTest, BasicTCPTest): class NetworkConnectionNoServer(unittest.TestCase): - def testWithoutServer(self): + class MockSocket(socket.socket): + def connect(self, *args): + raise socket.timeout('timed out') + + @contextlib.contextmanager + def mocked_socket_module(self): + """Return a socket which times out on connect""" + old_socket = socket.socket + socket.socket = self.MockSocket + try: + yield + finally: + socket.socket = old_socket + + def test_connect(self): port = support.find_unused_port() - self.assertRaises( - socket.error, - lambda: socket.create_connection((HOST, port)) - ) + cli = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + try: + cli.connect((HOST, port)) + except socket.error as err: + self.assertEqual(err.errno, errno.ECONNREFUSED) + else: + self.fail("socket.error not raised") + + def test_create_connection(self): + # Issue #9792: errors raised by create_connection() should have + # a proper errno attribute. + port = support.find_unused_port() + try: + socket.create_connection((HOST, port)) + except socket.error as err: + self.assertEqual(err.errno, errno.ECONNREFUSED) + else: + self.fail("socket.error not raised") + + def test_create_connection_timeout(self): + # Issue #9792: create_connection() should not recast timeout errors + # as generic socket errors. + with self.mocked_socket_module(): + with self.assertRaises(socket.timeout): + socket.create_connection((HOST, 1234)) + class NetworkConnectionAttributesTest(SocketTCPTest, ThreadableTest): |