@@ -511,6 +511,49 @@ def test_with_continue_1_1(self):
511511 self .verify_get_called ()
512512 self .assertEqual (result [- 1 ], b'<html><body>Data</body></html>\r \n ' )
513513
514+ def test_header_buffering (self ):
515+
516+ def _readAndReseek (f ):
517+ pos = f .tell ()
518+ f .seek (0 )
519+ data = f .read ()
520+ f .seek (pos )
521+ return data
522+
523+ input = BytesIO (b'GET / HTTP/1.1\r \n \r \n ' )
524+ output = BytesIO ()
525+ self .handler .rfile = input
526+ self .handler .wfile = output
527+ self .handler .request_version = 'HTTP/1.1'
528+
529+ self .handler .send_header ('Foo' , 'foo' )
530+ self .handler .send_header ('bar' , 'bar' )
531+ self .assertEqual (_readAndReseek (output ), b'' )
532+ self .handler .end_headers ()
533+ self .assertEqual (_readAndReseek (output ),
534+ b'Foo: foo\r \n bar: bar\r \n \r \n ' )
535+
536+ def test_header_unbuffered_when_continue (self ):
537+
538+ def _readAndReseek (f ):
539+ pos = f .tell ()
540+ f .seek (0 )
541+ data = f .read ()
542+ f .seek (pos )
543+ return data
544+
545+ input = BytesIO (b'GET / HTTP/1.1\r \n Expect: 100-continue\r \n \r \n ' )
546+ output = BytesIO ()
547+ self .handler .rfile = input
548+ self .handler .wfile = output
549+ self .handler .request_version = 'HTTP/1.1'
550+
551+ self .handler .handle_one_request ()
552+ self .assertNotEqual (_readAndReseek (output ), b'' )
553+ result = _readAndReseek (output ).split (b'\r \n ' )
554+ self .assertEqual (result [0 ], b'HTTP/1.1 100 Continue' )
555+ self .assertEqual (result [1 ], b'HTTP/1.1 200 OK' )
556+
514557 def test_with_continue_rejected (self ):
515558 usual_handler = self .handler # Save to avoid breaking any subsequent tests.
516559 self .handler = RejectingSocketlessRequestHandler ()
0 commit comments