summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrett Cannon <bcannon@gmail.com>2007-03-13 02:34:09 (GMT)
committerBrett Cannon <bcannon@gmail.com>2007-03-13 02:34:09 (GMT)
commit41d4e32353a546036d76c154169917f5f754ce09 (patch)
tree639cdacc6cf63d28c7d9c26e0745be3c28153502
parent192cd567bdb7791560629ea43365cd1079f2fc54 (diff)
downloadcpython-41d4e32353a546036d76c154169917f5f754ce09.zip
cpython-41d4e32353a546036d76c154169917f5f754ce09.tar.gz
cpython-41d4e32353a546036d76c154169917f5f754ce09.tar.bz2
Add test.test_support.transient_internet . Returns a context manager that
nests test.test_support.TransientResource context managers that capture exceptions raised when the Internet connection is flaky. Initially using in test_socket_ssl but should probably be expanded to cover any test that should not raise the captured exceptions if the Internet connection works.
-rw-r--r--Lib/test/test_socket_ssl.py2
-rw-r--r--Lib/test/test_support.py15
2 files changed, 14 insertions, 3 deletions
diff --git a/Lib/test/test_socket_ssl.py b/Lib/test/test_socket_ssl.py
index 8fb7e4c..1f2b9d1 100644
--- a/Lib/test/test_socket_ssl.py
+++ b/Lib/test/test_socket_ssl.py
@@ -27,7 +27,7 @@ def test_basic():
print "didn't raise TypeError"
socket.RAND_add("this is a random string", 75.0)
- with test_support.TransientResource(IOError, errno=errno.ETIMEDOUT):
+ with test_support.transient_internet():
f = urllib.urlopen('https://sf.net')
buf = f.read()
f.close()
diff --git a/Lib/test/test_support.py b/Lib/test/test_support.py
index 2e47aed..880e8e8 100644
--- a/Lib/test/test_support.py
+++ b/Lib/test/test_support.py
@@ -3,7 +3,9 @@
if __name__ != 'test.test_support':
raise ImportError, 'test_support must be imported from the test package'
-from contextlib import contextmanager
+import contextlib
+import errno
+import socket
import sys
import warnings
@@ -271,7 +273,7 @@ def open_urlresource(url):
fn, _ = urllib.urlretrieve(url, filename)
return open(fn)
-@contextmanager
+@contextlib.contextmanager
def guard_warnings_filter():
"""Guard the warnings filter from being permanently changed."""
original_filters = warnings.filters[:]
@@ -338,6 +340,15 @@ class TransientResource(object):
raise ResourceDenied("an optional resource is not available")
+def transient_internet():
+ """Return a context manager that raises ResourceDenied when various issues
+ with the Internet connection manifest themselves as exceptions."""
+ time_out = TransientResource(IOError, errno=errno.ETIMEDOUT)
+ socket_peer_reset = TransientResource(socket.error, errno=errno.ECONNRESET)
+ ioerror_peer_reset = TransientResource(IOError, errno=errno.ECONNRESET)
+ return contextlib.nested(time_out, peer_reset, ioerror_peer_reset)
+
+
#=======================================================================
# Decorator for running a function in a different locale, correctly resetting
# it afterwards.