mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
bpo-36629: Add support.get_socket_conn_refused_errs() (GH-12834)
Fix test_imap4_host_default_value() of test_imaplib: catch also errno.ENETUNREACH error.
This commit is contained in:
parent
f1464f4d2e
commit
3c7931e514
4 changed files with 21 additions and 16 deletions
|
@ -1477,6 +1477,22 @@ socket_peer_reset = TransientResource(OSError, errno=errno.ECONNRESET)
|
||||||
ioerror_peer_reset = TransientResource(OSError, errno=errno.ECONNRESET)
|
ioerror_peer_reset = TransientResource(OSError, errno=errno.ECONNRESET)
|
||||||
|
|
||||||
|
|
||||||
|
def get_socket_conn_refused_errs():
|
||||||
|
"""
|
||||||
|
Get the different socket error numbers ('errno') which can be received
|
||||||
|
when a connection is refused.
|
||||||
|
"""
|
||||||
|
errors = [errno.ECONNREFUSED]
|
||||||
|
if hasattr(errno, 'ENETUNREACH'):
|
||||||
|
# On Solaris, ENETUNREACH is returned sometimes instead of ECONNREFUSED
|
||||||
|
errors.append(errno.ENETUNREACH)
|
||||||
|
if hasattr(errno, 'EADDRNOTAVAIL'):
|
||||||
|
# bpo-31910: socket.create_connection() fails randomly
|
||||||
|
# with EADDRNOTAVAIL on Travis CI
|
||||||
|
errors.append(errno.EADDRNOTAVAIL)
|
||||||
|
return errors
|
||||||
|
|
||||||
|
|
||||||
@contextlib.contextmanager
|
@contextlib.contextmanager
|
||||||
def transient_internet(resource_name, *, timeout=30.0, errnos=()):
|
def transient_internet(resource_name, *, timeout=30.0, errnos=()):
|
||||||
"""Return a context manager that raises ResourceDenied when various issues
|
"""Return a context manager that raises ResourceDenied when various issues
|
||||||
|
|
|
@ -81,14 +81,8 @@ class TestImaplib(unittest.TestCase):
|
||||||
except socket.error:
|
except socket.error:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
expected_errnos = [
|
|
||||||
# This is the exception that should be raised.
|
# This is the exception that should be raised.
|
||||||
errno.ECONNREFUSED,
|
expected_errnos = support.get_socket_conn_refused_errs()
|
||||||
]
|
|
||||||
if hasattr(errno, 'EADDRNOTAVAIL'):
|
|
||||||
# socket.create_connection() fails randomly with
|
|
||||||
# EADDRNOTAVAIL on Travis CI.
|
|
||||||
expected_errnos.append(errno.EADDRNOTAVAIL)
|
|
||||||
with self.assertRaises(OSError) as cm:
|
with self.assertRaises(OSError) as cm:
|
||||||
imaplib.IMAP4()
|
imaplib.IMAP4()
|
||||||
self.assertIn(cm.exception.errno, expected_errnos)
|
self.assertIn(cm.exception.errno, expected_errnos)
|
||||||
|
|
|
@ -4804,14 +4804,7 @@ class NetworkConnectionNoServer(unittest.TestCase):
|
||||||
# On Solaris, ENETUNREACH is returned in this circumstance instead
|
# On Solaris, ENETUNREACH is returned in this circumstance instead
|
||||||
# of ECONNREFUSED. So, if that errno exists, add it to our list of
|
# of ECONNREFUSED. So, if that errno exists, add it to our list of
|
||||||
# expected errnos.
|
# expected errnos.
|
||||||
expected_errnos = [ errno.ECONNREFUSED, ]
|
expected_errnos = support.get_socket_conn_refused_errs()
|
||||||
if hasattr(errno, 'ENETUNREACH'):
|
|
||||||
expected_errnos.append(errno.ENETUNREACH)
|
|
||||||
if hasattr(errno, 'EADDRNOTAVAIL'):
|
|
||||||
# bpo-31910: socket.create_connection() fails randomly
|
|
||||||
# with EADDRNOTAVAIL on Travis CI
|
|
||||||
expected_errnos.append(errno.EADDRNOTAVAIL)
|
|
||||||
|
|
||||||
self.assertIn(cm.exception.errno, expected_errnos)
|
self.assertIn(cm.exception.errno, expected_errnos)
|
||||||
|
|
||||||
def test_create_connection_timeout(self):
|
def test_create_connection_timeout(self):
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Fix ``test_imap4_host_default_value()`` of ``test_imaplib``: catch also
|
||||||
|
:data:`errno.ENETUNREACH` error.
|
Loading…
Add table
Add a link
Reference in a new issue