httpie-cli/tests/test_exit_status.py

61 lines
2.3 KiB
Python
Raw Normal View History

2014-04-24 14:07:31 +02:00
import requests
2014-04-24 15:17:23 +02:00
import pytest
2014-04-24 14:07:31 +02:00
from httpie import ExitStatus
2014-04-24 15:17:23 +02:00
from tests import TestEnvironment, http, httpbin, HTTP_OK
2014-04-24 14:07:31 +02:00
class TestExitStatus:
2014-04-24 14:07:31 +02:00
def test_ok_response_exits_0(self):
2014-04-24 15:48:01 +02:00
r = http('GET', httpbin('/status/200'))
assert HTTP_OK in r
assert r.exit_status == ExitStatus.OK
2014-04-24 14:07:31 +02:00
def test_error_response_exits_0_without_check_status(self):
2014-04-24 15:48:01 +02:00
r = http('GET', httpbin('/status/500'))
assert 'HTTP/1.1 500' in r
assert r.exit_status == ExitStatus.OK
assert not r.stderr
2014-04-24 14:07:31 +02:00
2014-04-24 15:48:01 +02:00
@pytest.mark.skipif(
True,
reason='timeout broken in requests'
' (https://github.com/jkbr/httpie/issues/185)')
2014-04-24 14:07:31 +02:00
def test_timeout_exit_status(self):
r = http('--timeout=0.5', 'GET', httpbin('/delay/1'),
error_exit_ok=True)
2014-04-24 15:48:01 +02:00
assert HTTP_OK in r
assert r.exit_status == ExitStatus.ERROR_TIMEOUT
2014-04-24 14:07:31 +02:00
def test_3xx_check_status_exits_3_and_stderr_when_stdout_redirected(self):
2014-04-24 15:48:01 +02:00
env = TestEnvironment(stdout_isatty=False)
r = http('--check-status', '--headers', 'GET', httpbin('/status/301'),
env=env, error_exit_ok=True)
assert 'HTTP/1.1 301' in r
assert r.exit_status == ExitStatus.ERROR_HTTP_3XX
assert '301 moved permanently' in r.stderr.lower()
2014-04-24 14:07:31 +02:00
2014-04-24 15:17:23 +02:00
@pytest.mark.skipif(
requests.__version__ == '0.13.6',
reason='Redirects with prefetch=False are broken in Requests 0.13.6')
2014-04-24 14:07:31 +02:00
def test_3xx_check_status_redirects_allowed_exits_0(self):
r = http('--check-status', '--follow', 'GET', httpbin('/status/301'),
error_exit_ok=True)
2014-04-24 14:07:31 +02:00
# The redirect will be followed so 200 is expected.
assert 'HTTP/1.1 200 OK' in r
assert r.exit_status == ExitStatus.OK
2014-04-24 14:07:31 +02:00
def test_4xx_check_status_exits_4(self):
r = http('--check-status', 'GET', httpbin('/status/401'),
error_exit_ok=True)
assert 'HTTP/1.1 401' in r
assert r.exit_status == ExitStatus.ERROR_HTTP_4XX
2014-04-24 14:07:31 +02:00
# Also stderr should be empty since stdout isn't redirected.
assert not r.stderr
2014-04-24 14:07:31 +02:00
def test_5xx_check_status_exits_5(self):
r = http('--check-status', 'GET', httpbin('/status/500'),
error_exit_ok=True)
assert 'HTTP/1.1 500' in r
assert r.exit_status == ExitStatus.ERROR_HTTP_5XX