mirror of
https://github.com/python/cpython.git
synced 2025-10-07 23:51:16 +00:00
bpo-40275: Move transient_internet from test.support to socket_helper (GH-19711)
This commit is contained in:
parent
bb4a585d90
commit
bfb1cf4465
15 changed files with 153 additions and 144 deletions
|
@ -314,7 +314,7 @@ The :mod:`test.support` module defines the following constants:
|
||||||
|
|
||||||
Usually, a timeout using :data:`INTERNET_TIMEOUT` should not mark a test as
|
Usually, a timeout using :data:`INTERNET_TIMEOUT` should not mark a test as
|
||||||
failed, but skip the test instead: see
|
failed, but skip the test instead: see
|
||||||
:func:`~test.support.transient_internet`.
|
:func:`~test.support.socket_helper.transient_internet`.
|
||||||
|
|
||||||
Its default value is 1 minute.
|
Its default value is 1 minute.
|
||||||
|
|
||||||
|
@ -759,12 +759,6 @@ The :mod:`test.support` module defines the following functions:
|
||||||
A context manager that temporarily sets the process umask.
|
A context manager that temporarily sets the process umask.
|
||||||
|
|
||||||
|
|
||||||
.. function:: transient_internet(resource_name, *, timeout=30.0, errnos=())
|
|
||||||
|
|
||||||
A context manager that raises :exc:`ResourceDenied` when various issues
|
|
||||||
with the internet connection manifest themselves as exceptions.
|
|
||||||
|
|
||||||
|
|
||||||
.. function:: disable_faulthandler()
|
.. function:: disable_faulthandler()
|
||||||
|
|
||||||
A context manager that replaces ``sys.stderr`` with ``sys.__stderr__``.
|
A context manager that replaces ``sys.stderr`` with ``sys.__stderr__``.
|
||||||
|
@ -1488,6 +1482,13 @@ The :mod:`test.support.socket_helper` module provides support for socket tests.
|
||||||
sockets.
|
sockets.
|
||||||
|
|
||||||
|
|
||||||
|
.. function:: transient_internet(resource_name, *, timeout=30.0, errnos=())
|
||||||
|
|
||||||
|
A context manager that raises :exc:`~test.support.ResourceDenied` when
|
||||||
|
various issues with the internet connection manifest themselves as
|
||||||
|
exceptions.
|
||||||
|
|
||||||
|
|
||||||
:mod:`test.support.script_helper` --- Utilities for the Python execution tests
|
:mod:`test.support.script_helper` --- Utilities for the Python execution tests
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
|
||||||
|
|
|
@ -78,7 +78,7 @@ __all__ = [
|
||||||
"requires_linux_version", "requires_mac_ver",
|
"requires_linux_version", "requires_mac_ver",
|
||||||
"check_syntax_error", "check_syntax_warning",
|
"check_syntax_error", "check_syntax_warning",
|
||||||
"TransientResource", "time_out", "socket_peer_reset", "ioerror_peer_reset",
|
"TransientResource", "time_out", "socket_peer_reset", "ioerror_peer_reset",
|
||||||
"transient_internet", "BasicTestRunner", "run_unittest", "run_doctest",
|
"BasicTestRunner", "run_unittest", "run_doctest",
|
||||||
"skip_unless_symlink", "requires_gzip", "requires_bz2", "requires_lzma",
|
"skip_unless_symlink", "requires_gzip", "requires_bz2", "requires_lzma",
|
||||||
"bigmemtest", "bigaddrspacetest", "cpython_only", "get_attribute",
|
"bigmemtest", "bigaddrspacetest", "cpython_only", "get_attribute",
|
||||||
"requires_IEEE_754", "skip_unless_xattr", "requires_zlib",
|
"requires_IEEE_754", "skip_unless_xattr", "requires_zlib",
|
||||||
|
@ -144,8 +144,6 @@ SHORT_TIMEOUT = 30.0
|
||||||
# option.
|
# option.
|
||||||
LONG_TIMEOUT = 5 * 60.0
|
LONG_TIMEOUT = 5 * 60.0
|
||||||
|
|
||||||
_NOT_SET = object()
|
|
||||||
|
|
||||||
|
|
||||||
class Error(Exception):
|
class Error(Exception):
|
||||||
"""Base class for regression test exceptions."""
|
"""Base class for regression test exceptions."""
|
||||||
|
@ -1386,90 +1384,6 @@ socket_peer_reset = TransientResource(OSError, errno=errno.ECONNRESET)
|
||||||
ioerror_peer_reset = TransientResource(OSError, errno=errno.ECONNRESET)
|
ioerror_peer_reset = TransientResource(OSError, errno=errno.ECONNRESET)
|
||||||
|
|
||||||
|
|
||||||
@contextlib.contextmanager
|
|
||||||
def transient_internet(resource_name, *, timeout=_NOT_SET, errnos=()):
|
|
||||||
"""Return a context manager that raises ResourceDenied when various issues
|
|
||||||
with the Internet connection manifest themselves as exceptions."""
|
|
||||||
import socket
|
|
||||||
import nntplib
|
|
||||||
import urllib.error
|
|
||||||
if timeout is _NOT_SET:
|
|
||||||
timeout = INTERNET_TIMEOUT
|
|
||||||
|
|
||||||
default_errnos = [
|
|
||||||
('ECONNREFUSED', 111),
|
|
||||||
('ECONNRESET', 104),
|
|
||||||
('EHOSTUNREACH', 113),
|
|
||||||
('ENETUNREACH', 101),
|
|
||||||
('ETIMEDOUT', 110),
|
|
||||||
# socket.create_connection() fails randomly with
|
|
||||||
# EADDRNOTAVAIL on Travis CI.
|
|
||||||
('EADDRNOTAVAIL', 99),
|
|
||||||
]
|
|
||||||
default_gai_errnos = [
|
|
||||||
('EAI_AGAIN', -3),
|
|
||||||
('EAI_FAIL', -4),
|
|
||||||
('EAI_NONAME', -2),
|
|
||||||
('EAI_NODATA', -5),
|
|
||||||
# Encountered when trying to resolve IPv6-only hostnames
|
|
||||||
('WSANO_DATA', 11004),
|
|
||||||
]
|
|
||||||
|
|
||||||
denied = ResourceDenied("Resource %r is not available" % resource_name)
|
|
||||||
captured_errnos = errnos
|
|
||||||
gai_errnos = []
|
|
||||||
if not captured_errnos:
|
|
||||||
captured_errnos = [getattr(errno, name, num)
|
|
||||||
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
|
|
||||||
("TimeoutError" in err.reason) or
|
|
||||||
("EOFError" 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()
|
|
||||||
try:
|
|
||||||
if timeout is not None:
|
|
||||||
socket.setdefaulttimeout(timeout)
|
|
||||||
yield
|
|
||||||
except nntplib.NNTPTemporaryError as err:
|
|
||||||
if verbose:
|
|
||||||
sys.stderr.write(denied.args[0] + "\n")
|
|
||||||
raise denied from err
|
|
||||||
except OSError as err:
|
|
||||||
# urllib can wrap original socket errors multiple times (!), we must
|
|
||||||
# unwrap to get at the original error.
|
|
||||||
while True:
|
|
||||||
a = err.args
|
|
||||||
if len(a) >= 1 and isinstance(a[0], OSError):
|
|
||||||
err = a[0]
|
|
||||||
# The error can also be wrapped as args[1]:
|
|
||||||
# except socket.error as msg:
|
|
||||||
# raise OSError('socket error', msg).with_traceback(sys.exc_info()[2])
|
|
||||||
elif len(a) >= 2 and isinstance(a[1], OSError):
|
|
||||||
err = a[1]
|
|
||||||
else:
|
|
||||||
break
|
|
||||||
filter_error(err)
|
|
||||||
raise
|
|
||||||
# XXX should we catch generic exceptions and look for their
|
|
||||||
# __cause__ or __context__?
|
|
||||||
finally:
|
|
||||||
socket.setdefaulttimeout(old_timeout)
|
|
||||||
|
|
||||||
|
|
||||||
@contextlib.contextmanager
|
@contextlib.contextmanager
|
||||||
def captured_output(stream_name):
|
def captured_output(stream_name):
|
||||||
"""Return a context manager used by captured_stdout/stdin/stderr
|
"""Return a context manager used by captured_stdout/stdin/stderr
|
||||||
|
|
|
@ -1,7 +1,11 @@
|
||||||
|
import contextlib
|
||||||
import errno
|
import errno
|
||||||
import socket
|
import socket
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
|
from .. import support
|
||||||
|
|
||||||
|
|
||||||
HOST = "localhost"
|
HOST = "localhost"
|
||||||
HOSTv4 = "127.0.0.1"
|
HOSTv4 = "127.0.0.1"
|
||||||
HOSTv6 = "::1"
|
HOSTv6 = "::1"
|
||||||
|
@ -175,3 +179,88 @@ def get_socket_conn_refused_errs():
|
||||||
if not IPV6_ENABLED:
|
if not IPV6_ENABLED:
|
||||||
errors.append(errno.EAFNOSUPPORT)
|
errors.append(errno.EAFNOSUPPORT)
|
||||||
return errors
|
return errors
|
||||||
|
|
||||||
|
|
||||||
|
_NOT_SET = object()
|
||||||
|
|
||||||
|
@contextlib.contextmanager
|
||||||
|
def transient_internet(resource_name, *, timeout=_NOT_SET, errnos=()):
|
||||||
|
"""Return a context manager that raises ResourceDenied when various issues
|
||||||
|
with the Internet connection manifest themselves as exceptions."""
|
||||||
|
import nntplib
|
||||||
|
import urllib.error
|
||||||
|
if timeout is _NOT_SET:
|
||||||
|
timeout = support.INTERNET_TIMEOUT
|
||||||
|
|
||||||
|
default_errnos = [
|
||||||
|
('ECONNREFUSED', 111),
|
||||||
|
('ECONNRESET', 104),
|
||||||
|
('EHOSTUNREACH', 113),
|
||||||
|
('ENETUNREACH', 101),
|
||||||
|
('ETIMEDOUT', 110),
|
||||||
|
# socket.create_connection() fails randomly with
|
||||||
|
# EADDRNOTAVAIL on Travis CI.
|
||||||
|
('EADDRNOTAVAIL', 99),
|
||||||
|
]
|
||||||
|
default_gai_errnos = [
|
||||||
|
('EAI_AGAIN', -3),
|
||||||
|
('EAI_FAIL', -4),
|
||||||
|
('EAI_NONAME', -2),
|
||||||
|
('EAI_NODATA', -5),
|
||||||
|
# Encountered when trying to resolve IPv6-only hostnames
|
||||||
|
('WSANO_DATA', 11004),
|
||||||
|
]
|
||||||
|
|
||||||
|
denied = support.ResourceDenied("Resource %r is not available" % resource_name)
|
||||||
|
captured_errnos = errnos
|
||||||
|
gai_errnos = []
|
||||||
|
if not captured_errnos:
|
||||||
|
captured_errnos = [getattr(errno, name, num)
|
||||||
|
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
|
||||||
|
("TimeoutError" in err.reason) or
|
||||||
|
("EOFError" in err.reason))) or
|
||||||
|
n in captured_errnos):
|
||||||
|
if not support.verbose:
|
||||||
|
sys.stderr.write(denied.args[0] + "\n")
|
||||||
|
raise denied from err
|
||||||
|
|
||||||
|
old_timeout = socket.getdefaulttimeout()
|
||||||
|
try:
|
||||||
|
if timeout is not None:
|
||||||
|
socket.setdefaulttimeout(timeout)
|
||||||
|
yield
|
||||||
|
except nntplib.NNTPTemporaryError as err:
|
||||||
|
if support.verbose:
|
||||||
|
sys.stderr.write(denied.args[0] + "\n")
|
||||||
|
raise denied from err
|
||||||
|
except OSError as err:
|
||||||
|
# urllib can wrap original socket errors multiple times (!), we must
|
||||||
|
# unwrap to get at the original error.
|
||||||
|
while True:
|
||||||
|
a = err.args
|
||||||
|
if len(a) >= 1 and isinstance(a[0], OSError):
|
||||||
|
err = a[0]
|
||||||
|
# The error can also be wrapped as args[1]:
|
||||||
|
# except socket.error as msg:
|
||||||
|
# raise OSError('socket error', msg).with_traceback(sys.exc_info()[2])
|
||||||
|
elif len(a) >= 2 and isinstance(a[1], OSError):
|
||||||
|
err = a[1]
|
||||||
|
else:
|
||||||
|
break
|
||||||
|
filter_error(err)
|
||||||
|
raise
|
||||||
|
# XXX should we catch generic exceptions and look for their
|
||||||
|
# __cause__ or __context__?
|
||||||
|
finally:
|
||||||
|
socket.setdefaulttimeout(old_timeout)
|
||||||
|
|
|
@ -1629,7 +1629,7 @@ class HTTPSTest(TestCase):
|
||||||
# Default settings: requires a valid cert from a trusted CA
|
# Default settings: requires a valid cert from a trusted CA
|
||||||
import ssl
|
import ssl
|
||||||
support.requires('network')
|
support.requires('network')
|
||||||
with support.transient_internet('self-signed.pythontest.net'):
|
with socket_helper.transient_internet('self-signed.pythontest.net'):
|
||||||
h = client.HTTPSConnection('self-signed.pythontest.net', 443)
|
h = client.HTTPSConnection('self-signed.pythontest.net', 443)
|
||||||
with self.assertRaises(ssl.SSLError) as exc_info:
|
with self.assertRaises(ssl.SSLError) as exc_info:
|
||||||
h.request('GET', '/')
|
h.request('GET', '/')
|
||||||
|
@ -1639,7 +1639,7 @@ class HTTPSTest(TestCase):
|
||||||
# Switch off cert verification
|
# Switch off cert verification
|
||||||
import ssl
|
import ssl
|
||||||
support.requires('network')
|
support.requires('network')
|
||||||
with support.transient_internet('self-signed.pythontest.net'):
|
with socket_helper.transient_internet('self-signed.pythontest.net'):
|
||||||
context = ssl._create_unverified_context()
|
context = ssl._create_unverified_context()
|
||||||
h = client.HTTPSConnection('self-signed.pythontest.net', 443,
|
h = client.HTTPSConnection('self-signed.pythontest.net', 443,
|
||||||
context=context)
|
context=context)
|
||||||
|
@ -1653,7 +1653,7 @@ class HTTPSTest(TestCase):
|
||||||
def test_networked_trusted_by_default_cert(self):
|
def test_networked_trusted_by_default_cert(self):
|
||||||
# Default settings: requires a valid cert from a trusted CA
|
# Default settings: requires a valid cert from a trusted CA
|
||||||
support.requires('network')
|
support.requires('network')
|
||||||
with support.transient_internet('www.python.org'):
|
with socket_helper.transient_internet('www.python.org'):
|
||||||
h = client.HTTPSConnection('www.python.org', 443)
|
h = client.HTTPSConnection('www.python.org', 443)
|
||||||
h.request('GET', '/')
|
h.request('GET', '/')
|
||||||
resp = h.getresponse()
|
resp = h.getresponse()
|
||||||
|
@ -1667,7 +1667,7 @@ class HTTPSTest(TestCase):
|
||||||
import ssl
|
import ssl
|
||||||
support.requires('network')
|
support.requires('network')
|
||||||
selfsigned_pythontestdotnet = 'self-signed.pythontest.net'
|
selfsigned_pythontestdotnet = 'self-signed.pythontest.net'
|
||||||
with support.transient_internet(selfsigned_pythontestdotnet):
|
with socket_helper.transient_internet(selfsigned_pythontestdotnet):
|
||||||
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
|
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
|
||||||
self.assertEqual(context.verify_mode, ssl.CERT_REQUIRED)
|
self.assertEqual(context.verify_mode, ssl.CERT_REQUIRED)
|
||||||
self.assertEqual(context.check_hostname, True)
|
self.assertEqual(context.check_hostname, True)
|
||||||
|
@ -1699,7 +1699,7 @@ class HTTPSTest(TestCase):
|
||||||
# We feed a "CA" cert that is unrelated to the server's cert
|
# We feed a "CA" cert that is unrelated to the server's cert
|
||||||
import ssl
|
import ssl
|
||||||
support.requires('network')
|
support.requires('network')
|
||||||
with support.transient_internet('self-signed.pythontest.net'):
|
with socket_helper.transient_internet('self-signed.pythontest.net'):
|
||||||
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
|
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
|
||||||
context.load_verify_locations(CERT_localhost)
|
context.load_verify_locations(CERT_localhost)
|
||||||
h = client.HTTPSConnection('self-signed.pythontest.net', 443, context=context)
|
h = client.HTTPSConnection('self-signed.pythontest.net', 443, context=context)
|
||||||
|
|
|
@ -10,7 +10,7 @@ import calendar
|
||||||
import threading
|
import threading
|
||||||
import socket
|
import socket
|
||||||
|
|
||||||
from test.support import (reap_threads, verbose, transient_internet,
|
from test.support import (reap_threads, verbose,
|
||||||
run_with_tz, run_with_locale, cpython_only)
|
run_with_tz, run_with_locale, cpython_only)
|
||||||
from test.support import hashlib_helper
|
from test.support import hashlib_helper
|
||||||
import unittest
|
import unittest
|
||||||
|
@ -968,16 +968,16 @@ class RemoteIMAPTest(unittest.TestCase):
|
||||||
imap_class = imaplib.IMAP4
|
imap_class = imaplib.IMAP4
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
with transient_internet(self.host):
|
with socket_helper.transient_internet(self.host):
|
||||||
self.server = self.imap_class(self.host, self.port)
|
self.server = self.imap_class(self.host, self.port)
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
if self.server is not None:
|
if self.server is not None:
|
||||||
with transient_internet(self.host):
|
with socket_helper.transient_internet(self.host):
|
||||||
self.server.logout()
|
self.server.logout()
|
||||||
|
|
||||||
def test_logincapa(self):
|
def test_logincapa(self):
|
||||||
with transient_internet(self.host):
|
with socket_helper.transient_internet(self.host):
|
||||||
for cap in self.server.capabilities:
|
for cap in self.server.capabilities:
|
||||||
self.assertIsInstance(cap, str)
|
self.assertIsInstance(cap, str)
|
||||||
self.assertIn('LOGINDISABLED', self.server.capabilities)
|
self.assertIn('LOGINDISABLED', self.server.capabilities)
|
||||||
|
@ -986,7 +986,7 @@ class RemoteIMAPTest(unittest.TestCase):
|
||||||
self.assertEqual(rs[0], 'OK')
|
self.assertEqual(rs[0], 'OK')
|
||||||
|
|
||||||
def test_logout(self):
|
def test_logout(self):
|
||||||
with transient_internet(self.host):
|
with socket_helper.transient_internet(self.host):
|
||||||
rs = self.server.logout()
|
rs = self.server.logout()
|
||||||
self.server = None
|
self.server = None
|
||||||
self.assertEqual(rs[0], 'BYE', rs)
|
self.assertEqual(rs[0], 'BYE', rs)
|
||||||
|
@ -999,7 +999,7 @@ class RemoteIMAP_STARTTLSTest(RemoteIMAPTest):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super().setUp()
|
super().setUp()
|
||||||
with transient_internet(self.host):
|
with socket_helper.transient_internet(self.host):
|
||||||
rs = self.server.starttls()
|
rs = self.server.starttls()
|
||||||
self.assertEqual(rs[0], 'OK')
|
self.assertEqual(rs[0], 'OK')
|
||||||
|
|
||||||
|
@ -1039,24 +1039,24 @@ class RemoteIMAP_SSLTest(RemoteIMAPTest):
|
||||||
server.logout()
|
server.logout()
|
||||||
|
|
||||||
def test_logincapa(self):
|
def test_logincapa(self):
|
||||||
with transient_internet(self.host):
|
with socket_helper.transient_internet(self.host):
|
||||||
_server = self.imap_class(self.host, self.port)
|
_server = self.imap_class(self.host, self.port)
|
||||||
self.check_logincapa(_server)
|
self.check_logincapa(_server)
|
||||||
|
|
||||||
def test_logout(self):
|
def test_logout(self):
|
||||||
with transient_internet(self.host):
|
with socket_helper.transient_internet(self.host):
|
||||||
_server = self.imap_class(self.host, self.port)
|
_server = self.imap_class(self.host, self.port)
|
||||||
rs = _server.logout()
|
rs = _server.logout()
|
||||||
self.assertEqual(rs[0], 'BYE', rs)
|
self.assertEqual(rs[0], 'BYE', rs)
|
||||||
|
|
||||||
def test_ssl_context_certfile_exclusive(self):
|
def test_ssl_context_certfile_exclusive(self):
|
||||||
with transient_internet(self.host):
|
with socket_helper.transient_internet(self.host):
|
||||||
self.assertRaises(
|
self.assertRaises(
|
||||||
ValueError, self.imap_class, self.host, self.port,
|
ValueError, self.imap_class, self.host, self.port,
|
||||||
certfile=CERTFILE, ssl_context=self.create_ssl_context())
|
certfile=CERTFILE, ssl_context=self.create_ssl_context())
|
||||||
|
|
||||||
def test_ssl_context_keyfile_exclusive(self):
|
def test_ssl_context_keyfile_exclusive(self):
|
||||||
with transient_internet(self.host):
|
with socket_helper.transient_internet(self.host):
|
||||||
self.assertRaises(
|
self.assertRaises(
|
||||||
ValueError, self.imap_class, self.host, self.port,
|
ValueError, self.imap_class, self.host, self.port,
|
||||||
keyfile=CERTFILE, ssl_context=self.create_ssl_context())
|
keyfile=CERTFILE, ssl_context=self.create_ssl_context())
|
||||||
|
|
|
@ -246,7 +246,7 @@ class NetworkedNNTPTestsMixin:
|
||||||
def wrap_meth(meth):
|
def wrap_meth(meth):
|
||||||
@functools.wraps(meth)
|
@functools.wraps(meth)
|
||||||
def wrapped(self):
|
def wrapped(self):
|
||||||
with support.transient_internet(self.NNTP_HOST):
|
with socket_helper.transient_internet(self.NNTP_HOST):
|
||||||
meth(self)
|
meth(self)
|
||||||
return wrapped
|
return wrapped
|
||||||
for name in dir(cls):
|
for name in dir(cls):
|
||||||
|
@ -315,7 +315,7 @@ class NetworkedNNTPTests(NetworkedNNTPTestsMixin, unittest.TestCase):
|
||||||
@classmethod
|
@classmethod
|
||||||
def setUpClass(cls):
|
def setUpClass(cls):
|
||||||
support.requires("network")
|
support.requires("network")
|
||||||
with support.transient_internet(cls.NNTP_HOST):
|
with socket_helper.transient_internet(cls.NNTP_HOST):
|
||||||
try:
|
try:
|
||||||
cls.server = cls.NNTP_CLASS(cls.NNTP_HOST,
|
cls.server = cls.NNTP_CLASS(cls.NNTP_HOST,
|
||||||
timeout=support.INTERNET_TIMEOUT,
|
timeout=support.INTERNET_TIMEOUT,
|
||||||
|
|
|
@ -349,7 +349,7 @@ class NetworkTestCase(unittest.TestCase):
|
||||||
@classmethod
|
@classmethod
|
||||||
def setUpClass(cls):
|
def setUpClass(cls):
|
||||||
support.requires('network')
|
support.requires('network')
|
||||||
with support.transient_internet(cls.base_url):
|
with socket_helper.transient_internet(cls.base_url):
|
||||||
cls.parser = urllib.robotparser.RobotFileParser(cls.robots_txt)
|
cls.parser = urllib.robotparser.RobotFileParser(cls.robots_txt)
|
||||||
cls.parser.read()
|
cls.parser.read()
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@ executing have not been removed.
|
||||||
import unittest
|
import unittest
|
||||||
import test.support
|
import test.support
|
||||||
from test import support
|
from test import support
|
||||||
|
from test.support import socket_helper
|
||||||
from test.support import (captured_stderr, TESTFN, EnvironmentVarGuard,
|
from test.support import (captured_stderr, TESTFN, EnvironmentVarGuard,
|
||||||
change_cwd)
|
change_cwd)
|
||||||
import builtins
|
import builtins
|
||||||
|
@ -509,7 +510,7 @@ class ImportSideEffectTests(unittest.TestCase):
|
||||||
url = license._Printer__data.split()[1]
|
url = license._Printer__data.split()[1]
|
||||||
req = urllib.request.Request(url, method='HEAD')
|
req = urllib.request.Request(url, method='HEAD')
|
||||||
try:
|
try:
|
||||||
with test.support.transient_internet(url):
|
with socket_helper.transient_internet(url):
|
||||||
with urllib.request.urlopen(req) as data:
|
with urllib.request.urlopen(req) as data:
|
||||||
code = data.getcode()
|
code = data.getcode()
|
||||||
except urllib.error.HTTPError as e:
|
except urllib.error.HTTPError as e:
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import unittest
|
import unittest
|
||||||
from test import support
|
from test import support
|
||||||
|
from test.support import socket_helper
|
||||||
import smtplib
|
import smtplib
|
||||||
import socket
|
import socket
|
||||||
|
|
||||||
|
@ -28,7 +29,7 @@ class SmtpTest(unittest.TestCase):
|
||||||
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
|
context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
|
||||||
context.check_hostname = False
|
context.check_hostname = False
|
||||||
context.verify_mode = ssl.CERT_NONE
|
context.verify_mode = ssl.CERT_NONE
|
||||||
with support.transient_internet(self.testServer):
|
with socket_helper.transient_internet(self.testServer):
|
||||||
server = smtplib.SMTP(self.testServer, self.remotePort)
|
server = smtplib.SMTP(self.testServer, self.remotePort)
|
||||||
try:
|
try:
|
||||||
server.starttls(context=context)
|
server.starttls(context=context)
|
||||||
|
@ -47,14 +48,14 @@ class SmtpSSLTest(unittest.TestCase):
|
||||||
|
|
||||||
def test_connect(self):
|
def test_connect(self):
|
||||||
support.get_attribute(smtplib, 'SMTP_SSL')
|
support.get_attribute(smtplib, 'SMTP_SSL')
|
||||||
with support.transient_internet(self.testServer):
|
with socket_helper.transient_internet(self.testServer):
|
||||||
server = smtplib.SMTP_SSL(self.testServer, self.remotePort)
|
server = smtplib.SMTP_SSL(self.testServer, self.remotePort)
|
||||||
server.ehlo()
|
server.ehlo()
|
||||||
server.quit()
|
server.quit()
|
||||||
|
|
||||||
def test_connect_default_port(self):
|
def test_connect_default_port(self):
|
||||||
support.get_attribute(smtplib, 'SMTP_SSL')
|
support.get_attribute(smtplib, 'SMTP_SSL')
|
||||||
with support.transient_internet(self.testServer):
|
with socket_helper.transient_internet(self.testServer):
|
||||||
server = smtplib.SMTP_SSL(self.testServer)
|
server = smtplib.SMTP_SSL(self.testServer)
|
||||||
server.ehlo()
|
server.ehlo()
|
||||||
server.quit()
|
server.quit()
|
||||||
|
@ -64,20 +65,20 @@ class SmtpSSLTest(unittest.TestCase):
|
||||||
context.check_hostname = False
|
context.check_hostname = False
|
||||||
context.verify_mode = ssl.CERT_NONE
|
context.verify_mode = ssl.CERT_NONE
|
||||||
support.get_attribute(smtplib, 'SMTP_SSL')
|
support.get_attribute(smtplib, 'SMTP_SSL')
|
||||||
with support.transient_internet(self.testServer):
|
with socket_helper.transient_internet(self.testServer):
|
||||||
server = smtplib.SMTP_SSL(self.testServer, self.remotePort, context=context)
|
server = smtplib.SMTP_SSL(self.testServer, self.remotePort, context=context)
|
||||||
server.ehlo()
|
server.ehlo()
|
||||||
server.quit()
|
server.quit()
|
||||||
|
|
||||||
def test_connect_using_sslcontext_verified(self):
|
def test_connect_using_sslcontext_verified(self):
|
||||||
with support.transient_internet(self.testServer):
|
with socket_helper.transient_internet(self.testServer):
|
||||||
can_verify = check_ssl_verifiy(self.testServer, self.remotePort)
|
can_verify = check_ssl_verifiy(self.testServer, self.remotePort)
|
||||||
if not can_verify:
|
if not can_verify:
|
||||||
self.skipTest("SSL certificate can't be verified")
|
self.skipTest("SSL certificate can't be verified")
|
||||||
|
|
||||||
support.get_attribute(smtplib, 'SMTP_SSL')
|
support.get_attribute(smtplib, 'SMTP_SSL')
|
||||||
context = ssl.create_default_context()
|
context = ssl.create_default_context()
|
||||||
with support.transient_internet(self.testServer):
|
with socket_helper.transient_internet(self.testServer):
|
||||||
server = smtplib.SMTP_SSL(self.testServer, self.remotePort, context=context)
|
server = smtplib.SMTP_SSL(self.testServer, self.remotePort, context=context)
|
||||||
server.ehlo()
|
server.ehlo()
|
||||||
server.quit()
|
server.quit()
|
||||||
|
|
|
@ -1533,7 +1533,7 @@ class GeneralModuleTests(unittest.TestCase):
|
||||||
def test_idna(self):
|
def test_idna(self):
|
||||||
# Check for internet access before running test
|
# Check for internet access before running test
|
||||||
# (issue #12804, issue #25138).
|
# (issue #12804, issue #25138).
|
||||||
with support.transient_internet('python.org'):
|
with socket_helper.transient_internet('python.org'):
|
||||||
socket.gethostbyname('python.org')
|
socket.gethostbyname('python.org')
|
||||||
|
|
||||||
# these should all be successful
|
# these should all be successful
|
||||||
|
|
|
@ -2246,7 +2246,7 @@ class NetworkedTests(unittest.TestCase):
|
||||||
def test_timeout_connect_ex(self):
|
def test_timeout_connect_ex(self):
|
||||||
# Issue #12065: on a timeout, connect_ex() should return the original
|
# Issue #12065: on a timeout, connect_ex() should return the original
|
||||||
# errno (mimicking the behaviour of non-SSL sockets).
|
# errno (mimicking the behaviour of non-SSL sockets).
|
||||||
with support.transient_internet(REMOTE_HOST):
|
with socket_helper.transient_internet(REMOTE_HOST):
|
||||||
s = test_wrap_socket(socket.socket(socket.AF_INET),
|
s = test_wrap_socket(socket.socket(socket.AF_INET),
|
||||||
cert_reqs=ssl.CERT_REQUIRED,
|
cert_reqs=ssl.CERT_REQUIRED,
|
||||||
do_handshake_on_connect=False)
|
do_handshake_on_connect=False)
|
||||||
|
@ -2259,7 +2259,7 @@ class NetworkedTests(unittest.TestCase):
|
||||||
|
|
||||||
@unittest.skipUnless(socket_helper.IPV6_ENABLED, 'Needs IPv6')
|
@unittest.skipUnless(socket_helper.IPV6_ENABLED, 'Needs IPv6')
|
||||||
def test_get_server_certificate_ipv6(self):
|
def test_get_server_certificate_ipv6(self):
|
||||||
with support.transient_internet('ipv6.google.com'):
|
with socket_helper.transient_internet('ipv6.google.com'):
|
||||||
_test_get_server_certificate(self, 'ipv6.google.com', 443)
|
_test_get_server_certificate(self, 'ipv6.google.com', 443)
|
||||||
_test_get_server_certificate_fail(self, 'ipv6.google.com', 443)
|
_test_get_server_certificate_fail(self, 'ipv6.google.com', 443)
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@ def resolve_address(host, port):
|
||||||
We must perform name resolution before timeout tests, otherwise it will be
|
We must perform name resolution before timeout tests, otherwise it will be
|
||||||
performed by connect().
|
performed by connect().
|
||||||
"""
|
"""
|
||||||
with support.transient_internet(host):
|
with socket_helper.transient_internet(host):
|
||||||
return socket.getaddrinfo(host, port, socket.AF_INET,
|
return socket.getaddrinfo(host, port, socket.AF_INET,
|
||||||
socket.SOCK_STREAM)[0][4]
|
socket.SOCK_STREAM)[0][4]
|
||||||
|
|
||||||
|
@ -230,12 +230,12 @@ class TCPTimeoutTestCase(TimeoutTestCase):
|
||||||
|
|
||||||
# All that hard work just to test if connect times out in 0.001s ;-)
|
# All that hard work just to test if connect times out in 0.001s ;-)
|
||||||
self.addr_remote = blackhole
|
self.addr_remote = blackhole
|
||||||
with support.transient_internet(self.addr_remote[0]):
|
with socket_helper.transient_internet(self.addr_remote[0]):
|
||||||
self._sock_operation(1, 0.001, 'connect', self.addr_remote)
|
self._sock_operation(1, 0.001, 'connect', self.addr_remote)
|
||||||
|
|
||||||
def testRecvTimeout(self):
|
def testRecvTimeout(self):
|
||||||
# Test recv() timeout
|
# Test recv() timeout
|
||||||
with support.transient_internet(self.addr_remote[0]):
|
with socket_helper.transient_internet(self.addr_remote[0]):
|
||||||
self.sock.connect(self.addr_remote)
|
self.sock.connect(self.addr_remote)
|
||||||
self._sock_operation(1, 1.5, 'recv', 1024)
|
self._sock_operation(1, 1.5, 'recv', 1024)
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import unittest
|
import unittest
|
||||||
from test import support
|
from test import support
|
||||||
|
from test.support import socket_helper
|
||||||
from test import test_urllib
|
from test import test_urllib
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
@ -1776,7 +1777,7 @@ class MiscTests(unittest.TestCase):
|
||||||
@unittest.skipUnless(support.is_resource_enabled('network'),
|
@unittest.skipUnless(support.is_resource_enabled('network'),
|
||||||
'test requires network access')
|
'test requires network access')
|
||||||
def test_issue16464(self):
|
def test_issue16464(self):
|
||||||
with support.transient_internet("http://www.example.com/"):
|
with socket_helper.transient_internet("http://www.example.com/"):
|
||||||
opener = urllib.request.build_opener()
|
opener = urllib.request.build_opener()
|
||||||
request = urllib.request.Request("http://www.example.com/")
|
request = urllib.request.Request("http://www.example.com/")
|
||||||
self.assertEqual(None, request.data)
|
self.assertEqual(None, request.data)
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import unittest
|
import unittest
|
||||||
from test import support
|
from test import support
|
||||||
|
from test.support import socket_helper
|
||||||
from test.test_urllib2 import sanepathname2url
|
from test.test_urllib2 import sanepathname2url
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
@ -86,7 +87,7 @@ class CloseSocketTest(unittest.TestCase):
|
||||||
# calling .close() on urllib2's response objects should close the
|
# calling .close() on urllib2's response objects should close the
|
||||||
# underlying socket
|
# underlying socket
|
||||||
url = support.TEST_HTTP_URL
|
url = support.TEST_HTTP_URL
|
||||||
with support.transient_internet(url):
|
with socket_helper.transient_internet(url):
|
||||||
response = _urlopen_with_retry(url)
|
response = _urlopen_with_retry(url)
|
||||||
sock = response.fp
|
sock = response.fp
|
||||||
self.assertFalse(sock.closed)
|
self.assertFalse(sock.closed)
|
||||||
|
@ -159,7 +160,7 @@ class OtherNetworkTests(unittest.TestCase):
|
||||||
|
|
||||||
def test_urlwithfrag(self):
|
def test_urlwithfrag(self):
|
||||||
urlwith_frag = "http://www.pythontest.net/index.html#frag"
|
urlwith_frag = "http://www.pythontest.net/index.html#frag"
|
||||||
with support.transient_internet(urlwith_frag):
|
with socket_helper.transient_internet(urlwith_frag):
|
||||||
req = urllib.request.Request(urlwith_frag)
|
req = urllib.request.Request(urlwith_frag)
|
||||||
res = urllib.request.urlopen(req)
|
res = urllib.request.urlopen(req)
|
||||||
self.assertEqual(res.geturl(),
|
self.assertEqual(res.geturl(),
|
||||||
|
@ -167,7 +168,7 @@ class OtherNetworkTests(unittest.TestCase):
|
||||||
|
|
||||||
def test_redirect_url_withfrag(self):
|
def test_redirect_url_withfrag(self):
|
||||||
redirect_url_with_frag = "http://www.pythontest.net/redir/with_frag/"
|
redirect_url_with_frag = "http://www.pythontest.net/redir/with_frag/"
|
||||||
with support.transient_internet(redirect_url_with_frag):
|
with socket_helper.transient_internet(redirect_url_with_frag):
|
||||||
req = urllib.request.Request(redirect_url_with_frag)
|
req = urllib.request.Request(redirect_url_with_frag)
|
||||||
res = urllib.request.urlopen(req)
|
res = urllib.request.urlopen(req)
|
||||||
self.assertEqual(res.geturl(),
|
self.assertEqual(res.geturl(),
|
||||||
|
@ -175,7 +176,7 @@ class OtherNetworkTests(unittest.TestCase):
|
||||||
|
|
||||||
def test_custom_headers(self):
|
def test_custom_headers(self):
|
||||||
url = support.TEST_HTTP_URL
|
url = support.TEST_HTTP_URL
|
||||||
with support.transient_internet(url):
|
with socket_helper.transient_internet(url):
|
||||||
opener = urllib.request.build_opener()
|
opener = urllib.request.build_opener()
|
||||||
request = urllib.request.Request(url)
|
request = urllib.request.Request(url)
|
||||||
self.assertFalse(request.header_items())
|
self.assertFalse(request.header_items())
|
||||||
|
@ -193,7 +194,7 @@ class OtherNetworkTests(unittest.TestCase):
|
||||||
|
|
||||||
URL = 'http://www.imdb.com' # mangles Connection:close
|
URL = 'http://www.imdb.com' # mangles Connection:close
|
||||||
|
|
||||||
with support.transient_internet(URL):
|
with socket_helper.transient_internet(URL):
|
||||||
try:
|
try:
|
||||||
with urllib.request.urlopen(URL) as res:
|
with urllib.request.urlopen(URL) as res:
|
||||||
pass
|
pass
|
||||||
|
@ -223,7 +224,7 @@ class OtherNetworkTests(unittest.TestCase):
|
||||||
else:
|
else:
|
||||||
req = expected_err = None
|
req = expected_err = None
|
||||||
|
|
||||||
with support.transient_internet(url):
|
with socket_helper.transient_internet(url):
|
||||||
try:
|
try:
|
||||||
f = urlopen(url, req, support.INTERNET_TIMEOUT)
|
f = urlopen(url, req, support.INTERNET_TIMEOUT)
|
||||||
# urllib.error.URLError is a subclass of OSError
|
# urllib.error.URLError is a subclass of OSError
|
||||||
|
@ -265,7 +266,7 @@ class TimeoutTest(unittest.TestCase):
|
||||||
def test_http_basic(self):
|
def test_http_basic(self):
|
||||||
self.assertIsNone(socket.getdefaulttimeout())
|
self.assertIsNone(socket.getdefaulttimeout())
|
||||||
url = support.TEST_HTTP_URL
|
url = support.TEST_HTTP_URL
|
||||||
with support.transient_internet(url, timeout=None):
|
with socket_helper.transient_internet(url, timeout=None):
|
||||||
u = _urlopen_with_retry(url)
|
u = _urlopen_with_retry(url)
|
||||||
self.addCleanup(u.close)
|
self.addCleanup(u.close)
|
||||||
self.assertIsNone(u.fp.raw._sock.gettimeout())
|
self.assertIsNone(u.fp.raw._sock.gettimeout())
|
||||||
|
@ -273,7 +274,7 @@ class TimeoutTest(unittest.TestCase):
|
||||||
def test_http_default_timeout(self):
|
def test_http_default_timeout(self):
|
||||||
self.assertIsNone(socket.getdefaulttimeout())
|
self.assertIsNone(socket.getdefaulttimeout())
|
||||||
url = support.TEST_HTTP_URL
|
url = support.TEST_HTTP_URL
|
||||||
with support.transient_internet(url):
|
with socket_helper.transient_internet(url):
|
||||||
socket.setdefaulttimeout(60)
|
socket.setdefaulttimeout(60)
|
||||||
try:
|
try:
|
||||||
u = _urlopen_with_retry(url)
|
u = _urlopen_with_retry(url)
|
||||||
|
@ -285,7 +286,7 @@ class TimeoutTest(unittest.TestCase):
|
||||||
def test_http_no_timeout(self):
|
def test_http_no_timeout(self):
|
||||||
self.assertIsNone(socket.getdefaulttimeout())
|
self.assertIsNone(socket.getdefaulttimeout())
|
||||||
url = support.TEST_HTTP_URL
|
url = support.TEST_HTTP_URL
|
||||||
with support.transient_internet(url):
|
with socket_helper.transient_internet(url):
|
||||||
socket.setdefaulttimeout(60)
|
socket.setdefaulttimeout(60)
|
||||||
try:
|
try:
|
||||||
u = _urlopen_with_retry(url, timeout=None)
|
u = _urlopen_with_retry(url, timeout=None)
|
||||||
|
@ -296,7 +297,7 @@ class TimeoutTest(unittest.TestCase):
|
||||||
|
|
||||||
def test_http_timeout(self):
|
def test_http_timeout(self):
|
||||||
url = support.TEST_HTTP_URL
|
url = support.TEST_HTTP_URL
|
||||||
with support.transient_internet(url):
|
with socket_helper.transient_internet(url):
|
||||||
u = _urlopen_with_retry(url, timeout=120)
|
u = _urlopen_with_retry(url, timeout=120)
|
||||||
self.addCleanup(u.close)
|
self.addCleanup(u.close)
|
||||||
self.assertEqual(u.fp.raw._sock.gettimeout(), 120)
|
self.assertEqual(u.fp.raw._sock.gettimeout(), 120)
|
||||||
|
@ -306,7 +307,7 @@ class TimeoutTest(unittest.TestCase):
|
||||||
@skip_ftp_test_on_travis
|
@skip_ftp_test_on_travis
|
||||||
def test_ftp_basic(self):
|
def test_ftp_basic(self):
|
||||||
self.assertIsNone(socket.getdefaulttimeout())
|
self.assertIsNone(socket.getdefaulttimeout())
|
||||||
with support.transient_internet(self.FTP_HOST, timeout=None):
|
with socket_helper.transient_internet(self.FTP_HOST, timeout=None):
|
||||||
u = _urlopen_with_retry(self.FTP_HOST)
|
u = _urlopen_with_retry(self.FTP_HOST)
|
||||||
self.addCleanup(u.close)
|
self.addCleanup(u.close)
|
||||||
self.assertIsNone(u.fp.fp.raw._sock.gettimeout())
|
self.assertIsNone(u.fp.fp.raw._sock.gettimeout())
|
||||||
|
@ -314,7 +315,7 @@ class TimeoutTest(unittest.TestCase):
|
||||||
@skip_ftp_test_on_travis
|
@skip_ftp_test_on_travis
|
||||||
def test_ftp_default_timeout(self):
|
def test_ftp_default_timeout(self):
|
||||||
self.assertIsNone(socket.getdefaulttimeout())
|
self.assertIsNone(socket.getdefaulttimeout())
|
||||||
with support.transient_internet(self.FTP_HOST):
|
with socket_helper.transient_internet(self.FTP_HOST):
|
||||||
socket.setdefaulttimeout(60)
|
socket.setdefaulttimeout(60)
|
||||||
try:
|
try:
|
||||||
u = _urlopen_with_retry(self.FTP_HOST)
|
u = _urlopen_with_retry(self.FTP_HOST)
|
||||||
|
@ -326,7 +327,7 @@ class TimeoutTest(unittest.TestCase):
|
||||||
@skip_ftp_test_on_travis
|
@skip_ftp_test_on_travis
|
||||||
def test_ftp_no_timeout(self):
|
def test_ftp_no_timeout(self):
|
||||||
self.assertIsNone(socket.getdefaulttimeout())
|
self.assertIsNone(socket.getdefaulttimeout())
|
||||||
with support.transient_internet(self.FTP_HOST):
|
with socket_helper.transient_internet(self.FTP_HOST):
|
||||||
socket.setdefaulttimeout(60)
|
socket.setdefaulttimeout(60)
|
||||||
try:
|
try:
|
||||||
u = _urlopen_with_retry(self.FTP_HOST, timeout=None)
|
u = _urlopen_with_retry(self.FTP_HOST, timeout=None)
|
||||||
|
@ -337,7 +338,7 @@ class TimeoutTest(unittest.TestCase):
|
||||||
|
|
||||||
@skip_ftp_test_on_travis
|
@skip_ftp_test_on_travis
|
||||||
def test_ftp_timeout(self):
|
def test_ftp_timeout(self):
|
||||||
with support.transient_internet(self.FTP_HOST):
|
with socket_helper.transient_internet(self.FTP_HOST):
|
||||||
u = _urlopen_with_retry(self.FTP_HOST, timeout=60)
|
u = _urlopen_with_retry(self.FTP_HOST, timeout=60)
|
||||||
self.addCleanup(u.close)
|
self.addCleanup(u.close)
|
||||||
self.assertEqual(u.fp.fp.raw._sock.gettimeout(), 60)
|
self.assertEqual(u.fp.fp.raw._sock.gettimeout(), 60)
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import unittest
|
import unittest
|
||||||
from test import support
|
from test import support
|
||||||
|
from test.support import socket_helper
|
||||||
|
|
||||||
import contextlib
|
import contextlib
|
||||||
import socket
|
import socket
|
||||||
|
@ -27,7 +28,7 @@ class URLTimeoutTest(unittest.TestCase):
|
||||||
self.addCleanup(urllib.request.urlcleanup)
|
self.addCleanup(urllib.request.urlcleanup)
|
||||||
|
|
||||||
domain = urllib.parse.urlparse(support.TEST_HTTP_URL).netloc
|
domain = urllib.parse.urlparse(support.TEST_HTTP_URL).netloc
|
||||||
with support.transient_internet(domain):
|
with socket_helper.transient_internet(domain):
|
||||||
f = urllib.request.urlopen(support.TEST_HTTP_URL)
|
f = urllib.request.urlopen(support.TEST_HTTP_URL)
|
||||||
f.read()
|
f.read()
|
||||||
|
|
||||||
|
@ -56,7 +57,7 @@ class urlopenNetworkTests(unittest.TestCase):
|
||||||
@contextlib.contextmanager
|
@contextlib.contextmanager
|
||||||
def urlopen(self, *args, **kwargs):
|
def urlopen(self, *args, **kwargs):
|
||||||
resource = args[0]
|
resource = args[0]
|
||||||
with support.transient_internet(resource):
|
with socket_helper.transient_internet(resource):
|
||||||
r = urllib.request.urlopen(*args, **kwargs)
|
r = urllib.request.urlopen(*args, **kwargs)
|
||||||
try:
|
try:
|
||||||
yield r
|
yield r
|
||||||
|
@ -98,7 +99,7 @@ class urlopenNetworkTests(unittest.TestCase):
|
||||||
def test_getcode(self):
|
def test_getcode(self):
|
||||||
# test getcode() with the fancy opener to get 404 error codes
|
# test getcode() with the fancy opener to get 404 error codes
|
||||||
URL = self.url + "XXXinvalidXXX"
|
URL = self.url + "XXXinvalidXXX"
|
||||||
with support.transient_internet(URL):
|
with socket_helper.transient_internet(URL):
|
||||||
with self.assertWarns(DeprecationWarning):
|
with self.assertWarns(DeprecationWarning):
|
||||||
open_url = urllib.request.FancyURLopener().open(URL)
|
open_url = urllib.request.FancyURLopener().open(URL)
|
||||||
try:
|
try:
|
||||||
|
@ -156,7 +157,7 @@ class urlretrieveNetworkTests(unittest.TestCase):
|
||||||
@contextlib.contextmanager
|
@contextlib.contextmanager
|
||||||
def urlretrieve(self, *args, **kwargs):
|
def urlretrieve(self, *args, **kwargs):
|
||||||
resource = args[0]
|
resource = args[0]
|
||||||
with support.transient_internet(resource):
|
with socket_helper.transient_internet(resource):
|
||||||
file_location, info = urllib.request.urlretrieve(*args, **kwargs)
|
file_location, info = urllib.request.urlretrieve(*args, **kwargs)
|
||||||
try:
|
try:
|
||||||
yield file_location, info
|
yield file_location, info
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue