diff options
| author | Kevin Christopher Henry <k@severian.com> | 2016-10-11 03:42:00 -0400 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2016-10-13 14:22:54 -0400 |
| commit | ad332e5ca9503bba2e14cc8c3ca675eed56d72bc (patch) | |
| tree | 4cf3ea2b0c921d10cfe001702227b9eb86bf6f57 /tests | |
| parent | 816eae35084a69a76e45439df20f69c7e0ccaef9 (diff) | |
Refs #19705 -- Made GZipMiddleware make ETags weak.
Django's conditional request processing can now produce 304 Not Modified
responses for content that is subject to compression.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/middleware/tests.py | 43 |
1 files changed, 30 insertions, 13 deletions
diff --git a/tests/middleware/tests.py b/tests/middleware/tests.py index a9cb1f31ea..db8ed6ea90 100644 --- a/tests/middleware/tests.py +++ b/tests/middleware/tests.py @@ -855,27 +855,44 @@ class GZipMiddlewareTest(SimpleTestCase): @override_settings(USE_ETAGS=True) class ETagGZipMiddlewareTest(SimpleTestCase): """ - Tests if the ETagMiddleware behaves correctly with GZipMiddleware. + ETags are handled properly by GZipMiddleware. """ rf = RequestFactory() compressible_string = b'a' * 500 - def test_compress_response(self): + def test_strong_etag_modified(self): """ - ETag is changed after gzip compression is performed. + GZipMiddleware makes a strong ETag weak. """ request = self.rf.get('/', HTTP_ACCEPT_ENCODING='gzip, deflate') - response = GZipMiddleware().process_response( - request, - CommonMiddleware().process_response(request, HttpResponse(self.compressible_string)) - ) - gzip_etag = response.get('ETag') + response = HttpResponse(self.compressible_string) + response['ETag'] = '"eggs"' + gzip_response = GZipMiddleware().process_response(request, response) + self.assertEqual(gzip_response['ETag'], 'W/"eggs"') - request = self.rf.get('/', HTTP_ACCEPT_ENCODING='') + def test_weak_etag_not_modified(self): + """ + GZipMiddleware doesn't modify a weak ETag. + """ + request = self.rf.get('/', HTTP_ACCEPT_ENCODING='gzip, deflate') + response = HttpResponse(self.compressible_string) + response['ETag'] = 'W/"eggs"' + gzip_response = GZipMiddleware().process_response(request, response) + self.assertEqual(gzip_response['ETag'], 'W/"eggs"') + + def test_etag_match(self): + """ + GZipMiddleware allows 304 Not Modified responses. + """ + request = self.rf.get('/', HTTP_ACCEPT_ENCODING='gzip, deflate') response = GZipMiddleware().process_response( request, - CommonMiddleware().process_response(request, HttpResponse(self.compressible_string)) + ConditionalGetMiddleware().process_response(request, HttpResponse(self.compressible_string)) ) - nogzip_etag = response.get('ETag') - - self.assertNotEqual(gzip_etag, nogzip_etag) + gzip_etag = response['ETag'] + next_request = self.rf.get('/', HTTP_ACCEPT_ENCODING='gzip, deflate', HTTP_IF_NONE_MATCH=gzip_etag) + next_response = ConditionalGetMiddleware().process_response( + next_request, + HttpResponse(self.compressible_string) + ) + self.assertEqual(next_response.status_code, 304) |
