From d9f6de6bf5d3b59e4230b7920a079db5c8cc5ffa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1n=20Chaves?= Date: Wed, 11 Jan 2023 15:59:45 +0100 Subject: [PATCH] Add a test for receiving duplicate headers --- tests/test_downloader_handlers.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/tests/test_downloader_handlers.py b/tests/test_downloader_handlers.py index 3dc2745a0..b1e711aff 100644 --- a/tests/test_downloader_handlers.py +++ b/tests/test_downloader_handlers.py @@ -214,6 +214,12 @@ class LargeChunkedFileResource(resource.Resource): return server.NOT_DONE_YET +class DuplicateHeaderResource(resource.Resource): + def render(self, request): + request.responseHeaders.setRawHeaders(b"Set-Cookie", [b"a=b", b"c=d"]) + return b"" + + class HttpTestCase(unittest.TestCase): scheme = 'http' download_handler_cls: Type = HTTPDownloadHandler @@ -239,6 +245,7 @@ class HttpTestCase(unittest.TestCase): r.putChild(b"contentlength", ContentLengthHeaderResource()) r.putChild(b"nocontenttype", EmptyContentTypeHeaderResource()) r.putChild(b"largechunkedfile", LargeChunkedFileResource()) + r.putChild(b"duplicate-header", DuplicateHeaderResource()) r.putChild(b"echo", Echo()) self.site = server.Site(r, timeout=None) self.wrapper = WrappingFactory(self.site) @@ -407,6 +414,16 @@ class HttpTestCase(unittest.TestCase): HtmlResponse, ) + def test_get_duplicate_header(self): + def _test(response): + self.assertEqual( + response.headers.getlist(b'Set-Cookie'), + [b'a=b', b'c=d'], + ) + + request = Request(self.getURL('duplicate-header')) + return self.download_request(request, Spider('foo')).addCallback(_test) + class Http10TestCase(HttpTestCase): """HTTP 1.0 test case"""