summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_xmlrpc.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/test_xmlrpc.py')
-rw-r--r--Lib/test/test_xmlrpc.py31
1 files changed, 19 insertions, 12 deletions
diff --git a/Lib/test/test_xmlrpc.py b/Lib/test/test_xmlrpc.py
index 28cbf0c..092be51 100644
--- a/Lib/test/test_xmlrpc.py
+++ b/Lib/test/test_xmlrpc.py
@@ -312,10 +312,17 @@ def is_unavailable_exception(e):
given by operations on non-blocking sockets.'''
# sometimes we get a -1 error code and/or empty headers
- if e.errcode == -1 or e.headers is None:
+ try:
+ if e.errcode == -1 or e.headers is None:
+ return True
+ exc_mess = e.headers.get('X-exception')
+ except AttributeError:
+ # Ignore socket.errors here.
+ exc_mess = str(e)
+
+ if exc_mess and 'temporarily unavailable' in exc_mess.lower():
return True
-
class SimpleServerTestCase(unittest.TestCase):
def setUp(self):
# enable traceback reporting
@@ -349,7 +356,7 @@ class SimpleServerTestCase(unittest.TestCase):
# ignore failures due to non-blocking socket 'unavailable' errors
if not is_unavailable_exception(e):
# protocol error; provide additional information in test output
- self.fail("%s\n%s" % (e, e.headers))
+ self.fail("%s\n%s" % (e, getattr(e, "headers", "")))
# [ch] The test 404 is causing lots of false alarms.
def XXXtest_404(self):
@@ -375,7 +382,7 @@ class SimpleServerTestCase(unittest.TestCase):
# ignore failures due to non-blocking socket 'unavailable' errors
if not is_unavailable_exception(e):
# protocol error; provide additional information in test output
- self.fail("%s\n%s" % (e, e.headers))
+ self.fail("%s\n%s" % (e, getattr(e, "headers", "")))
def test_introspection2(self):
@@ -388,7 +395,7 @@ class SimpleServerTestCase(unittest.TestCase):
# ignore failures due to non-blocking socket 'unavailable' errors
if not is_unavailable_exception(e):
# protocol error; provide additional information in test output
- self.fail("%s\n%s" % (e, e.headers))
+ self.fail("%s\n%s" % (e, getattr(e, "headers", "")))
def test_introspection3(self):
try:
@@ -400,7 +407,7 @@ class SimpleServerTestCase(unittest.TestCase):
# ignore failures due to non-blocking socket 'unavailable' errors
if not is_unavailable_exception(e):
# protocol error; provide additional information in test output
- self.fail("%s\n%s" % (e, e.headers))
+ self.fail("%s\n%s" % (e, getattr(e, "headers", "")))
def test_introspection4(self):
# the SimpleXMLRPCServer doesn't support signatures, but
@@ -413,7 +420,7 @@ class SimpleServerTestCase(unittest.TestCase):
# ignore failures due to non-blocking socket 'unavailable' errors
if not is_unavailable_exception(e):
# protocol error; provide additional information in test output
- self.fail("%s\n%s" % (e, e.headers))
+ self.fail("%s\n%s" % (e, getattr(e, "headers", "")))
def test_multicall(self):
try:
@@ -430,7 +437,7 @@ class SimpleServerTestCase(unittest.TestCase):
# ignore failures due to non-blocking socket 'unavailable' errors
if not is_unavailable_exception(e):
# protocol error; provide additional information in test output
- self.fail("%s\n%s" % (e, e.headers))
+ self.fail("%s\n%s" % (e, getattr(e, "headers", "")))
def test_non_existing_multicall(self):
try:
@@ -451,7 +458,7 @@ class SimpleServerTestCase(unittest.TestCase):
# ignore failures due to non-blocking socket 'unavailable' errors
if not is_unavailable_exception(e):
# protocol error; provide additional information in test output
- self.fail("%s\n%s" % (e, e.headers))
+ self.fail("%s\n%s" % (e, getattr(e, "headers", "")))
# This is a contrived way to make a failure occur on the server side
# in order to test the _send_traceback_header flag on the server
@@ -498,7 +505,7 @@ class FailingServerTestCase(unittest.TestCase):
# ignore failures due to non-blocking socket 'unavailable' errors
if not is_unavailable_exception(e):
# protocol error; provide additional information in test output
- self.fail("%s\n%s" % (e, e.headers))
+ self.fail("%s\n%s" % (e, getattr(e, "headers", "")))
def test_fail_no_info(self):
# use the broken message class
@@ -509,7 +516,7 @@ class FailingServerTestCase(unittest.TestCase):
p.pow(6,8)
except (xmlrpclib.ProtocolError, socket.error) as e:
# ignore failures due to non-blocking socket 'unavailable' errors
- if not is_unavailable_exception(e):
+ if not is_unavailable_exception(e) and hasattr(e, "headers"):
# The two server-side error headers shouldn't be sent back in this case
self.assertTrue(e.headers.get("X-exception") is None)
self.assertTrue(e.headers.get("X-traceback") is None)
@@ -529,7 +536,7 @@ class FailingServerTestCase(unittest.TestCase):
p.pow(6,8)
except (xmlrpclib.ProtocolError, socket.error) as e:
# ignore failures due to non-blocking socket 'unavailable' errors
- if not is_unavailable_exception(e):
+ if not is_unavailable_exception(e) and hasattr(e, "headers"):
# We should get error info in the response
expected_err = "invalid literal for int() with base 10: 'I am broken'"
self.assertEqual(e.headers.get("x-exception"), expected_err)