From: Kristján Valur Jónsson Date: Sun, 12 Jul 2009 22:45:18 +0000 (+0000) Subject: merging revision 73986 from trunk: X-Git-Tag: v3.2a1~2840 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f6087ca999b42aab51b44fce7b72040a07a7dfb3;p=python merging revision 73986 from trunk: http://bugs.python.org/issue6267 Add more tests for the xlmrpc.ServerProxy --- diff --git a/Lib/test/test_xmlrpc.py b/Lib/test/test_xmlrpc.py index 8461628155..fab000d31d 100644 --- a/Lib/test/test_xmlrpc.py +++ b/Lib/test/test_xmlrpc.py @@ -322,13 +322,14 @@ def is_unavailable_exception(e): class BaseServerTestCase(unittest.TestCase): requestHandler = None + request_count = 1 def setUp(self): # enable traceback reporting xmlrpc.server.SimpleXMLRPCServer._send_traceback_header = True self.evt = threading.Event() # start server thread to handle requests - serv_args = (self.evt, 1, self.requestHandler) + serv_args = (self.evt, self.request_count, self.requestHandler) threading.Thread(target=http_server, args=serv_args).start() # wait for the server to be ready @@ -484,7 +485,7 @@ class SimpleServerTestCase(BaseServerTestCase): #A test case that verifies that a server using the HTTP/1.1 keep-alive mechanism #does indeed serve subsequent requests on the same connection -class KeepaliveServerTestCase(BaseServerTestCase): +class BaseKeepaliveServerTestCase(BaseServerTestCase): #a request handler that supports keep-alive and logs requests into a #class variable class RequestHandler(xmlrpc.server.SimpleXMLRPCRequestHandler): @@ -493,10 +494,11 @@ class KeepaliveServerTestCase(BaseServerTestCase): myRequests = [] def handle(self): self.myRequests.append([]) + self.reqidx = len(self.myRequests)-1 return self.parentClass.handle(self) def handle_one_request(self): result = self.parentClass.handle_one_request(self) - self.myRequests[-1].append(self.raw_requestline) + self.myRequests[self.reqidx].append(self.raw_requestline) return result requestHandler = RequestHandler @@ -505,6 +507,9 @@ class KeepaliveServerTestCase(BaseServerTestCase): self.RequestHandler.myRequests = [] return BaseServerTestCase.setUp(self) +#A test case that verifies that a server using the HTTP/1.1 keep-alive mechanism +#does indeed serve subsequent requests on the same connection +class KeepaliveServerTestCase1(BaseKeepaliveServerTestCase): def test_two(self): p = xmlrpclib.ServerProxy(URL) #do three requests. @@ -519,6 +524,37 @@ class KeepaliveServerTestCase(BaseServerTestCase): #due to thread scheduling) self.assertGreaterEqual(len(self.RequestHandler.myRequests[-1]), 2) +#test special attribute access on the serverproxy, through the __call__ +#function. +class KeepaliveServerTestCase2(BaseKeepaliveServerTestCase): + #ask for two keepalive requests to be handled. + request_count=2 + + def test_close(self): + p = xmlrpclib.ServerProxy(URL) + #do some requests with close. + self.assertEqual(p.pow(6,8), 6**8) + self.assertEqual(p.pow(6,8), 6**8) + self.assertEqual(p.pow(6,8), 6**8) + p("close")() #this should trigger a new keep-alive request + self.assertEqual(p.pow(6,8), 6**8) + self.assertEqual(p.pow(6,8), 6**8) + self.assertEqual(p.pow(6,8), 6**8) + + #they should have all been two request handlers, each having logged at least + #two complete requests + self.assertEqual(len(self.RequestHandler.myRequests), 2) + self.assertGreaterEqual(len(self.RequestHandler.myRequests[-1]), 2) + self.assertGreaterEqual(len(self.RequestHandler.myRequests[-2]), 2) + + def test_transport(self): + p = xmlrpclib.ServerProxy(URL) + #do some requests with close. + self.assertEqual(p.pow(6,8), 6**8) + p("transport").close() #same as above, really. + self.assertEqual(p.pow(6,8), 6**8) + self.assertEqual(len(self.RequestHandler.myRequests), 2) + #A test case that verifies that gzip encoding works in both directions #(for a request and the response) class GzipServerTestCase(BaseServerTestCase): @@ -761,7 +797,8 @@ def test_main(): xmlrpc_tests = [XMLRPCTestCase, HelperTestCase, DateTimeTestCase, BinaryTestCase, FaultTestCase] xmlrpc_tests.append(SimpleServerTestCase) - xmlrpc_tests.append(KeepaliveServerTestCase) + xmlrpc_tests.append(KeepaliveServerTestCase1) + xmlrpc_tests.append(KeepaliveServerTestCase2) xmlrpc_tests.append(GzipServerTestCase) xmlrpc_tests.append(ServerProxyTestCase) xmlrpc_tests.append(FailingServerTestCase)