mirror of
https://github.com/httpie/cli.git
synced 2025-02-16 17:40:51 +01:00
Add workflow to test with pyOpenSSL active (#1164)
* Add workflow to test with pyOpenSSL active Original patch by @gmelodie. * Fix tests on Windows with Python 3.6
This commit is contained in:
parent
d7ed45bbcd
commit
507514b795
5
.github/workflows/tests.yml
vendored
5
.github/workflows/tests.yml
vendored
@ -21,6 +21,7 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest, macos-latest, windows-latest]
|
os: [ubuntu-latest, macos-latest, windows-latest]
|
||||||
python-version: [3.6, 3.7, 3.8, 3.9, "3.10.0-rc.2"]
|
python-version: [3.6, 3.7, 3.8, 3.9, "3.10.0-rc.2"]
|
||||||
|
pyopenssl: [0, 1]
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
@ -33,8 +34,12 @@ jobs:
|
|||||||
python -m pip install --upgrade pip wheel
|
python -m pip install --upgrade pip wheel
|
||||||
python -m pip install --upgrade '.[dev]'
|
python -m pip install --upgrade '.[dev]'
|
||||||
python -m pytest --verbose ./httpie ./tests
|
python -m pytest --verbose ./httpie ./tests
|
||||||
|
env:
|
||||||
|
HTTPIE_TEST_WITH_PYOPENSSL: ${{ matrix.pyopenssl }}
|
||||||
- name: Linux & Mac setup
|
- name: Linux & Mac setup
|
||||||
if: matrix.os != 'windows-latest'
|
if: matrix.os != 'windows-latest'
|
||||||
run: |
|
run: |
|
||||||
make install
|
make install
|
||||||
make test
|
make test
|
||||||
|
env:
|
||||||
|
HTTPIE_TEST_WITH_PYOPENSSL: ${{ matrix.pyopenssl }}
|
||||||
|
1
setup.py
1
setup.py
@ -19,6 +19,7 @@ dev_require = [
|
|||||||
'flake8-deprecated',
|
'flake8-deprecated',
|
||||||
'flake8-mutable',
|
'flake8-mutable',
|
||||||
'flake8-tuple',
|
'flake8-tuple',
|
||||||
|
'pyopenssl',
|
||||||
'pytest-cov',
|
'pytest-cov',
|
||||||
'twine',
|
'twine',
|
||||||
'wheel',
|
'wheel',
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
|
import os
|
||||||
import socket
|
import socket
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from pytest_httpbin import certs
|
from pytest_httpbin import certs
|
||||||
|
|
||||||
@ -41,3 +43,19 @@ def httpbin_with_chunked_support(_httpbin_with_chunked_support_available):
|
|||||||
if _httpbin_with_chunked_support_available:
|
if _httpbin_with_chunked_support_available:
|
||||||
return HTTPBIN_WITH_CHUNKED_SUPPORT
|
return HTTPBIN_WITH_CHUNKED_SUPPORT
|
||||||
pytest.skip(f'{HTTPBIN_WITH_CHUNKED_SUPPORT_DOMAIN} not resolvable')
|
pytest.skip(f'{HTTPBIN_WITH_CHUNKED_SUPPORT_DOMAIN} not resolvable')
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(autouse=True, scope='session')
|
||||||
|
def pyopenssl_inject():
|
||||||
|
"""
|
||||||
|
Injects `pyOpenSSL` module to make sure `requests` will use it.
|
||||||
|
<https://github.com/psf/requests/pull/5443#issuecomment-645740394>
|
||||||
|
"""
|
||||||
|
if os.getenv('HTTPIE_TEST_WITH_PYOPENSSL', '0') == '1':
|
||||||
|
try:
|
||||||
|
import urllib3.contrib.pyopenssl
|
||||||
|
urllib3.contrib.pyopenssl.inject_into_urllib3()
|
||||||
|
except ModuleNotFoundError:
|
||||||
|
pytest.fail('Missing "pyopenssl" module.')
|
||||||
|
|
||||||
|
yield
|
||||||
|
@ -1,11 +1,14 @@
|
|||||||
|
import os
|
||||||
|
import ssl
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
import pytest_httpbin.certs
|
import pytest_httpbin.certs
|
||||||
import requests.exceptions
|
import requests.exceptions
|
||||||
import ssl
|
|
||||||
import urllib3
|
import urllib3
|
||||||
|
|
||||||
from httpie.ssl import AVAILABLE_SSL_VERSION_ARG_MAPPING, DEFAULT_SSL_CIPHERS
|
from httpie.ssl import AVAILABLE_SSL_VERSION_ARG_MAPPING, DEFAULT_SSL_CIPHERS
|
||||||
from httpie.status import ExitStatus
|
from httpie.status import ExitStatus
|
||||||
|
|
||||||
from .utils import HTTP_OK, TESTS_ROOT, http
|
from .utils import HTTP_OK, TESTS_ROOT, http
|
||||||
|
|
||||||
|
|
||||||
@ -17,6 +20,7 @@ try:
|
|||||||
ssl_errors = (
|
ssl_errors = (
|
||||||
requests.exceptions.SSLError,
|
requests.exceptions.SSLError,
|
||||||
OpenSSL.SSL.Error,
|
OpenSSL.SSL.Error,
|
||||||
|
ValueError, # TODO: Remove with OSS-65
|
||||||
)
|
)
|
||||||
except ImportError:
|
except ImportError:
|
||||||
ssl_errors = (
|
ssl_errors = (
|
||||||
@ -54,6 +58,8 @@ def test_ssl_version(httpbin_secure, ssl_version):
|
|||||||
root = root.__context__
|
root = root.__context__
|
||||||
if isinstance(root, ssl.SSLError) and root.reason == "TLSV1_ALERT_PROTOCOL_VERSION":
|
if isinstance(root, ssl.SSLError) and root.reason == "TLSV1_ALERT_PROTOCOL_VERSION":
|
||||||
pytest.skip(f'Unsupported TLS version: {ssl_version}')
|
pytest.skip(f'Unsupported TLS version: {ssl_version}')
|
||||||
|
elif 'No such protocol' in str(e): # TODO: Remove with OSS-65
|
||||||
|
pytest.skip(f'Unsupported TLS version: {ssl_version}')
|
||||||
else:
|
else:
|
||||||
raise
|
raise
|
||||||
|
|
||||||
@ -149,3 +155,13 @@ def test_ciphers_none_can_be_selected(httpbin_secure):
|
|||||||
# <https://marc.info/?l=openbsd-ports&m=159251948515635&w=2>
|
# <https://marc.info/?l=openbsd-ports&m=159251948515635&w=2>
|
||||||
# http: error: Error: [('SSL routines', '(UNKNOWN)SSL_internal', 'no cipher match')]
|
# http: error: Error: [('SSL routines', '(UNKNOWN)SSL_internal', 'no cipher match')]
|
||||||
assert 'cipher' in r.stderr
|
assert 'cipher' in r.stderr
|
||||||
|
|
||||||
|
|
||||||
|
def test_pyopenssl_presence():
|
||||||
|
using_pyopenssl = os.getenv('HTTPIE_TEST_WITH_PYOPENSSL', '0')
|
||||||
|
if using_pyopenssl == '0':
|
||||||
|
assert not urllib3.util.ssl_.IS_PYOPENSSL
|
||||||
|
assert not urllib3.util.IS_PYOPENSSL
|
||||||
|
else:
|
||||||
|
assert urllib3.util.ssl_.IS_PYOPENSSL
|
||||||
|
assert urllib3.util.IS_PYOPENSSL
|
||||||
|
Loading…
Reference in New Issue
Block a user