| 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') |