diff options
author | Kristján Valur Jónsson <kristjan@ccpgames.com> | 2009-07-12 22:42:08 (GMT) |
---|---|---|
committer | Kristján Valur Jónsson <kristjan@ccpgames.com> | 2009-07-12 22:42:08 (GMT) |
commit | 0369ba2a4a921fc32d611b4bbd5eefe32f3b0f22 (patch) | |
tree | 558d808ec7d191b813b16eae8014db8a42bac2da /Lib | |
parent | 6736530df0d1fa1116e8960ef533b2c2587a8fe1 (diff) | |
download | cpython-0369ba2a4a921fc32d611b4bbd5eefe32f3b0f22.zip cpython-0369ba2a4a921fc32d611b4bbd5eefe32f3b0f22.tar.gz cpython-0369ba2a4a921fc32d611b4bbd5eefe32f3b0f22.tar.bz2 |
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 92b5fe8..f5749c6 100644 --- a/Lib/test/test_xmlrpc.py +++ b/Lib/test/test_xmlrpc.py @@ -352,13 +352,14 @@ def is_unavailable_exception(e): class BaseServerTestCase(unittest.TestCase): requestHandler = None + request_count = 1 def setUp(self): # enable traceback reporting SimpleXMLRPCServer.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 @@ -518,7 +519,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(SimpleXMLRPCServer.SimpleXMLRPCRequestHandler): @@ -527,10 +528,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 @@ -539,6 +541,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. @@ -553,6 +558,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): @@ -880,7 +916,8 @@ def test_main(): xmlrpc_tests = [XMLRPCTestCase, HelperTestCase, DateTimeTestCase, BinaryTestCase, FaultTestCase, TransportSubclassTestCase] 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) |