diff options
author | Brett Cannon <bcannon@gmail.com> | 2007-03-13 02:34:09 (GMT) |
---|---|---|
committer | Brett Cannon <bcannon@gmail.com> | 2007-03-13 02:34:09 (GMT) |
commit | 41d4e32353a546036d76c154169917f5f754ce09 (patch) | |
tree | 639cdacc6cf63d28c7d9c26e0745be3c28153502 /Lib/test | |
parent | 192cd567bdb7791560629ea43365cd1079f2fc54 (diff) | |
download | cpython-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.
Diffstat (limited to 'Lib/test')
-rw-r--r-- | Lib/test/test_socket_ssl.py | 2 | ||||
-rw-r--r-- | Lib/test/test_support.py | 15 |
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. |