def test_middleware_wont_compress_if_client_not_accept(self): fake_request = FakeLegacyRequest() response_content = UTF8_LOREM_IPSUM_IN_CZECH fake_response = FakeResponse(content=response_content) brotli_middleware = BrotliMiddleware() brotli_response = brotli_middleware.process_response( fake_request, fake_response) self.assertEqual(response_content, brotli_response.content.decode(encoding='utf-8'))
def test_middleware_compress_response(self): fake_request = FakeRequestAcceptsBrotli() response_content = UTF8_LOREM_IPSUM_IN_CZECH fake_response = FakeResponse(content=response_content) brotli_middleware = BrotliMiddleware() brotli_response = brotli_middleware.process_response( fake_request, fake_response) decompressed_response = brotli.decompress( brotli_response.content) # type: bytes self.assertEqual(response_content, decompressed_response.decode(encoding='utf-8'))
def test_middleware_wont_compress_response_if_response_is_small(self): fake_request = FakeRequestAcceptsBrotli() response_content = "Hello World" self.assertLess(len(response_content), MIN_LEN_FOR_RESPONSE_TO_PROCESS) # a < b fake_response = FakeResponse(content=response_content) brotli_middleware = BrotliMiddleware() brotli_response = brotli_middleware.process_response( fake_request, fake_response) self.assertEqual(response_content, brotli_response.content.decode(encoding='utf-8'))
def test_middleware_wont_compress_if_response_is_already_compressed(self): fake_request = FakeRequestAcceptsBrotli() response_content = UTF8_LOREM_IPSUM_IN_CZECH fake_response = FakeResponse(content=response_content) brotli_middleware = BrotliMiddleware() django_gzip_middleware = GZipMiddleware() gzip_response = django_gzip_middleware.process_response( fake_request, fake_response) brotli_response = brotli_middleware.process_response( fake_request, gzip_response) self.assertEqual( response_content, gzip.decompress(brotli_response.content).decode(encoding='utf-8'))
def test_etag_is_updated_if_present(self): fake_request = FakeRequestAcceptsBrotli() response_content = UTF8_LOREM_IPSUM_IN_CZECH * 5 fake_etag_content = "\"foo\"" fake_response = FakeResponse(content=response_content, headers={"ETag": fake_etag_content}) self.assertEqual(fake_response['ETag'], fake_etag_content) brotli_middleware = BrotliMiddleware() brotli_response = brotli_middleware.process_response( fake_request, fake_response) decompressed_response = brotli.decompress( brotli_response.content) # type: bytes self.assertEqual(response_content, decompressed_response.decode(encoding='utf-8')) self.assertEqual(brotli_response['ETag'], '"foo;br\\"')
def test_compress_streaming_response(self): """ Compression is performed on responses with streaming content. """ sequence = [b"a" * 500, b"b" * 200, b"a" * 300] def get_stream_response(): resp = StreamingHttpResponse(sequence) resp["Content-Type"] = "text/html; charset=UTF-8" return resp fake_request = FakeRequestAcceptsBrotli() fake_response = get_stream_response() brotli_middleware = BrotliMiddleware() brotli_response = brotli_middleware.process_response( fake_request, fake_response) decompressed_response = brotli.decompress(b"".join( brotli_response.streaming_content)) # type: bytes self.assertEqual(b"".join(sequence), decompressed_response) self.assertEqual(brotli_response.get("Content-Encoding"), "br") self.assertFalse(brotli_response.has_header("Content-Length"))