| """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() |