Home | History | Annotate | Download | only in python2
      1 """Tests for SSL handling in httplib2."""
      2 
      3 import httplib2
      4 import os
      5 import ssl
      6 import sys
      7 import unittest
      8 
      9 
     10 class TestSslProtocol(unittest.TestCase):
     11     def testSslCertValidationWithInvalidCaCert(self):
     12         if sys.version_info >= (2, 6):
     13             http = httplib2.Http(ca_certs="/nosuchfile")
     14             if sys.version_info >= (2, 7):
     15                 with self.assertRaises(IOError):
     16                     http.request("https://www.google.com/", "GET")
     17             else:
     18                 self.assertRaises(
     19                     ssl.SSLError, http.request, "https://www.google.com/", "GET"
     20                 )
     21 
     22     def testSslCertValidationWithSelfSignedCaCert(self):
     23         if sys.version_info >= (2, 7):
     24             other_ca_certs = os.path.join(
     25                 os.path.dirname(os.path.abspath(httplib2.__file__)),
     26                 "test",
     27                 "other_cacerts.txt",
     28             )
     29             http = httplib2.Http(ca_certs=other_ca_certs)
     30             if sys.platform != "darwin":
     31                 with self.assertRaises(httplib2.SSLHandshakeError):
     32                     http.request("https://www.google.com/", "GET")
     33 
     34     def testSslProtocolTlsV1AndShouldPass(self):
     35         http = httplib2.Http(ssl_version=ssl.PROTOCOL_TLSv1)
     36         urls = [
     37             "https://www.amazon.com",
     38             "https://www.apple.com",
     39             "https://www.twitter.com",
     40         ]
     41         for url in urls:
     42             if sys.version_info >= (2, 7):
     43                 self.assertIsNotNone(http.request(uri=url))
     44 
     45     def testSslProtocolV3AndShouldFailDueToPoodle(self):
     46         http = httplib2.Http(ssl_version=ssl.PROTOCOL_SSLv3)
     47         urls = [
     48             "https://www.amazon.com",
     49             "https://www.apple.com",
     50             "https://www.twitter.com",
     51         ]
     52         for url in urls:
     53             if sys.version_info >= (2, 7):
     54                 with self.assertRaises(httplib2.SSLHandshakeError):
     55                     http.request(url)
     56                 try:
     57                     http.request(url)
     58                 except httplib2.SSLHandshakeError as e:
     59                     self.assertTrue("sslv3 alert handshake failure" in str(e))
     60 
     61 
     62 if __name__ == "__main__":
     63     unittest.main()
     64