You've already forked httpie-cli
							
							
				mirror of
				https://github.com/httpie/cli.git
				synced 2025-10-30 23:47:52 +02: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:
		
				
					committed by
					
						 GitHub
						GitHub
					
				
			
			
				
	
			
			
			
						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 | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user