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]
This commit is contained in:
Facundo Batista 2007-08-21 00:16:21 +00:00
parent 54ec61ea6e
commit c65a5f1b14

View file

@ -352,38 +352,58 @@ def tearDown(self):
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 @@ def test_basic(self):
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