summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_socket.py
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2010-09-07 21:22:56 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2010-09-07 21:22:56 (GMT)
commit4d7979be72ed728f3b334037d59a218314c28550 (patch)
tree547e79227acbfbaa4733f7885977e8f6fa26f8a9 /Lib/test/test_socket.py
parent824cf253e5c5085be1e29b044b6e2c0cad872080 (diff)
downloadcpython-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.py47
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):