"""Tests for SSL handling in httplib2.""" import httplib2 import os import ssl import sys import unittest class TestSslProtocol(unittest.TestCase): def testSslCertValidationWithInvalidCaCert(self): if sys.version_info >= (2, 6): http = httplib2.Http(ca_certs="/nosuchfile") if sys.version_info >= (2, 7): with self.assertRaises(IOError): http.request("https://www.google.com/", "GET") else: self.assertRaises( ssl.SSLError, http.request, "https://www.google.com/", "GET" ) def testSslCertValidationWithSelfSignedCaCert(self): if sys.version_info >= (2, 7): 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) if sys.platform != "darwin": with self.assertRaises(httplib2.SSLHandshakeError): http.request("https://www.google.com/", "GET") def testSslProtocolTlsV1AndShouldPass(self): http = httplib2.Http(ssl_version=ssl.PROTOCOL_TLSv1) urls = [ "https://www.amazon.com", "https://www.apple.com", "https://www.twitter.com", ] for url in urls: if sys.version_info >= (2, 7): self.assertIsNotNone(http.request(uri=url)) def testSslProtocolV3AndShouldFailDueToPoodle(self): http = httplib2.Http(ssl_version=ssl.PROTOCOL_SSLv3) urls = [ "https://www.amazon.com", "https://www.apple.com", "https://www.twitter.com", ] for url in urls: if sys.version_info >= (2, 7): with self.assertRaises(httplib2.SSLHandshakeError): http.request(url) try: http.request(url) except httplib2.SSLHandshakeError as e: self.assertTrue("sslv3 alert handshake failure" in str(e)) if __name__ == "__main__": unittest.main()