diff options
author | Kristján Valur Jónsson <kristjan@ccpgames.com> | 2009-07-12 22:45:18 (GMT) |
---|---|---|
committer | Kristján Valur Jónsson <kristjan@ccpgames.com> | 2009-07-12 22:45:18 (GMT) |
commit | f6087ca999b42aab51b44fce7b72040a07a7dfb3 (patch) | |
tree | 7ad74d4fb044179ea9a432c99c30bc9bf4c22515 /Lib | |
parent | 6db9470efd57241057ef35da004d294ddb183a60 (diff) | |
download | cpython-f6087ca999b42aab51b44fce7b72040a07a7dfb3.zip cpython-f6087ca999b42aab51b44fce7b72040a07a7dfb3.tar.gz cpython-f6087ca999b42aab51b44fce7b72040a07a7dfb3.tar.bz2 |
merging revision 73986 from trunk:
http://bugs.python.org/issue6267
Add more tests for the xlmrpc.ServerProxy
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/test/test_xmlrpc.py | 45 |
1 files changed, 41 insertions, 4 deletions
diff --git a/Lib/test/test_xmlrpc.py b/Lib/test/test_xmlrpc.py index 8461628..fab000d 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) |