Mercurial > cpython-lru_cache-weakref
diff Lib/test/test_httpservers.py @ 66351:9717153d558d
Fix issue3709 - BaseHTTPRequestHandler will buffer the headers and write only on end_headers call.
| author | Senthil Kumaran <orsenthil@gmail.com> |
|---|---|
| date | Sun, 21 Nov 2010 14:36:14 +0000 |
| parents | 211858723b8c |
| children | 9a2058309c1a |
line wrap: on
line diff
--- a/Lib/test/test_httpservers.py Sun Nov 21 13:56:42 2010 +0000 +++ b/Lib/test/test_httpservers.py Sun Nov 21 14:36:14 2010 +0000 @@ -511,6 +511,49 @@ self.verify_get_called() self.assertEqual(result[-1], b'<html><body>Data</body></html>\r\n') + def test_header_buffering(self): + + def _readAndReseek(f): + pos = f.tell() + f.seek(0) + data = f.read() + f.seek(pos) + return data + + input = BytesIO(b'GET / HTTP/1.1\r\n\r\n') + output = BytesIO() + self.handler.rfile = input + self.handler.wfile = output + self.handler.request_version = 'HTTP/1.1' + + self.handler.send_header('Foo', 'foo') + self.handler.send_header('bar', 'bar') + self.assertEqual(_readAndReseek(output), b'') + self.handler.end_headers() + self.assertEqual(_readAndReseek(output), + b'Foo: foo\r\nbar: bar\r\n\r\n') + + def test_header_unbuffered_when_continue(self): + + def _readAndReseek(f): + pos = f.tell() + f.seek(0) + data = f.read() + f.seek(pos) + return data + + input = BytesIO(b'GET / HTTP/1.1\r\nExpect: 100-continue\r\n\r\n') + output = BytesIO() + self.handler.rfile = input + self.handler.wfile = output + self.handler.request_version = 'HTTP/1.1' + + self.handler.handle_one_request() + self.assertNotEqual(_readAndReseek(output), b'') + result = _readAndReseek(output).split(b'\r\n') + self.assertEqual(result[0], b'HTTP/1.1 100 Continue') + self.assertEqual(result[1], b'HTTP/1.1 200 OK') + def test_with_continue_rejected(self): usual_handler = self.handler # Save to avoid breaking any subsequent tests. self.handler = RejectingSocketlessRequestHandler()
