[Python-checkins] cpython (2.7): don't fail tests when www.python.org can't be validated by the system

benjamin.peterson python-checkins at python.org
Tue Nov 25 22:17:21 CET 2014


https://hg.python.org/cpython/rev/2e4888fa8b60
changeset:   93586:2e4888fa8b60
branch:      2.7
user:        Benjamin Peterson <benjamin at python.org>
date:        Tue Nov 25 15:16:55 2014 -0600
summary:
  don't fail tests when www.python.org can't be validated by the system

files:
  Lib/test/test_httplib.py     |   4 +---
  Lib/test/test_robotparser.py |   5 +++--
  Lib/test/test_support.py     |  13 +++++++++++++
  3 files changed, 17 insertions(+), 5 deletions(-)


diff --git a/Lib/test/test_httplib.py b/Lib/test/test_httplib.py
--- a/Lib/test/test_httplib.py
+++ b/Lib/test/test_httplib.py
@@ -551,12 +551,10 @@
             resp = h.getresponse()
             self.assertIn('nginx', resp.getheader('server'))
 
+    @test_support.system_must_validate_cert
     def test_networked_trusted_by_default_cert(self):
         # Default settings: requires a valid cert from a trusted CA
         test_support.requires('network')
-        if test_support.verbose:
-            import ssl
-            print(ssl._create_default_https_context().get_ca_certs())
         with test_support.transient_internet('www.python.org'):
             h = httplib.HTTPSConnection('www.python.org', 443)
             h.request('GET', '/')
diff --git a/Lib/test/test_robotparser.py b/Lib/test/test_robotparser.py
--- a/Lib/test/test_robotparser.py
+++ b/Lib/test/test_robotparser.py
@@ -276,14 +276,15 @@
             self.assertEqual(parser.can_fetch("*", robots_url), False)
 
     @unittest.skipUnless(HAVE_HTTPS, 'need SSL support to download license')
+    @test_support.system_must_validate_cert
     def testPythonOrg(self):
         test_support.requires('network')
         with test_support.transient_internet('www.python.org'):
             parser = robotparser.RobotFileParser(
-                "http://www.python.org/robots.txt")
+                "https://www.python.org/robots.txt")
             parser.read()
             self.assertTrue(
-                parser.can_fetch("*", "http://www.python.org/robots.txt"))
+                parser.can_fetch("*", "https://www.python.org/robots.txt"))
 
 
 def test_main():
diff --git a/Lib/test/test_support.py b/Lib/test/test_support.py
--- a/Lib/test/test_support.py
+++ b/Lib/test/test_support.py
@@ -481,6 +481,19 @@
 
 IPV6_ENABLED = _is_ipv6_enabled()
 
+def system_must_validate_cert(f):
+    """Skip the test on TLS certificate validation failures."""
+    @functools.wraps(f)
+    def dec(*args, **kwargs):
+        try:
+            f(*args, **kwargs)
+        except IOError as e:
+            if e.reason == "CERTIFICATE_VERIFY_FAILED":
+                raise unittest.SkipTest("system does not contain "
+                                        "necessary certificates")
+            raise
+    return dec
+
 FUZZ = 1e-6
 
 def fcmp(x, y): # fuzzy comparison function

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list