[Python-checkins] bpo-37199: Fix test failures when IPv6 is unavailable or disabled (#14480)

Andrew Svetlov webhook-mailer at python.org
Sun Jun 30 11:24:51 EDT 2019


https://github.com/python/cpython/commit/c2cda638d63b98f5cf9a8ef13e15aace2b7e3f0b
commit: c2cda638d63b98f5cf9a8ef13e15aace2b7e3f0b
branch: master
author: Zackery Spytz <zspytz at gmail.com>
committer: Andrew Svetlov <andrew.svetlov at gmail.com>
date: 2019年06月30日T18:24:43+03:00
summary:
bpo-37199: Fix test failures when IPv6 is unavailable or disabled (#14480)
files:
A Misc/NEWS.d/next/Tests/2019-06-29-23-56-28.bpo-37199.FHDsLf.rst
M Lib/test/support/__init__.py
M Lib/test/test_asyncio/test_base_events.py
M Lib/test/test_socket.py
M Lib/test/test_ssl.py
diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py
index 19ea9764e96c..a65de4a5abe8 100644
--- a/Lib/test/support/__init__.py
+++ b/Lib/test/support/__init__.py
@@ -1493,6 +1493,8 @@ def get_socket_conn_refused_errs():
 # bpo-31910: socket.create_connection() fails randomly
 # with EADDRNOTAVAIL on Travis CI
 errors.append(errno.EADDRNOTAVAIL)
+ if not IPV6_ENABLED:
+ errors.append(errno.EAFNOSUPPORT)
 return errors
 
 
diff --git a/Lib/test/test_asyncio/test_base_events.py b/Lib/test/test_asyncio/test_base_events.py
index 811b37425dd2..08d4792fa726 100644
--- a/Lib/test/test_asyncio/test_base_events.py
+++ b/Lib/test/test_asyncio/test_base_events.py
@@ -91,6 +91,9 @@ def test_ipaddr_info(self):
 self.assertIsNone(
 base_events._ipaddr_info('1.2.3.4', 1, UNSPEC, 0, 0))
 
+ if not support.IPV6_ENABLED:
+ return
+
 # IPv4 address with family IPv6.
 self.assertIsNone(
 base_events._ipaddr_info('1.2.3.4', 1, INET6, STREAM, TCP))
@@ -1149,7 +1152,7 @@ def test_create_server_stream_bittype(self):
 srv.close()
 self.loop.run_until_complete(srv.wait_closed())
 
- @unittest.skipUnless(hasattr(socket, 'AF_INET6'), 'no IPv6 support')
+ @unittest.skipUnless(support.IPV6_ENABLED, 'no IPv6 support')
 def test_create_server_ipv6(self):
 async def main():
 with self.assertWarns(DeprecationWarning):
@@ -1281,6 +1284,9 @@ def _test_create_connection_ip_addr(self, m_socket, allow_inet_pton):
 t.close()
 test_utils.run_briefly(self.loop) # allow transport to close
 
+ if not support.IPV6_ENABLED:
+ return
+
 sock.family = socket.AF_INET6
 coro = self.loop.create_connection(asyncio.Protocol, '::1', 80)
 t, p = self.loop.run_until_complete(coro)
@@ -1298,6 +1304,7 @@ def _test_create_connection_ip_addr(self, m_socket, allow_inet_pton):
 t.close()
 test_utils.run_briefly(self.loop) # allow transport to close
 
+ @unittest.skipUnless(support.IPV6_ENABLED, 'no IPv6 support')
 @unittest.skipIf(sys.platform.startswith('aix'),
 "bpo-25545: IPv6 scope id and getaddrinfo() behave differently on AIX")
 @patch_socket
diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
index 50094de58bf1..e92f871880a9 100644
--- a/Lib/test/test_socket.py
+++ b/Lib/test/test_socket.py
@@ -4964,8 +4964,15 @@ def test_create_connection_timeout(self):
 # Issue #9792: create_connection() should not recast timeout errors
 # as generic socket errors.
 with self.mocked_socket_module():
- with self.assertRaises(socket.timeout):
+ try:
 socket.create_connection((HOST, 1234))
+ except socket.timeout:
+ pass
+ except OSError as exc:
+ if support.IPV6_ENABLED or exc.errno != errno.EAFNOSUPPORT:
+ raise
+ else:
+ self.fail('socket.timeout not raised')
 
 
 class NetworkConnectionAttributesTest(SocketTCPTest, ThreadableTest):
diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py
index c72a85710d5c..064f0e8d4de6 100644
--- a/Lib/test/test_ssl.py
+++ b/Lib/test/test_ssl.py
@@ -676,7 +676,7 @@ def fail(cert, hostname):
 fail(cert, 'example.net')
 
 # -- IPv6 matching --
- if hasattr(socket, 'AF_INET6'):
+ if support.IPV6_ENABLED:
 cert = {'subject': ((('commonName', 'example.com'),),),
 'subjectAltName': (
 ('DNS', 'example.com'),
@@ -757,7 +757,7 @@ def fail(cert, hostname):
 ssl._inet_paton(invalid)
 for ipaddr in ['127.0.0.1', '192.168.0.1']:
 self.assertTrue(ssl._inet_paton(ipaddr))
- if hasattr(socket, 'AF_INET6'):
+ if support.IPV6_ENABLED:
 for ipaddr in ['::1', '2001:db8:85a3::8a2e:370:7334']:
 self.assertTrue(ssl._inet_paton(ipaddr))
 
diff --git a/Misc/NEWS.d/next/Tests/2019-06-29-23-56-28.bpo-37199.FHDsLf.rst b/Misc/NEWS.d/next/Tests/2019-06-29-23-56-28.bpo-37199.FHDsLf.rst
new file mode 100644
index 000000000000..b05209159cc8
--- /dev/null
+++ b/Misc/NEWS.d/next/Tests/2019-06-29-23-56-28.bpo-37199.FHDsLf.rst
@@ -0,0 +1 @@
+Fix test failures when IPv6 is unavailable or disabled.


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /