]> granicus.if.org Git - python/commitdiff
Issue #16463: Fix a transient test_timeout failure.
authorCharles-François Natali <cf.natali@gmail.com>
Fri, 16 Aug 2013 21:19:22 +0000 (23:19 +0200)
committerCharles-François Natali <cf.natali@gmail.com>
Fri, 16 Aug 2013 21:19:22 +0000 (23:19 +0200)
Lib/test/test_timeout.py

index c3c4acfb47941129d2b2dabd841db8576efe7007..bfd2a5c522f9d3062330e26c87513dba0f3ce41e 100644 (file)
@@ -1,5 +1,6 @@
 """Unit tests for socket timeout feature."""
 
+import functools
 import unittest
 from test import support
 
@@ -11,6 +12,18 @@ import errno
 import socket
 
 
+@functools.lru_cache()
+def resolve_address(host, port):
+    """Resolve an (host, port) to an address.
+
+    We must perform name resolution before timeout tests, otherwise it will be
+    performed by connect().
+    """
+    with support.transient_internet(host):
+        return socket.getaddrinfo(host, port, socket.AF_INET,
+                                  socket.SOCK_STREAM)[0][4]
+
+
 class CreationTestCase(unittest.TestCase):
     """Test case for socket.gettimeout() and socket.settimeout()"""
 
@@ -132,7 +145,7 @@ class TCPTimeoutTestCase(TimeoutTestCase):
 
     def setUp(self):
         self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
-        self.addr_remote = ('www.python.org.', 80)
+        self.addr_remote = resolve_address('www.python.org.', 80)
 
     def tearDown(self):
         self.sock.close()
@@ -142,7 +155,7 @@ class TCPTimeoutTestCase(TimeoutTestCase):
         # to a host that silently drops our packets.  We can't simulate this
         # from Python because it's a function of the underlying TCP/IP stack.
         # So, the following Snakebite host has been defined:
-        blackhole = ('blackhole.snakebite.net', 56666)
+        blackhole = resolve_address('blackhole.snakebite.net', 56666)
 
         # Blackhole has been configured to silently drop any incoming packets.
         # No RSTs (for TCP) or ICMP UNREACH (for UDP/ICMP) will be sent back
@@ -154,7 +167,7 @@ class TCPTimeoutTestCase(TimeoutTestCase):
         # to firewalling or general network configuration.  In order to improve
         # our confidence in testing the blackhole, a corresponding 'whitehole'
         # has also been set up using one port higher:
-        whitehole = ('whitehole.snakebite.net', 56667)
+        whitehole = resolve_address('whitehole.snakebite.net', 56667)
 
         # This address has been configured to immediately drop any incoming
         # packets as well, but it does it respectfully with regards to the