summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorKristján Valur Jónsson <kristjan@ccpgames.com>2009-07-12 22:42:08 (GMT)
committerKristján Valur Jónsson <kristjan@ccpgames.com>2009-07-12 22:42:08 (GMT)
commit0369ba2a4a921fc32d611b4bbd5eefe32f3b0f22 (patch)
tree558d808ec7d191b813b16eae8014db8a42bac2da /Lib
parent6736530df0d1fa1116e8960ef533b2c2587a8fe1 (diff)
downloadcpython-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.py45
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)