diff options
author | Kevin Christopher Henry <k@severian.com> | 2016-10-13 00:31:48 -0400 |
---|---|---|
committer | Tim Graham <timograham@gmail.com> | 2016-10-17 16:11:53 -0400 |
commit | 2327fad54e334119f2561ddddf52e5af4bb14d41 (patch) | |
tree | 2184a9d21428c98ca099430eb7850670bb652509 /tests/middleware | |
parent | a4e9e834e3dfc8d5a024a78c765f193105d41a48 (diff) | |
download | django-2327fad54e334119f2561ddddf52e5af4bb14d41.tar.gz |
Fixed #27344 -- Made ConditionalGetMiddleware only process GET requests.
Diffstat (limited to 'tests/middleware')
-rw-r--r-- | tests/middleware/tests.py | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/tests/middleware/tests.py b/tests/middleware/tests.py index 7adf4b3a77..680354e956 100644 --- a/tests/middleware/tests.py +++ b/tests/middleware/tests.py @@ -629,6 +629,31 @@ class ConditionalGetMiddlewareTest(SimpleTestCase): self.assertEqual(new_response.cookies, self.resp.cookies) self.assertNotIn('Content-Language', new_response) + def test_no_unsafe(self): + """ + ConditionalGetMiddleware shouldn't return a conditional response on an + unsafe request. A response has already been generated by the time + ConditionalGetMiddleware is called, so it's too late to return a 412 + Precondition Failed. + """ + get_response = ConditionalGetMiddleware().process_response(self.req, self.resp) + etag = get_response['ETag'] + put_request = RequestFactory().put('/', HTTP_IF_MATCH=etag) + put_response = HttpResponse(status=200) + conditional_get_response = ConditionalGetMiddleware().process_response(put_request, put_response) + self.assertEqual(conditional_get_response.status_code, 200) # should never be a 412 + + def test_no_head(self): + """ + ConditionalGetMiddleware shouldn't compute and return an ETag on a + HEAD request since it can't do so accurately without access to the + response body of the corresponding GET. + """ + request = RequestFactory().head('/') + response = HttpResponse(status=200) + conditional_get_response = ConditionalGetMiddleware().process_response(request, response) + self.assertNotIn('ETag', conditional_get_response) + class XFrameOptionsMiddlewareTest(SimpleTestCase): """ |