Kaydet (Commit) 9846de1d authored tarafından Neal Norwitz's avatar Neal Norwitz

Retry connection in case it fails to reduce flakiness

üst 041ee5d3
...@@ -14,8 +14,22 @@ import urllib ...@@ -14,8 +14,22 @@ import urllib
# Optionally test SSL support, if we have it in the tested platform # Optionally test SSL support, if we have it in the tested platform
skip_expected = not hasattr(socket, "ssl") skip_expected = not hasattr(socket, "ssl")
class ConnectedTests(unittest.TestCase): 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): def testBasic(self):
socket.RAND_status() socket.RAND_status()
try: try:
...@@ -27,7 +41,7 @@ class ConnectedTests(unittest.TestCase): ...@@ -27,7 +41,7 @@ class ConnectedTests(unittest.TestCase):
socket.RAND_add("this is a random string", 75.0) socket.RAND_add("this is a random string", 75.0)
with test_support.transient_internet(): with test_support.transient_internet():
f = urllib.urlopen('https://sf.net') f = self.urlopen('https://sf.net')
buf = f.read() buf = f.read()
f.close() f.close()
...@@ -36,7 +50,7 @@ class ConnectedTests(unittest.TestCase): ...@@ -36,7 +50,7 @@ class ConnectedTests(unittest.TestCase):
print >> sys.stderr, """\ print >> sys.stderr, """\
WARNING: an attempt to connect to %r %s, in WARNING: an attempt to connect to %r %s, in
test_timeout. That may be legitimate, but is not the outcome we 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) changed to use a more reliable address.""" % (ADDR, extra_msg)
# A service which issues a welcome banner (without need to write # A service which issues a welcome banner (without need to write
...@@ -103,6 +117,19 @@ class BasicTests(unittest.TestCase): ...@@ -103,6 +117,19 @@ class BasicTests(unittest.TestCase):
connector() connector()
t.join() 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): def test_978833(self):
if test_support.verbose: if test_support.verbose:
print "test_978833 ..." print "test_978833 ..."
...@@ -110,7 +137,7 @@ class BasicTests(unittest.TestCase): ...@@ -110,7 +137,7 @@ class BasicTests(unittest.TestCase):
import os, httplib, ssl import os, httplib, ssl
with test_support.transient_internet(): with test_support.transient_internet():
s = socket.socket(socket.AF_INET) s = socket.socket(socket.AF_INET)
s.connect(("svn.python.org", 443)) self.connect(s, ("svn.python.org", 443))
fd = s._sock.fileno() fd = s._sock.fileno()
sock = ssl.wrap_socket(s) sock = ssl.wrap_socket(s)
s = None s = None
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment