]> granicus.if.org Git - python/commitdiff
Issue #11811: Factor out detection of IPv6 support on the current host
authorAntoine Pitrou <solipsis@pitrou.net>
Thu, 28 Apr 2011 17:18:10 +0000 (19:18 +0200)
committerAntoine Pitrou <solipsis@pitrou.net>
Thu, 28 Apr 2011 17:18:10 +0000 (19:18 +0200)
and make it available as `test.support.IPV6_ENABLED`.  Patch by
Charles-François Natali.

Lib/test/support.py
Lib/test/test_ftplib.py
Lib/test/test_socket.py
Misc/NEWS

index fbf6de49ec113311799152ea25d9a9318b523955..800f0e564e0a2f2e7d11cb010b741f7111654f59 100644 (file)
@@ -33,16 +33,15 @@ __all__ = [
     "verbose", "use_resources", "max_memuse", "record_original_stdout",
     "get_original_stdout", "unload", "unlink", "rmtree", "forget",
     "is_resource_enabled", "requires", "find_unused_port", "bind_port",
-    "is_jython", "TESTFN", "HOST", "SAVEDCWD", "temp_cwd",
+    "IPV6_ENABLED", "is_jython", "TESTFN", "HOST", "SAVEDCWD", "temp_cwd",
     "findfile", "sortdict", "check_syntax_error", "open_urlresource",
     "check_warnings", "CleanImport", "EnvironmentVarGuard",
-    "TransientResource", "captured_output", "captured_stdout",
-    "time_out", "socket_peer_reset", "ioerror_peer_reset",
-    "run_with_locale", 'temp_umask', "transient_internet",
-    "set_memlimit", "bigmemtest", "bigaddrspacetest", "BasicTestRunner",
-    "run_unittest", "run_doctest", "threading_setup", "threading_cleanup",
-    "reap_children", "cpython_only", "check_impl_detail", "get_attribute",
-    "swap_item", "swap_attr", "requires_IEEE_754",
+    "TransientResource", "captured_output", "captured_stdout", "time_out",
+    "socket_peer_reset", "ioerror_peer_reset", "run_with_locale", 'temp_umask',
+    "transient_internet", "set_memlimit", "bigmemtest", "bigaddrspacetest",
+    "BasicTestRunner", "run_unittest", "run_doctest", "threading_setup",
+    "threading_cleanup", "reap_children", "cpython_only", "check_impl_detail",
+    "get_attribute", "swap_item", "swap_attr", "requires_IEEE_754",
     "TestHandler", "Matcher", "can_symlink", "skip_unless_symlink"]
 
 
@@ -381,6 +380,21 @@ def bind_port(sock, host=HOST):
     port = sock.getsockname()[1]
     return port
 
+def _is_ipv6_enabled():
+    """Check whether IPv6 is enabled on this host."""
+    if socket.has_ipv6:
+        try:
+            sock = socket.socket(socket.AF_INET6, socket.SOCK_STREAM)
+            sock.bind(('::1', 0))
+        except (socket.error, socket.gaierror):
+            pass
+        else:
+            sock.close()
+            return True
+    return False
+
+IPV6_ENABLED = _is_ipv6_enabled()
+
 # decorator for skipping tests on non-IEEE 754 platforms
 requires_IEEE_754 = unittest.skipUnless(
     float.__getformat__("double").startswith("IEEE"),
index 9edb19706b6b57943d921539cca9a7f32b97d726..cfdfa2c131ea5b25012d6a0eee21996aba10ec0e 100644 (file)
@@ -873,7 +873,7 @@ class TestTimeouts(TestCase):
 
 def test_main():
     tests = [TestFTPClass, TestTimeouts]
-    if socket.has_ipv6:
+    if support.IPV6_ENABLED:
         try:
             DummyFTPServer((HOST, 0), af=socket.AF_INET6)
         except socket.error:
index 6ee94b51eed20ec10977319d90ea16b21581c378..99d658b7cbc6febe7a4c1446e2d6cd90a0a3ddc5 100644 (file)
@@ -24,18 +24,6 @@ try:
 except ImportError:
     fcntl = False
 
-def try_address(host, port=0, family=socket.AF_INET):
-    """Try to bind a socket on the given host:port and return True
-    if that has been possible."""
-    try:
-        sock = socket.socket(family, socket.SOCK_STREAM)
-        sock.bind((host, port))
-    except (socket.error, socket.gaierror):
-        return False
-    else:
-        sock.close()
-        return True
-
 def linux_version():
     try:
         # platform.release() is something like '2.6.33.7-desktop-2mnb'
@@ -46,7 +34,6 @@ def linux_version():
 
 HOST = support.HOST
 MSG = 'Michael Gilfix was here\u1234\r\n'.encode('utf-8') ## test unicode string and carriage return
-SUPPORTS_IPV6 = socket.has_ipv6 and try_address('::1', family=socket.AF_INET6)
 
 try:
     import _thread as thread
@@ -645,7 +632,7 @@ class GeneralModuleTests(unittest.TestCase):
         socket.getaddrinfo('localhost', 80)
         socket.getaddrinfo('127.0.0.1', 80)
         socket.getaddrinfo(None, 80)
-        if SUPPORTS_IPV6:
+        if support.IPV6_ENABLED:
             socket.getaddrinfo('::1', 80)
         # port can be a string service name such as "http", a numeric
         # port number or None
index 31cda4dda25977d91fce0a93173f4fca21f0e1af..fb063f3bae2e9244f7f43d44b19295e4e673373a 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -523,6 +523,10 @@ Extensions
 Tests
 -----
 
+- Issue #11811: Factor out detection of IPv6 support on the current host
+  and make it available as ``test.support.IPV6_ENABLED``.  Patch by
+  Charles-François Natali.
+
 - Issue #10914: Add a minimal embedding test to test_capi.
 
 - Issue #11223: Skip test_lock_acquire_interruption() and