Add certificate validation. Work initially started by Christoph Kern.
diff --git a/python3/httplib2test.py b/python3/httplib2test.py
index 4ef3a78..40e087c 100755
--- a/python3/httplib2test.py
+++ b/python3/httplib2test.py
@@ -20,6 +20,7 @@
 import io

 import os

 import socket

+import ssl

 import sys

 import time

 import unittest

@@ -117,6 +118,7 @@
         self.port = port

         self.timeout = timeout

         self.log = ""

+        self.sock = None

 

     def set_debuglevel(self, level):

         pass

@@ -473,8 +475,26 @@
           # Skip on 3.2

           pass

 

+    def testSslCertValidation(self):

+          # Test that we get an ssl.SSLError when specifying a non-existent CA

+          # certs file.

+          http = httplib2.Http(ca_certs='/nosuchfile')

+          self.assertRaises(IOError,

+                  http.request, "https://www.google.com/", "GET")

 

+          # Test that we get a SSLHandshakeError if we try to access

+          # https://www.google.com, using a CA cert file that doesn't contain

+          # the CA Gogole uses (i.e., simulating a cert that's not signed by a

+          # trusted CA).

+          other_ca_certs = os.path.join(

+                  os.path.dirname(os.path.abspath(httplib2.__file__ )),

+                  "test", "other_cacerts.txt")

+          http = httplib2.Http(ca_certs=other_ca_certs)

+          self.assertRaises(ssl.SSLError,

+            http.request,"https://www.google.com/", "GET")

 

+    def testSniHostnameValidation(self):

+        self.http.request("https://google.com/", method="GET")

 

     def testGet303(self):

         # Do a follow-up GET on a Location: header

@@ -736,20 +756,6 @@
         self.assertEqual(response.status, 500)

         self.assertTrue(response.reason.startswith("Content purported"))

 

-    def testTimeout(self):

-        self.http.force_exception_to_status_code = True 

-        uri = urllib.parse.urljoin(base, "timeout/timeout.cgi")

-        try:

-            import socket

-            socket.setdefaulttimeout(1) 

-        except:

-            # Don't run the test if we can't set the timeout

-            return 

-        (response, content) = self.http.request(uri)

-        self.assertEqual(response.status, 408)

-        self.assertTrue(response.reason.startswith("Request Timeout"))

-        self.assertTrue(content.startswith(b"Request Timeout"))

-

     def testIndividualTimeout(self):

         uri = urllib.parse.urljoin(base, "timeout/timeout.cgi")

         http = httplib2.Http(timeout=1)

@@ -1469,11 +1475,11 @@
         # Degenerate case of no headers

         response = {}

         end2end = httplib2._get_end2end_headers(response)

-        self.assertEquals(0, len(end2end))

+        self.assertEqual(0, len(end2end))

 

         # Degenerate case of connection referrring to a header not passed in 

         response = {'connection': 'content-type'}

         end2end = httplib2._get_end2end_headers(response)

-        self.assertEquals(0, len(end2end))

+        self.assertEqual(0, len(end2end))

 

 unittest.main()