]> git.ipfire.org Git - thirdparty/tornado.git/commitdiff
Add multi-line header test
authorWillem de Groot <willem@byte.nl>
Tue, 25 Aug 2015 11:34:52 +0000 (13:34 +0200)
committerWillem de Groot <willem@byte.nl>
Tue, 25 Aug 2015 11:34:52 +0000 (13:34 +0200)
tornado/test/httpclient_test.py

index ecc63e4a49e50f1a685c1ad247978a089c2de8e0..e4325a3c0c1069f3a5ad941c83ef9db1c7c9643e 100644 (file)
@@ -371,6 +371,30 @@ Transfer-Encoding: chunked
                     "response=%r, value=%r, container=%r" %
                     (resp.body, value, container))
 
+    def test_multi_line_headers(self):
+        # Multi-line http headers are rare but rfc-allowed
+        # http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2
+        sock, port = bind_unused_port()
+        with closing(sock):
+            def write_response(stream, request_data):
+                stream.write(b"""\
+HTTP/1.1 200 OK
+X-XSS-Protection: 1;
+\tmode=block
+
+""".replace(b"\n", b"\r\n"), callback=stream.close)
+
+            def accept_callback(conn, address):
+                stream = IOStream(conn, io_loop=self.io_loop)
+                stream.read_until(b"\r\n\r\n",
+                                  functools.partial(write_response, stream))
+            netutil.add_accept_handler(sock, accept_callback, self.io_loop)
+            self.http_client.fetch("http://127.0.0.1:%d/" % port, self.stop)
+            resp = self.wait()
+            resp.rethrow()
+            self.assertEqual(resp.headers['X-XSS-Protection'], b"1; mode=block")
+            self.io_loop.remove_handler(sock.fileno())
+
     def test_304_with_content_length(self):
         # According to the spec 304 responses SHOULD NOT include
         # Content-Length or other entity headers, but some servers do it