class BaseHTTPRequestHandlerTestCase(unittest.TestCase): """Test the functionaility of the BaseHTTPServer. Currently, only the support for the Expect 100-continue header is tested. """ def setUp (self): self.handler = SocketlessRequestHandler() def send_typical_request(self, message): input = StringIO(message) output = StringIO() self.handler.rfile = input self.handler.wfile = output self.handler.handle_one_request() self.assertTrue(self.handler.get_called) output.seek(0) return output.readlines() def verify_expected_headers(self, headers): for fieldName in 'Server: ', 'Date: ', 'Content-Type: ': self.assertEqual(sum(h.startswith(fieldName) for h in headers), 1) def test_http_1_1(self): result = self.send_typical_request('GET / HTTP/1.1\r\n\r\n') self.assertEqual(result[0], 'HTTP/1.1 200 OK\r\n') self.verify_expected_headers(result[1:-1]) self.assertEqual(result[-1], 'Data\r\n') def test_http_1_0(self): result = self.send_typical_request('GET / HTTP/1.0\r\n\r\n') self.assertEqual(result[0], 'HTTP/1.1 200 OK\r\n') self.verify_expected_headers(result[1:-1]) self.assertEqual(result[-1], 'Data\r\n') def test_http_0_9(self): result = self.send_typical_request('GET / HTTP/0.9\r\n\r\n') self.assertEqual(len(result), 1) self.assertEqual(result[0], 'Data\r\n') def test_with_continue_1_0(self): result = self.send_typical_request('GET / HTTP/1.0\r\nExpect: 100-continue\r\n\r\n') self.assertEqual(result[0], 'HTTP/1.1 200 OK\r\n') self.verify_expected_headers(result[1:-1]) self.assertEqual(result[-1], 'Data\r\n') def test_with_continue_1_1(self): result = self.send_typical_request('GET / HTTP/1.1\r\nExpect: 100-continue\r\n\r\n') self.assertEqual(result[0], 'HTTP/1.1 100 Continue\r\n') self.assertEqual(result[1], 'HTTP/1.1 200 OK\r\n') self.verify_expected_headers(result[2:-1]) self.assertEqual(result[-1], 'Data\r\n') def test_with_continue_rejected(self): usual_handler = self.handler # Save to avoid breaking any subsequent tests. self.handler = RejectingSocketlessRequestHandler() result = self.send_typical_request('GET / HTTP/1.1\r\nExpect: 100-continue\r\n\r\n') self.assertEqual(result[0], 'HTTP/1.1 417 Expectation Failed\r\n') self.verify_expected_headers(result[1:-1]) self.assertEqual(sum(r == 'Connection: close\r\n' for r in result[1:-1]), 1) self.handler = usual_handler # Restore to avoid breaking any subsequent tests.