mirror of
https://github.com/httpie/cli.git
synced 2025-01-22 05:18:43 +01:00
Fix tests for installation with pyOpenSSL #729
This commit is contained in:
parent
d1407baf76
commit
b88e88d2e3
@ -2,17 +2,31 @@ import os
|
|||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
import pytest_httpbin.certs
|
import pytest_httpbin.certs
|
||||||
from requests.exceptions import SSLError
|
import requests.exceptions
|
||||||
|
|
||||||
from httpie import ExitStatus
|
from httpie import ExitStatus
|
||||||
from httpie.input import SSL_VERSION_ARG_MAPPING
|
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 <https://github.com/jakubroztocil/httpie/issues/729>
|
||||||
|
# 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_CERT = os.path.join(TESTS_ROOT, 'client_certs', 'client.crt')
|
||||||
CLIENT_KEY = os.path.join(TESTS_ROOT, 'client_certs', 'client.key')
|
CLIENT_KEY = os.path.join(TESTS_ROOT, 'client_certs', 'client.key')
|
||||||
CLIENT_PEM = os.path.join(TESTS_ROOT, 'client_certs', 'client.pem')
|
CLIENT_PEM = os.path.join(TESTS_ROOT, 'client_certs', 'client.pem')
|
||||||
|
|
||||||
# FIXME:
|
# FIXME:
|
||||||
# We test against a local httpbin instance which uses a self-signed cert.
|
# We test against a local httpbin instance which uses a self-signed cert.
|
||||||
# Requests without --verify=<CA_BUNDLE> will fail with a verification error.
|
# Requests without --verify=<CA_BUNDLE> will fail with a verification error.
|
||||||
@ -28,7 +42,7 @@ def test_ssl_version(httpbin_secure, ssl_version):
|
|||||||
httpbin_secure + '/get'
|
httpbin_secure + '/get'
|
||||||
)
|
)
|
||||||
assert HTTP_OK in r
|
assert HTTP_OK in r
|
||||||
except SSLError as e:
|
except ssl_errors as e:
|
||||||
if ssl_version == 'ssl3':
|
if ssl_version == 'ssl3':
|
||||||
# pytest-httpbin doesn't support ssl3
|
# pytest-httpbin doesn't support ssl3
|
||||||
assert 'SSLV3_ALERT_HANDSHAKE_FAILURE' in str(e)
|
assert 'SSLV3_ALERT_HANDSHAKE_FAILURE' in str(e)
|
||||||
@ -57,12 +71,12 @@ class TestClientCert:
|
|||||||
assert 'No such file or directory' in r.stderr
|
assert 'No such file or directory' in r.stderr
|
||||||
|
|
||||||
def test_cert_file_invalid(self, httpbin_secure):
|
def test_cert_file_invalid(self, httpbin_secure):
|
||||||
with pytest.raises(SSLError):
|
with pytest.raises(ssl_errors):
|
||||||
http(httpbin_secure + '/get',
|
http(httpbin_secure + '/get',
|
||||||
'--cert', __file__)
|
'--cert', __file__)
|
||||||
|
|
||||||
def test_cert_ok_but_missing_key(self, httpbin_secure):
|
def test_cert_ok_but_missing_key(self, httpbin_secure):
|
||||||
with pytest.raises(SSLError):
|
with pytest.raises(ssl_errors):
|
||||||
http(httpbin_secure + '/get',
|
http(httpbin_secure + '/get',
|
||||||
'--cert', CLIENT_CERT)
|
'--cert', CLIENT_CERT)
|
||||||
|
|
||||||
@ -79,21 +93,23 @@ class TestServerCert:
|
|||||||
assert HTTP_OK in r
|
assert HTTP_OK in r
|
||||||
|
|
||||||
def test_verify_custom_ca_bundle_path(
|
def test_verify_custom_ca_bundle_path(
|
||||||
self, httpbin_secure_untrusted):
|
self, httpbin_secure_untrusted
|
||||||
|
):
|
||||||
r = http(httpbin_secure_untrusted + '/get', '--verify', CA_BUNDLE)
|
r = http(httpbin_secure_untrusted + '/get', '--verify', CA_BUNDLE)
|
||||||
assert HTTP_OK in r
|
assert HTTP_OK in r
|
||||||
|
|
||||||
def test_self_signed_server_cert_by_default_raises_ssl_error(
|
def test_self_signed_server_cert_by_default_raises_ssl_error(
|
||||||
self,
|
self,
|
||||||
httpbin_secure_untrusted):
|
httpbin_secure_untrusted
|
||||||
with pytest.raises(SSLError):
|
):
|
||||||
|
with pytest.raises(ssl_errors):
|
||||||
http(httpbin_secure_untrusted.url + '/get')
|
http(httpbin_secure_untrusted.url + '/get')
|
||||||
|
|
||||||
def test_verify_custom_ca_bundle_invalid_path(self, httpbin_secure):
|
def test_verify_custom_ca_bundle_invalid_path(self, httpbin_secure):
|
||||||
# since 2.14.0 requests raises IOError
|
# 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__')
|
http(httpbin_secure.url + '/get', '--verify', '/__not_found__')
|
||||||
|
|
||||||
def test_verify_custom_ca_bundle_invalid_bundle(self, httpbin_secure):
|
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__)
|
http(httpbin_secure.url + '/get', '--verify', __file__)
|
||||||
|
Loading…
Reference in New Issue
Block a user