diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py --- a/Lib/test/support/__init__.py +++ b/Lib/test/support/__init__.py @@ -1320,16 +1320,18 @@ def transient_internet(resource_name, *, for (name, num) in default_errnos] gai_errnos = [getattr(socket, name, num) for (name, num) in default_gai_errnos] def filter_error(err): n = getattr(err, 'errno', None) if (isinstance(err, socket.timeout) or (isinstance(err, socket.gaierror) and n in gai_errnos) or + (isinstance(err, urllib.error.HTTPError) and + 500 <= err.code <= 599) or (isinstance(err, urllib.error.URLError) and "ConnectionRefusedError" in err.reason) or n in captured_errnos): if not verbose: sys.stderr.write(denied.args[0] + "\n") raise denied from err old_timeout = socket.getdefaulttimeout() diff --git a/Lib/test/test_urllib2.py b/Lib/test/test_urllib2.py --- a/Lib/test/test_urllib2.py +++ b/Lib/test/test_urllib2.py @@ -1479,27 +1479,28 @@ class MiscTests(unittest.TestCase): class MyOtherHTTPHandler(urllib.request.HTTPHandler): pass o = build_opener(MyHTTPHandler, MyOtherHTTPHandler) self.opener_has_handler(o, MyHTTPHandler) self.opener_has_handler(o, MyOtherHTTPHandler) @unittest.skipUnless(support.is_resource_enabled('network'), 'test requires network access') def test_issue16464(self): - opener = urllib.request.build_opener() - request = urllib.request.Request("http://www.example.com/") - self.assertEqual(None, request.data) + with support.transient_internet("http://www.example.com/"): + opener = urllib.request.build_opener() + request = urllib.request.Request("http://www.example.com/") + self.assertEqual(None, request.data) - opener.open(request, "1".encode("us-ascii")) - self.assertEqual(b"1", request.data) - self.assertEqual("1", request.get_header("Content-length")) + opener.open(request, "1".encode("us-ascii")) + self.assertEqual(b"1", request.data) + self.assertEqual("1", request.get_header("Content-length")) - opener.open(request, "1234567890".encode("us-ascii")) - self.assertEqual(b"1234567890", request.data) - self.assertEqual("10", request.get_header("Content-length")) + opener.open(request, "1234567890".encode("us-ascii")) + self.assertEqual(b"1234567890", request.data) + self.assertEqual("10", request.get_header("Content-length")) def test_HTTPError_interface(self): """ Issue 13211 reveals that HTTPError didn't implement the URLError interface even though HTTPError is a subclass of URLError. """ msg = 'something bad happened' url = code = fp = None @@ -1640,22 +1641,11 @@ class RequestTests(unittest.TestCase): def test_url_fullurl_get_full_url(self): urls = ['http://docs.python.org', 'http://docs.python.org/library/urllib2.html#OK', 'http://www.python.org/?qs=query#fragment=true' ] for url in urls: req = Request(url) self.assertEqual(req.get_full_url(), req.full_url) -def test_main(verbose=None): - from test import test_urllib2 - support.run_doctest(test_urllib2, verbose) - support.run_doctest(urllib.request, verbose) - tests = (TrivialTests, - OpenerDirectorTests, - HandlerTests, - MiscTests, - RequestTests, - RequestHdrsTests) - support.run_unittest(*tests) if __name__ == "__main__": - test_main(verbose=True) + unittest.main()