Home | History | Annotate | Download | only in tests
      1 import httplib2
      2 import tests
      3 
      4 
      5 def test_gzip_head():
      6     # Test that we don't try to decompress a HEAD response
      7     http = httplib2.Http()
      8     response = tests.http_response_bytes(
      9         headers={"content-encoding": "gzip", "content-length": 42}
     10     )
     11     with tests.server_const_bytes(response) as uri:
     12         response, content = http.request(uri, "HEAD")
     13         assert response.status == 200
     14         assert int(response["content-length"]) != 0
     15         assert content == b""
     16 
     17 
     18 def test_gzip_get():
     19     # Test that we support gzip compression
     20     http = httplib2.Http()
     21     response = tests.http_response_bytes(
     22         headers={"content-encoding": "gzip"},
     23         body=tests.gzip_compress(b"properly compressed"),
     24     )
     25     with tests.server_const_bytes(response) as uri:
     26         response, content = http.request(uri, "GET")
     27         assert response.status == 200
     28         assert "content-encoding" not in response
     29         assert "-content-encoding" in response
     30         assert int(response["content-length"]) == len(b"properly compressed")
     31         assert content == b"properly compressed"
     32 
     33 
     34 def test_gzip_post_response():
     35     http = httplib2.Http()
     36     response = tests.http_response_bytes(
     37         headers={"content-encoding": "gzip"},
     38         body=tests.gzip_compress(b"properly compressed"),
     39     )
     40     with tests.server_const_bytes(response) as uri:
     41         response, content = http.request(uri, "POST", body=b"")
     42         assert response.status == 200
     43         assert "content-encoding" not in response
     44         assert "-content-encoding" in response
     45 
     46 
     47 def test_gzip_malformed_response():
     48     http = httplib2.Http()
     49     # Test that we raise a good exception when the gzip fails
     50     http.force_exception_to_status_code = False
     51     response = tests.http_response_bytes(
     52         headers={"content-encoding": "gzip"}, body=b"obviously not compressed"
     53     )
     54     with tests.server_const_bytes(response, request_count=2) as uri:
     55         with tests.assert_raises(httplib2.FailedToDecompressContent):
     56             http.request(uri, "GET")
     57 
     58         # Re-run the test with out the exceptions
     59         http.force_exception_to_status_code = True
     60 
     61         response, content = http.request(uri, "GET")
     62         assert response.status == 500
     63         assert response.reason.startswith("Content purported")
     64 
     65 
     66 def test_deflate_get():
     67     # Test that we support deflate compression
     68     http = httplib2.Http()
     69     response = tests.http_response_bytes(
     70         headers={"content-encoding": "deflate"},
     71         body=tests.deflate_compress(b"properly compressed"),
     72     )
     73     with tests.server_const_bytes(response) as uri:
     74         response, content = http.request(uri, "GET")
     75         assert response.status == 200
     76         assert "content-encoding" not in response
     77         assert int(response["content-length"]) == len(b"properly compressed")
     78         assert content == b"properly compressed"
     79 
     80 
     81 def test_deflate_malformed_response():
     82     # Test that we raise a good exception when the deflate fails
     83     http = httplib2.Http()
     84     http.force_exception_to_status_code = False
     85     response = tests.http_response_bytes(
     86         headers={"content-encoding": "deflate"}, body=b"obviously not compressed"
     87     )
     88     with tests.server_const_bytes(response, request_count=2) as uri:
     89         with tests.assert_raises(httplib2.FailedToDecompressContent):
     90             http.request(uri, "GET")
     91 
     92         # Re-run the test with out the exceptions
     93         http.force_exception_to_status_code = True
     94 
     95         response, content = http.request(uri, "GET")
     96         assert response.status == 500
     97         assert response.reason.startswith("Content purported")
     98