blob: df991a1f8ea75e4aab4821d9b4f3586d94225270 [file] [log] [blame]
import httplib2
import tests
def test_gzip_head():
# Test that we don't try to decompress a HEAD response
http = httplib2.Http()
response = tests.http_response_bytes(
headers={'content-encoding': 'gzip', 'content-length': 42},
)
with tests.server_const_bytes(response) as uri:
response, content = http.request(uri, 'HEAD')
assert response.status == 200
assert int(response['content-length']) != 0
assert content == b''
def test_gzip_get():
# Test that we support gzip compression
http = httplib2.Http()
response = tests.http_response_bytes(
headers={'content-encoding': 'gzip'},
body=tests.gzip_compress(b'properly compressed'),
)
with tests.server_const_bytes(response) as uri:
response, content = http.request(uri, 'GET')
assert response.status == 200
assert 'content-encoding' not in response
assert '-content-encoding' in response
assert int(response['content-length']) == len(b'properly compressed')
assert content == b'properly compressed'
def test_gzip_post_response():
http = httplib2.Http()
response = tests.http_response_bytes(
headers={'content-encoding': 'gzip'},
body=tests.gzip_compress(b'properly compressed'),
)
with tests.server_const_bytes(response) as uri:
response, content = http.request(uri, 'POST', body=b'')
assert response.status == 200
assert 'content-encoding' not in response
assert '-content-encoding' in response
def test_gzip_malformed_response():
http = httplib2.Http()
# Test that we raise a good exception when the gzip fails
http.force_exception_to_status_code = False
response = tests.http_response_bytes(
headers={'content-encoding': 'gzip'},
body=b'obviously not compressed',
)
with tests.server_const_bytes(response, request_count=2) as uri:
with tests.assert_raises(httplib2.FailedToDecompressContent):
http.request(uri, 'GET')
# Re-run the test with out the exceptions
http.force_exception_to_status_code = True
response, content = http.request(uri, 'GET')
assert response.status == 500
assert response.reason.startswith('Content purported')
def test_deflate_get():
# Test that we support deflate compression
http = httplib2.Http()
response = tests.http_response_bytes(
headers={'content-encoding': 'deflate'},
body=tests.deflate_compress(b'properly compressed'),
)
with tests.server_const_bytes(response) as uri:
response, content = http.request(uri, 'GET')
assert response.status == 200
assert 'content-encoding' not in response
assert int(response['content-length']) == len(b'properly compressed')
assert content == b'properly compressed'
def test_deflate_malformed_response():
# Test that we raise a good exception when the deflate fails
http = httplib2.Http()
http.force_exception_to_status_code = False
response = tests.http_response_bytes(
headers={'content-encoding': 'deflate'},
body=b'obviously not compressed',
)
with tests.server_const_bytes(response, request_count=2) as uri:
with tests.assert_raises(httplib2.FailedToDecompressContent):
http.request(uri, 'GET')
# Re-run the test with out the exceptions
http.force_exception_to_status_code = True
response, content = http.request(uri, 'GET')
assert response.status == 500
assert response.reason.startswith('Content purported')