comparison 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
comparison
equal deleted inserted replaced
66350:f8ceb6afd7a9 66351:9717153d558d
509 self.assertEqual(result[1], b'HTTP/1.1 200 OK\r\n') 509 self.assertEqual(result[1], b'HTTP/1.1 200 OK\r\n')
510 self.verify_expected_headers(result[2:-1]) 510 self.verify_expected_headers(result[2:-1])
511 self.verify_get_called() 511 self.verify_get_called()
512 self.assertEqual(result[-1], b'<html><body>Data</body></html>\r\n') 512 self.assertEqual(result[-1], b'<html><body>Data</body></html>\r\n')
513 513
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\nbar: 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\nExpect: 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
514 def test_with_continue_rejected(self): 557 def test_with_continue_rejected(self):
515 usual_handler = self.handler # Save to avoid breaking any subsequent tests. 558 usual_handler = self.handler # Save to avoid breaking any subsequent tests.
516 self.handler = RejectingSocketlessRequestHandler() 559 self.handler = RejectingSocketlessRequestHandler()
517 result = self.send_typical_request(b'GET / HTTP/1.1\r\nExpect: 100-continue\r\n\r\n') 560 result = self.send_typical_request(b'GET / HTTP/1.1\r\nExpect: 100-continue\r\n\r\n')
518 self.assertEqual(result[0], b'HTTP/1.1 417 Expectation Failed\r\n') 561 self.assertEqual(result[0], b'HTTP/1.1 417 Expectation Failed\r\n')