[Python-checkins] r85127 - python/branches/release27-maint/Lib/test/test_httpservers.py

senthil.kumaran python-checkins at python.org
Thu Sep 30 08:40:56 CEST 2010


Author: senthil.kumaran
Date: Thu Sep 30 08:40:56 2010
New Revision: 85127

Log:
Added BaseHTTPRequestHandler related tests.



Modified:
   python/branches/release27-maint/Lib/test/test_httpservers.py

Modified: python/branches/release27-maint/Lib/test/test_httpservers.py
==============================================================================
--- python/branches/release27-maint/Lib/test/test_httpservers.py	(original)
+++ python/branches/release27-maint/Lib/test/test_httpservers.py	Thu Sep 30 08:40:56 2010
@@ -11,6 +11,7 @@
 
 import os
 import sys
+import re
 import base64
 import shutil
 import urllib
@@ -18,6 +19,9 @@
 import tempfile
 
 import unittest
+
+from StringIO import StringIO
+
 from test import test_support
 threading = test_support.import_module('threading')
 
@@ -27,6 +31,22 @@
         # don't write log messages to stderr
         pass
 
+class SocketlessRequestHandler(BaseHTTPRequestHandler):
+    def __init__(self):
+        self.get_called = False
+        self.protocol_version = "HTTP/1.1"
+
+    def do_GET(self):
+        self.get_called = True
+        self.send_response(200)
+        self.send_header('Content-Type', 'text/html')
+        self.end_headers()
+        self.wfile.write('<html><body>Data</body></html>\r\n')
+
+    def log_message(self, format, *args):
+        pass
+
+
 
 class TestServerThread(threading.Thread):
     def __init__(self, test_object, request_handler):
@@ -67,6 +87,63 @@
         self.connection.request(method, uri, body, headers)
         return self.connection.getresponse()
 
+class BaseHTTPRequestHandlerTestCase(unittest.TestCase):
+    """Test the functionaility of the BaseHTTPServer focussing on
+    BaseHTTPRequestHandler.
+    """
+
+    HTTPResponseMatch = re.compile('HTTP/1.[0-9]+ 200 OK')
+
+    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()
+        output.seek(0)
+        return output.readlines()
+
+    def verify_get_called(self):
+        self.assertTrue(self.handler.get_called)
+
+    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 verify_http_server_response(self, response):
+        match = self.HTTPResponseMatch.search(response)
+        self.assertTrue(match is not None)
+
+    def test_http_1_1(self):
+        result = self.send_typical_request('GET / HTTP/1.1\r\n\r\n')
+        self.verify_http_server_response(result[0])
+        self.verify_expected_headers(result[1:-1])
+        self.verify_get_called()
+        self.assertEqual(result[-1], '<html><body>Data</body></html>\r\n')
+
+    def test_http_1_0(self):
+        result = self.send_typical_request('GET / HTTP/1.0\r\n\r\n')
+        self.verify_http_server_response(result[0])
+        self.verify_expected_headers(result[1:-1])
+        self.verify_get_called()
+        self.assertEqual(result[-1], '<html><body>Data</body></html>\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], '<html><body>Data</body></html>\r\n')
+        self.verify_get_called()
+
+    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.verify_http_server_response(result[0])
+        self.verify_expected_headers(result[1:-1])
+        self.verify_get_called()
+        self.assertEqual(result[-1], '<html><body>Data</body></html>\r\n')
+
 
 class BaseHTTPServerTestCase(BaseTestCase):
     class request_handler(NoLogRequestHandler, BaseHTTPRequestHandler):
@@ -402,10 +479,11 @@
 def test_main(verbose=None):
     try:
         cwd = os.getcwd()
-        test_support.run_unittest(BaseHTTPServerTestCase,
-                                SimpleHTTPServerTestCase,
-                                CGIHTTPServerTestCase
-                                )
+        test_support.run_unittest(BaseHTTPRequestHandlerTestCase,
+                                  BaseHTTPServerTestCase,
+                                  SimpleHTTPServerTestCase,
+                                  CGIHTTPServerTestCase
+                                 )
     finally:
         os.chdir(cwd)
 


More information about the Python-checkins mailing list