2021-01-30 22:14:57 +01:00
|
|
|
"""
|
|
|
|
The ideas behind these test and the named templates is to ensure consistent output
|
|
|
|
across all supported different scenarios:
|
|
|
|
|
|
|
|
TODO: cover more scenarios
|
|
|
|
* terminal vs. redirect stdout
|
|
|
|
* different combinations of `--print=HBhb` (request/response headers/body)
|
|
|
|
* multipart requests
|
|
|
|
* streamed uploads
|
|
|
|
|
|
|
|
"""
|
|
|
|
from tests.utils.matching import assert_output_matches, Expect
|
|
|
|
from utils import http, HTTP_OK, MockEnvironment, HTTPBIN_WITH_CHUNKED_SUPPORT
|
|
|
|
|
|
|
|
|
|
|
|
RAW_REQUEST = [
|
|
|
|
Expect.REQUEST_HEADERS,
|
|
|
|
Expect.BODY,
|
|
|
|
]
|
|
|
|
RAW_RESPONSE = [
|
|
|
|
Expect.RESPONSE_HEADERS,
|
|
|
|
Expect.BODY,
|
|
|
|
]
|
|
|
|
RAW_EXCHANGE = [
|
|
|
|
*RAW_REQUEST,
|
|
|
|
Expect.SEPARATOR, # Good choice?
|
|
|
|
*RAW_RESPONSE,
|
|
|
|
]
|
|
|
|
RAW_BODY = [
|
|
|
|
Expect.BODY,
|
|
|
|
]
|
|
|
|
|
|
|
|
TERMINAL_REQUEST = [
|
|
|
|
*RAW_REQUEST,
|
|
|
|
Expect.SEPARATOR,
|
|
|
|
]
|
|
|
|
TERMINAL_RESPONSE = [
|
|
|
|
*RAW_RESPONSE,
|
|
|
|
Expect.SEPARATOR,
|
|
|
|
]
|
|
|
|
TERMINAL_EXCHANGE = [
|
|
|
|
*TERMINAL_REQUEST,
|
|
|
|
*TERMINAL_RESPONSE,
|
|
|
|
]
|
|
|
|
TERMINAL_BODY = [
|
|
|
|
RAW_BODY,
|
|
|
|
Expect.SEPARATOR
|
|
|
|
]
|
|
|
|
|
|
|
|
|
|
|
|
def test_headers():
|
|
|
|
r = http('--print=H', '--offline', 'pie.dev')
|
|
|
|
assert_output_matches(r, [Expect.REQUEST_HEADERS])
|
|
|
|
|
|
|
|
|
|
|
|
def test_redirected_headers():
|
|
|
|
r = http('--print=H', '--offline', 'pie.dev', env=MockEnvironment(stdout_isatty=False))
|
|
|
|
assert_output_matches(r, [Expect.REQUEST_HEADERS])
|
|
|
|
|
|
|
|
|
|
|
|
def test_terminal_headers_and_body():
|
|
|
|
r = http('--print=HB', '--offline', 'pie.dev', 'AAA=BBB')
|
|
|
|
assert_output_matches(r, TERMINAL_REQUEST)
|
|
|
|
|
|
|
|
|
2021-02-06 10:52:22 +01:00
|
|
|
def test_terminal_request_headers_response_body(httpbin):
|
|
|
|
r = http('--print=Hb', httpbin + '/get')
|
|
|
|
assert_output_matches(r, TERMINAL_REQUEST)
|
|
|
|
|
|
|
|
|
|
|
|
def test_raw_request_headers_response_body(httpbin):
|
|
|
|
r = http('--print=Hb', httpbin + '/get', env=MockEnvironment(stdout_isatty=False))
|
|
|
|
assert_output_matches(r, RAW_REQUEST)
|
|
|
|
|
|
|
|
|
|
|
|
def test_terminal_request_headers_response_headers(httpbin):
|
|
|
|
r = http('--print=Hh', httpbin + '/get')
|
|
|
|
assert_output_matches(r, [Expect.REQUEST_HEADERS, Expect.RESPONSE_HEADERS])
|
|
|
|
|
|
|
|
|
|
|
|
def test_raw_request_headers_response_headers(httpbin):
|
|
|
|
r = http('--print=Hh', httpbin + '/get')
|
|
|
|
assert_output_matches(r, [Expect.REQUEST_HEADERS, Expect.RESPONSE_HEADERS])
|
|
|
|
|
|
|
|
|
|
|
|
def test_terminal_request_body_response_body(httpbin):
|
|
|
|
r = http('--print=Hh', httpbin + '/get')
|
|
|
|
assert_output_matches(r, [Expect.REQUEST_HEADERS, Expect.RESPONSE_HEADERS])
|
|
|
|
|
|
|
|
|
2021-01-30 22:14:57 +01:00
|
|
|
def test_raw_headers_and_body():
|
|
|
|
r = http(
|
|
|
|
'--print=HB', '--offline', 'pie.dev', 'AAA=BBB',
|
|
|
|
env=MockEnvironment(stdout_isatty=False),
|
|
|
|
)
|
|
|
|
assert_output_matches(r, RAW_REQUEST)
|
|
|
|
|
|
|
|
|
|
|
|
def test_raw_body():
|
|
|
|
r = http(
|
|
|
|
'--print=B', '--offline', 'pie.dev', 'AAA=BBB',
|
|
|
|
env=MockEnvironment(stdout_isatty=False),
|
|
|
|
)
|
|
|
|
assert_output_matches(r, RAW_BODY)
|
|
|
|
|
|
|
|
|
|
|
|
def test_raw_exchange(httpbin):
|
|
|
|
r = http('--verbose', httpbin + '/post', 'a=b', env=MockEnvironment(stdout_isatty=False))
|
|
|
|
assert HTTP_OK in r
|
|
|
|
assert_output_matches(r, RAW_EXCHANGE)
|
|
|
|
|
|
|
|
|
|
|
|
def test_terminal_exchange(httpbin):
|
|
|
|
r = http('--verbose', httpbin + '/post', 'a=b')
|
|
|
|
assert HTTP_OK in r
|
|
|
|
assert_output_matches(r, TERMINAL_EXCHANGE)
|
|
|
|
|
|
|
|
|
|
|
|
def test_headers_multipart_body_separator():
|
|
|
|
r = http('--print=HB', '--multipart', '--offline', 'pie.dev', 'AAA=BBB')
|
|
|
|
assert_output_matches(r, TERMINAL_REQUEST)
|
|
|
|
|
|
|
|
|
|
|
|
def test_redirected_headers_multipart_no_separator():
|
|
|
|
r = http(
|
|
|
|
'--print=HB', '--multipart', '--offline', 'pie.dev', 'AAA=BBB',
|
|
|
|
env=MockEnvironment(stdout_isatty=False),
|
|
|
|
)
|
|
|
|
assert_output_matches(r, RAW_REQUEST)
|
|
|
|
|
|
|
|
|
|
|
|
def test_verbose_chunked():
|
|
|
|
r = http('--verbose', '--chunked', HTTPBIN_WITH_CHUNKED_SUPPORT + '/post', 'hello=world')
|
|
|
|
assert HTTP_OK in r
|
|
|
|
assert 'Transfer-Encoding: chunked' in r
|
|
|
|
assert_output_matches(r, TERMINAL_EXCHANGE)
|
2021-02-06 10:52:22 +01:00
|
|
|
|
|
|
|
|
|
|
|
def test_request_headers_response_body(httpbin):
|
|
|
|
r = http('--print=Hb', httpbin + '/get')
|
|
|
|
assert_output_matches(r, TERMINAL_REQUEST)
|