import mock from pytest import raises from requests import Request, Timeout from requests.exceptions import ConnectionError from httpie import ExitStatus from httpie.core import main from utils import http, HTTP_OK error_msg = None @mock.patch('httpie.core.get_response') def test_error(get_response): def error(msg, *args, **kwargs): global error_msg error_msg = msg % args exc = ConnectionError('Connection aborted') exc.request = Request(method='GET', url='http://www.google.com') get_response.side_effect = exc ret = main(['http', '--ignore-stdin', 'www.google.com'], custom_log_error=error) assert ret == ExitStatus.ERROR assert error_msg == ( 'ConnectionError: ' 'Connection aborted while doing GET request to URL: ' 'http://www.google.com') @mock.patch('httpie.core.get_response') def test_error_traceback(get_response): exc = ConnectionError('Connection aborted') exc.request = Request(method='GET', url='http://www.google.com') get_response.side_effect = exc with raises(ConnectionError): main(['http', '--ignore-stdin', '--traceback', 'www.google.com']) def test_max_headers_limit(httpbin_both): with raises(ConnectionError) as e: http('--max-headers=1', httpbin_both + '/get') assert 'got more than 1 headers' in str(e.value) def test_max_headers_no_limit(httpbin_both): assert HTTP_OK in http('--max-headers=0', httpbin_both + '/get')