mirror of https://github.com/python/cpython
Retry connection in case it fails to reduce flakiness
This commit is contained in:
parent
041ee5d373
commit
9846de1dfb
|
@ -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):
|
||||||
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):
|
||||||
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):
|
||||||
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):
|
||||||
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
|
||||||
|
|
Loading…
Reference in New Issue