summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNeal Norwitz <nnorwitz@gmail.com>2008-01-27 17:10:58 (GMT)
committerNeal Norwitz <nnorwitz@gmail.com>2008-01-27 17:10:58 (GMT)
commit9846de1dfbc0ccff160bea198a506df97228f493 (patch)
tree519c0953b0fc56cb3e46afd3a3c43ea345afca70
parent041ee5d373d7a335dcb2ad80268de29182789937 (diff)
downloadcpython-9846de1dfbc0ccff160bea198a506df97228f493.zip
cpython-9846de1dfbc0ccff160bea198a506df97228f493.tar.gz
cpython-9846de1dfbc0ccff160bea198a506df97228f493.tar.bz2
Retry connection in case it fails to reduce flakiness
-rw-r--r--Lib/test/test_socket_ssl.py33
1 files changed, 30 insertions, 3 deletions
diff --git a/Lib/test/test_socket_ssl.py b/Lib/test/test_socket_ssl.py
index 59ad8c7..cdbea31 100644
--- a/Lib/test/test_socket_ssl.py
+++ b/Lib/test/test_socket_ssl.py
@@ -14,8 +14,22 @@ import urllib
# Optionally test SSL support, if we have it in the tested platform
skip_expected = not hasattr(socket, "ssl")
+
class ConnectedTests(unittest.TestCase):
+ def urlopen(self, host, *args, **kwargs):
+ # Connecting to remote hosts is flaky. Make it more robust
+ # by retrying the connection several times.
+ for i in range(3):
+ try:
+ return urllib.urlopen(host, *args, **kwargs)
+ except IOError, e:
+ last_exc = e
+ continue
+ except:
+ raise
+ raise last_exc
+
def testBasic(self):
socket.RAND_status()
try:
@@ -27,7 +41,7 @@ class ConnectedTests(unittest.TestCase):
socket.RAND_add("this is a random string", 75.0)
with test_support.transient_internet():
- f = urllib.urlopen('https://sf.net')
+ f = self.urlopen('https://sf.net')
buf = f.read()
f.close()
@@ -36,7 +50,7 @@ class ConnectedTests(unittest.TestCase):
print >> sys.stderr, """\
WARNING: an attempt to connect to %r %s, in
test_timeout. That may be legitimate, but is not the outcome we
- hoped for. If this message is seen often, test_timeout should be
+ hoped for. If this message is seen often, testTimeout should be
changed to use a more reliable address.""" % (ADDR, extra_msg)
# A service which issues a welcome banner (without need to write
@@ -103,6 +117,19 @@ class BasicTests(unittest.TestCase):
connector()
t.join()
+ def connect(self, s, host_port):
+ # Connecting to remote hosts is flaky. Make it more robust
+ # by retrying the connection several times.
+ for i in range(3):
+ try:
+ return s.connect(host_port)
+ except IOError, e:
+ last_exc = e
+ continue
+ except:
+ raise
+ raise last_exc
+
def test_978833(self):
if test_support.verbose:
print "test_978833 ..."
@@ -110,7 +137,7 @@ class BasicTests(unittest.TestCase):
import os, httplib, ssl
with test_support.transient_internet():
s = socket.socket(socket.AF_INET)
- s.connect(("svn.python.org", 443))
+ self.connect(s, ("svn.python.org", 443))
fd = s._sock.fileno()
sock = ssl.wrap_socket(s)
s = None