def test_compress_deterministic(self):
     """
     Compression results are the same for the same content and don't
     include a modification time (since that would make the results
     of compression non-deterministic and prevent
     ConditionalGetMiddleware from recognizing conditional matches
     on gzipped content).
     """
     r1 = GZipMiddleware().process_response(self.req, self.resp)
     r2 = GZipMiddleware().process_response(self.req, self.resp)
     self.assertEqual(r1.content, r2.content)
     self.assertEqual(self.get_mtime(r1.content), 0)
     self.assertEqual(self.get_mtime(r2.content), 0)
 def test_compress_streaming_response(self):
     """
     Compression is performed on responses with streaming content.
     """
     r = GZipMiddleware().process_response(self.req, self.stream_resp)
     self.assertEqual(self.decompress(b''.join(r)), b''.join(self.sequence))
     self.assertEqual(r.get('Content-Encoding'), 'gzip')
     self.assertFalse(r.has_header('Content-Length'))
 def test_compress_response(self):
     """
     Compression is performed on responses with compressible content.
     """
     r = GZipMiddleware().process_response(self.req, self.resp)
     self.assertEqual(self.decompress(r.content), self.compressible_string)
     self.assertEqual(r.get('Content-Encoding'), 'gzip')
     self.assertEqual(r.get('Content-Length'), str(len(r.content)))
 def test_no_compress_incompressible_response(self):
     """
     Compression isn't performed on responses with incompressible content.
     """
     self.resp.content = self.incompressible_string
     r = GZipMiddleware().process_response(self.req, self.resp)
     self.assertEqual(r.content, self.incompressible_string)
     self.assertIsNone(r.get('Content-Encoding'))
 def test_no_compress_compressed_response(self):
     """
     Compression isn't performed on responses that are already compressed.
     """
     self.resp['Content-Encoding'] = 'deflate'
     r = GZipMiddleware().process_response(self.req, self.resp)
     self.assertEqual(r.content, self.compressible_string)
     self.assertEqual(r.get('Content-Encoding'), 'deflate')
 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_strong_etag_modified(self):
     """
     GZipMiddleware makes a strong ETag weak.
     """
     request = self.rf.get('/', HTTP_ACCEPT_ENCODING='gzip, deflate')
     response = HttpResponse(self.compressible_string)
     response['ETag'] = '"eggs"'
     gzip_response = GZipMiddleware().process_response(request, response)
     self.assertEqual(gzip_response['ETag'], 'W/"eggs"')
 def test_compress_non_200_response(self):
     """
     Compression is performed on responses with a status other than 200
     (#10762).
     """
     self.resp.status_code = 404
     r = GZipMiddleware().process_response(self.req, self.resp)
     self.assertEqual(self.decompress(r.content), self.compressible_string)
     self.assertEqual(r.get('Content-Encoding'), 'gzip')
 def test_compress_file_response(self):
     """
     Compression is performed on FileResponse.
     """
     with open(__file__, 'rb') as file1:
         file_resp = FileResponse(file1)
         file_resp['Content-Type'] = 'text/html; charset=UTF-8'
         r = GZipMiddleware().process_response(self.req, file_resp)
         with open(__file__, 'rb') as file2:
             self.assertEqual(self.decompress(b''.join(r)), file2.read())
         self.assertEqual(r.get('Content-Encoding'), 'gzip')
         self.assertIsNot(r.file_to_stream, file1)
 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,
         ConditionalGetMiddleware().process_response(
             request, HttpResponse(self.compressible_string)))
     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)