Commit f5ee4f46 authored by Facundo Batista's avatar Facundo Batista

Catch ProtocolError exceptions and include the header information in

test output (to make it easier to debug test failures caused by
problems in the server). [GSoC - Alan McIntyre]
parent 75f1d5e1
...@@ -352,38 +352,58 @@ class SimpleServerTestCase(unittest.TestCase): ...@@ -352,38 +352,58 @@ class SimpleServerTestCase(unittest.TestCase):
SimpleXMLRPCServer.SimpleXMLRPCServer._send_traceback_header = False SimpleXMLRPCServer.SimpleXMLRPCServer._send_traceback_header = False
def test_simple1(self): def test_simple1(self):
p = xmlrpclib.ServerProxy('http://localhost:%d' % PORT) try:
self.assertEqual(p.pow(6,8), 6**8) p = xmlrpclib.ServerProxy('http://localhost:%d' % PORT)
self.assertEqual(p.pow(6,8), 6**8)
except xmlrpclib.ProtocolError, e:
# protocol error; provide additional information in test output
self.fail("%s\n%s" % (e, e.headers))
def test_introspection1(self): def test_introspection1(self):
p = xmlrpclib.ServerProxy('http://localhost:%d' % PORT) try:
meth = p.system.listMethods() p = xmlrpclib.ServerProxy('http://localhost:%d' % PORT)
expected_methods = set(['pow', 'div', 'add', 'system.listMethods', meth = p.system.listMethods()
'system.methodHelp', 'system.methodSignature', 'system.multicall']) expected_methods = set(['pow', 'div', 'add', 'system.listMethods',
self.assertEqual(set(meth), expected_methods) 'system.methodHelp', 'system.methodSignature', 'system.multicall'])
self.assertEqual(set(meth), expected_methods)
except xmlrpclib.ProtocolError, e:
# protocol error; provide additional information in test output
self.fail("%s\n%s" % (e, e.headers))
def test_introspection2(self): def test_introspection2(self):
p = xmlrpclib.ServerProxy('http://localhost:%d' % PORT) try:
divhelp = p.system.methodHelp('div') p = xmlrpclib.ServerProxy('http://localhost:%d' % PORT)
self.assertEqual(divhelp, 'This is the div function') divhelp = p.system.methodHelp('div')
self.assertEqual(divhelp, 'This is the div function')
except xmlrpclib.ProtocolError, e:
# protocol error; provide additional information in test output
self.fail("%s\n%s" % (e, e.headers))
def test_introspection3(self): def test_introspection3(self):
# the SimpleXMLRPCServer doesn't support signatures, but # the SimpleXMLRPCServer doesn't support signatures, but
# at least check that we can try # at least check that we can try
p = xmlrpclib.ServerProxy('http://localhost:%d' % PORT) try:
divsig = p.system.methodSignature('div') p = xmlrpclib.ServerProxy('http://localhost:%d' % PORT)
self.assertEqual(divsig, 'signatures not supported') divsig = p.system.methodSignature('div')
self.assertEqual(divsig, 'signatures not supported')
except xmlrpclib.ProtocolError, e:
# protocol error; provide additional information in test output
self.fail("%s\n%s" % (e, e.headers))
def test_multicall(self): def test_multicall(self):
p = xmlrpclib.ServerProxy('http://localhost:%d' % PORT) try:
multicall = xmlrpclib.MultiCall(p) p = xmlrpclib.ServerProxy('http://localhost:%d' % PORT)
multicall.add(2,3) multicall = xmlrpclib.MultiCall(p)
multicall.pow(6,8) multicall.add(2,3)
multicall.div(127,42) multicall.pow(6,8)
add_result, pow_result, div_result = multicall() multicall.div(127,42)
self.assertEqual(add_result, 2+3) add_result, pow_result, div_result = multicall()
self.assertEqual(pow_result, 6**8) self.assertEqual(add_result, 2+3)
self.assertEqual(div_result, 127//42) self.assertEqual(pow_result, 6**8)
self.assertEqual(div_result, 127//42)
except xmlrpclib.ProtocolError, e:
# protocol error; provide additional information in test output
self.fail("%s\n%s" % (e, e.headers))
# This is a contrived way to make a failure occur on the server side # This is a contrived way to make a failure occur on the server side
...@@ -424,9 +444,16 @@ class FailingServerTestCase(unittest.TestCase): ...@@ -424,9 +444,16 @@ class FailingServerTestCase(unittest.TestCase):
flagval = SimpleXMLRPCServer.SimpleXMLRPCServer._send_traceback_header flagval = SimpleXMLRPCServer.SimpleXMLRPCServer._send_traceback_header
self.assertEqual(flagval, False) self.assertEqual(flagval, False)
# test a call that won't fail just as a smoke test # enable traceback reporting
p = xmlrpclib.ServerProxy('http://localhost:%d' % PORT) SimpleXMLRPCServer.SimpleXMLRPCServer._send_traceback_header = True
self.assertEqual(p.pow(6,8), 6**8)
# test a call that shouldn't fail just as a smoke test
try:
p = xmlrpclib.ServerProxy('http://localhost:%d' % PORT)
self.assertEqual(p.pow(6,8), 6**8)
except xmlrpclib.ProtocolError, e:
# protocol error; provide additional information in test output
self.fail("%s\n%s" % (e, e.headers))
def test_fail_no_info(self): def test_fail_no_info(self):
# use the broken message class # use the broken message class
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment