Add a reasonable timeout to network SSL tests, so as to avoid buildbot timeouts
authorAntoine Pitrou <solipsis@pitrou.net>
Sat, 14 Aug 2010 16:24:38 +0000 (16:24 +0000)
committerAntoine Pitrou <solipsis@pitrou.net>
Sat, 14 Aug 2010 16:24:38 +0000 (16:24 +0000)
when the remote server doesn't answer.

Lib/test/test_ssl.py

index 091234c5809c20cf559d5ec574a4640c04f8caed..175091c46e134c220b6af973c84fe018429e0cb0 100644 (file)
@@ -295,10 +295,12 @@ class ContextTests(unittest.TestCase):
 
 
 class NetworkedTests(unittest.TestCase):
+    timeout = 30
 
     def test_connect(self):
         s = ssl.wrap_socket(socket.socket(socket.AF_INET),
                             cert_reqs=ssl.CERT_NONE)
+        s.settimeout(self.timeout)
         try:
             s.connect(("svn.python.org", 443))
             self.assertEqual({}, s.getpeercert())
@@ -308,6 +310,7 @@ class NetworkedTests(unittest.TestCase):
         # this should fail because we have no verification certs
         s = ssl.wrap_socket(socket.socket(socket.AF_INET),
                             cert_reqs=ssl.CERT_REQUIRED)
+        s.settimeout(self.timeout)
         self.assertRaisesRegexp(ssl.SSLError, "certificate verify failed",
                                 s.connect, ("svn.python.org", 443))
         s.close()
@@ -316,6 +319,7 @@ class NetworkedTests(unittest.TestCase):
         s = ssl.wrap_socket(socket.socket(socket.AF_INET),
                             cert_reqs=ssl.CERT_REQUIRED,
                             ca_certs=SVN_PYTHON_ORG_ROOT_CERT)
+        s.settimeout(self.timeout)
         try:
             s.connect(("svn.python.org", 443))
             self.assertTrue(s.getpeercert())
@@ -326,6 +330,7 @@ class NetworkedTests(unittest.TestCase):
         # Same as test_connect, but with a separately created context
         ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
         s = ctx.wrap_socket(socket.socket(socket.AF_INET))
+        s.settimeout(self.timeout)
         s.connect(("svn.python.org", 443))
         try:
             self.assertEqual({}, s.getpeercert())
@@ -334,12 +339,14 @@ class NetworkedTests(unittest.TestCase):
         # This should fail because we have no verification certs
         ctx.verify_mode = ssl.CERT_REQUIRED
         s = ctx.wrap_socket(socket.socket(socket.AF_INET))
+        s.settimeout(self.timeout)
         self.assertRaisesRegexp(ssl.SSLError, "certificate verify failed",
                                 s.connect, ("svn.python.org", 443))
         s.close()
         # This should succeed because we specify the root cert
         ctx.load_verify_locations(SVN_PYTHON_ORG_ROOT_CERT)
         s = ctx.wrap_socket(socket.socket(socket.AF_INET))
+        s.settimeout(self.timeout)
         s.connect(("svn.python.org", 443))
         try:
             cert = s.getpeercert()
@@ -357,6 +364,7 @@ class NetworkedTests(unittest.TestCase):
         ctx.verify_mode = ssl.CERT_REQUIRED
         ctx.load_verify_locations(capath=CAPATH)
         s = ctx.wrap_socket(socket.socket(socket.AF_INET))
+        s.settimeout(self.timeout)
         s.connect(("svn.python.org", 443))
         try:
             cert = s.getpeercert()
@@ -368,6 +376,7 @@ class NetworkedTests(unittest.TestCase):
         ctx.verify_mode = ssl.CERT_REQUIRED
         ctx.load_verify_locations(capath=BYTES_CAPATH)
         s = ctx.wrap_socket(socket.socket(socket.AF_INET))
+        s.settimeout(self.timeout)
         s.connect(("svn.python.org", 443))
         try:
             cert = s.getpeercert()
@@ -381,6 +390,7 @@ class NetworkedTests(unittest.TestCase):
         # delay closing the underlying "real socket" (here tested with its
         # file descriptor, hence skipping the test under Windows).
         ss = ssl.wrap_socket(socket.socket(socket.AF_INET))
+        ss.settimeout(self.timeout)
         ss.connect(("svn.python.org", 443))
         fd = ss.fileno()
         f = ss.makefile()
@@ -396,6 +406,7 @@ class NetworkedTests(unittest.TestCase):
 
     def test_non_blocking_handshake(self):
         s = socket.socket(socket.AF_INET)
+        s.settimeout(self.timeout)
         s.connect(("svn.python.org", 443))
         s.setblocking(False)
         s = ssl.wrap_socket(s,
@@ -452,6 +463,7 @@ class NetworkedTests(unittest.TestCase):
         s = ssl.wrap_socket(socket.socket(socket.AF_INET),
                             cert_reqs=ssl.CERT_REQUIRED,
                             ca_certs=sha256_cert,)
+        s.settimeout(self.timeout)
         with support.transient_internet():
             try:
                 s.connect(remote)