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