summaryrefslogtreecommitdiff
path: root/django/test
diff options
context:
space:
mode:
authorTim Graham <timograham@gmail.com>2016-04-25 07:56:07 -0400
committerTim Graham <timograham@gmail.com>2016-04-25 07:56:07 -0400
commitbb0b4b705b508451567bcada9106b91b8fca9e86 (patch)
treee7239192a52349d084f621d7bf6ffe656447de80 /django/test
parentbd145e7209a0e628cced10384bd6f62d65c0f211 (diff)
Fixed #26052 -- Moved conditional_content_removal() processing to the test client.
Diffstat (limited to 'django/test')
-rw-r--r--django/test/client.py24
1 files changed, 24 insertions, 0 deletions
diff --git a/django/test/client.py b/django/test/client.py
index 8349a902fa..166e6ef877 100644
--- a/django/test/client.py
+++ b/django/test/client.py
@@ -92,6 +92,26 @@ def closing_iterator_wrapper(iterable, close):
request_finished.connect(close_old_connections)
+def conditional_content_removal(request, response):
+ """
+ Simulate the behavior of most Web servers by removing the content of
+ responses for HEAD requests, 1xx, 204, and 304 responses. Ensures
+ compliance with RFC 2616, section 4.3.
+ """
+ if 100 <= response.status_code < 200 or response.status_code in (204, 304):
+ if response.streaming:
+ response.streaming_content = []
+ else:
+ response.content = b''
+ response['Content-Length'] = '0'
+ if request.method == 'HEAD':
+ if response.streaming:
+ response.streaming_content = []
+ else:
+ response.content = b''
+ return response
+
+
class ClientHandler(BaseHandler):
"""
A HTTP Handler that can be used for testing purposes. Uses the WSGI
@@ -120,6 +140,10 @@ class ClientHandler(BaseHandler):
# Request goes through middleware.
response = self.get_response(request)
+
+ # Simulate behaviors of most Web servers.
+ conditional_content_removal(request, response)
+
# Attach the originating request to the response so that it could be
# later retrieved.
response.wsgi_request = request