diff --git a/tests/test_ssl.py b/tests/test_ssl.py index 63bfd117..ef274dd5 100644 --- a/tests/test_ssl.py +++ b/tests/test_ssl.py @@ -2,17 +2,31 @@ import os import pytest import pytest_httpbin.certs -from requests.exceptions import SSLError +import requests.exceptions from httpie import ExitStatus from httpie.input import SSL_VERSION_ARG_MAPPING -from utils import http, HTTP_OK, TESTS_ROOT +from utils import HTTP_OK, TESTS_ROOT, http + + +try: + # Handle OpenSSL errors, if installed. + # See + # noinspection PyUnresolvedReferences + import OpenSSL.SSL + ssl_errors = ( + requests.exceptions.SSLError, + OpenSSL.SSL.Error, + ) +except ImportError: + ssl_errors = ( + requests.exceptions.SSLError, + ) CLIENT_CERT = os.path.join(TESTS_ROOT, 'client_certs', 'client.crt') CLIENT_KEY = os.path.join(TESTS_ROOT, 'client_certs', 'client.key') CLIENT_PEM = os.path.join(TESTS_ROOT, 'client_certs', 'client.pem') - # FIXME: # We test against a local httpbin instance which uses a self-signed cert. # Requests without --verify= will fail with a verification error. @@ -28,7 +42,7 @@ def test_ssl_version(httpbin_secure, ssl_version): httpbin_secure + '/get' ) assert HTTP_OK in r - except SSLError as e: + except ssl_errors as e: if ssl_version == 'ssl3': # pytest-httpbin doesn't support ssl3 assert 'SSLV3_ALERT_HANDSHAKE_FAILURE' in str(e) @@ -57,12 +71,12 @@ class TestClientCert: assert 'No such file or directory' in r.stderr def test_cert_file_invalid(self, httpbin_secure): - with pytest.raises(SSLError): + with pytest.raises(ssl_errors): http(httpbin_secure + '/get', '--cert', __file__) def test_cert_ok_but_missing_key(self, httpbin_secure): - with pytest.raises(SSLError): + with pytest.raises(ssl_errors): http(httpbin_secure + '/get', '--cert', CLIENT_CERT) @@ -79,21 +93,23 @@ class TestServerCert: assert HTTP_OK in r def test_verify_custom_ca_bundle_path( - self, httpbin_secure_untrusted): + self, httpbin_secure_untrusted + ): r = http(httpbin_secure_untrusted + '/get', '--verify', CA_BUNDLE) assert HTTP_OK in r def test_self_signed_server_cert_by_default_raises_ssl_error( - self, - httpbin_secure_untrusted): - with pytest.raises(SSLError): + self, + httpbin_secure_untrusted + ): + with pytest.raises(ssl_errors): http(httpbin_secure_untrusted.url + '/get') def test_verify_custom_ca_bundle_invalid_path(self, httpbin_secure): # since 2.14.0 requests raises IOError - with pytest.raises((SSLError, IOError)): + with pytest.raises(ssl_errors + (IOError,)): http(httpbin_secure.url + '/get', '--verify', '/__not_found__') def test_verify_custom_ca_bundle_invalid_bundle(self, httpbin_secure): - with pytest.raises(SSLError): + with pytest.raises(ssl_errors): http(httpbin_secure.url + '/get', '--verify', __file__)