blob: fedf7cf45a8335a3127d51ac2ad3f67d4e14c2c9 [file] [log] [blame]
"""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()