]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Add test.test_support.transient_internet . Returns a context manager that
authorBrett Cannon <bcannon@gmail.com>
Tue, 13 Mar 2007 02:34:09 +0000 (02:34 +0000)
committerBrett Cannon <bcannon@gmail.com>
Tue, 13 Mar 2007 02:34:09 +0000 (02:34 +0000)
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.

Lib/test/test_socket_ssl.py
Lib/test/test_support.py

index 8fb7e4c13e84b39e02ce87427b167f3c89324500..1f2b9d10ebb5b05445a0943c4294ed6cb9b64c10 100644 (file)
@@ -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()
index 2e47aedf214a19cf8c8f747c6f1a3772aa138a93..880e8e8906d136f29af1b509d52818acd4cd8390 100644 (file)
@@ -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.