diff options
author | Raphael Gaschignard <r.gaschignard@gmail.com> | 2022-07-16 05:56:49 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-15 15:56:49 -0500 |
commit | 68d17f4f12dc69afc5b8a8d8924aaf7773a1f9e5 (patch) | |
tree | d982d41949fe1be747f180c66c4eadf51ca1fe47 /test/with_dummyserver/test_socketlevel.py | |
parent | 73a7ffce6173da62f731b2f529eb7bd9c5979871 (diff) | |
download | urllib3-68d17f4f12dc69afc5b8a8d8924aaf7773a1f9e5.tar.gz |
Add support for configuring header combining with HTTPHeaderDict
Co-authored-by: Seth Michael Larson <sethmichaellarson@gmail.com>
Diffstat (limited to 'test/with_dummyserver/test_socketlevel.py')
-rw-r--r-- | test/with_dummyserver/test_socketlevel.py | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/test/with_dummyserver/test_socketlevel.py b/test/with_dummyserver/test_socketlevel.py index 4074af83..b3c8981a 100644 --- a/test/with_dummyserver/test_socketlevel.py +++ b/test/with_dummyserver/test_socketlevel.py @@ -1643,6 +1643,75 @@ class TestHeaders(SocketDummyServerTestCase): ] assert expected_response_headers == actual_response_headers + @pytest.mark.parametrize( + "method_type, body_type", + [ + ("GET", None), + ("POST", None), + ("POST", "bytes"), + ("POST", "bytes-io"), + ], + ) + def test_headers_sent_with_add( + self, method_type: str, body_type: Optional[str] + ) -> None: + """ + Confirm that when adding headers with combine=True that we simply append to the + most recent value, rather than create a new header line. + """ + body: Union[None, bytes, io.BytesIO] + if body_type is None: + body = None + elif body_type == "bytes": + body = b"my-body" + elif body_type == "bytes-io": + body = io.BytesIO(b"bytes-io-body") + body.seek(0, 0) + else: + raise ValueError("Unknonw body type") + + buffer: bytes = b"" + + def socket_handler(listener: socket.socket) -> None: + nonlocal buffer + sock = listener.accept()[0] + sock.settimeout(0) + + start = time.time() + while time.time() - start < (LONG_TIMEOUT / 2): + try: + buffer += sock.recv(65536) + except OSError: + continue + + sock.sendall( + b"HTTP/1.1 200 OK\r\n" + b"Server: example.com\r\n" + b"Content-Length: 0\r\n\r\n" + ) + sock.close() + + self._start_server(socket_handler) + + headers = HTTPHeaderDict() + headers.add("A", "1") + headers.add("C", "3") + headers.add("B", "2") + headers.add("B", "3") + headers.add("A", "4", combine=False) + headers.add("C", "5", combine=True) + headers.add("C", "6") + + with HTTPConnectionPool(self.host, self.port, retries=False) as pool: + r = pool.request( + method_type, + "/", + body=body, + headers=headers, + ) + assert r.status == 200 + assert b"A: 1\r\nA: 4\r\nC: 3, 5\r\nC: 6\r\nB: 2\r\nB: 3" in buffer + class TestBrokenHeaders(SocketDummyServerTestCase): def _test_broken_header_parsing( |