From: Brett Cannon Date: Tue, 13 Mar 2007 02:34:09 +0000 (+0000) Subject: Add test.test_support.transient_internet . Returns a context manager that X-Git-Tag: v2.6a1~2036 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=41d4e32353a546036d76c154169917f5f754ce09;p=thirdparty%2FPython%2Fcpython.git 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. --- diff --git a/Lib/test/test_socket_ssl.py b/Lib/test/test_socket_ssl.py index 8fb7e4c13e84..1f2b9d10ebb5 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 2e47aedf214a..880e8e8906d1 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.