diff --git a/src/saml2/s_utils.py b/src/saml2/s_utils.py
index c3962c0..2b31ead 100644
--- a/src/saml2/s_utils.py
+++ b/src/saml2/s_utils.py
@@ -236,20 +236,20 @@ def error_status_factory(info):
msg = info.args[0]
except IndexError:
msg = "%s" % info
- status = samlp.Status(
- status_message=samlp.StatusMessage(text=msg),
- status_code=samlp.StatusCode(
- value=samlp.STATUS_RESPONDER,
- status_code=samlp.StatusCode(
- value=exc_val)))
else:
- (errcode, text) = info
- status = samlp.Status(
- status_message=samlp.StatusMessage(text=text),
- status_code=samlp.StatusCode(
- value=samlp.STATUS_RESPONDER,
- status_code=samlp.StatusCode(value=errcode)))
+ (exc_val, msg) = info
+ if msg:
+ status_msg = samlp.StatusMessage(text=msg)
+ else:
+ status_msg = None
+
+ status = samlp.Status(
+ status_message=status_msg,
+ status_code=samlp.StatusCode(
+ value=samlp.STATUS_RESPONDER,
+ status_code=samlp.StatusCode(
+ value=exc_val)))
return status
diff --git a/tests/test_12_s_utils.py b/tests/test_12_s_utils.py
index 3b4c8ab..4e1833f 100644
--- a/tests/test_12_s_utils.py
+++ b/tests/test_12_s_utils.py
@@ -30,8 +30,15 @@ ERROR_STATUS_NO_HEADER = (
'Value="urn:oasis:names:tc:SAML:2.0:status:UnknownPrincipal" '
'/>Error resolving '
'principal')
-ERROR_STATUS = '%s%s' % (XML_HEADER, ERROR_STATUS_NO_HEADER)
+ERROR_STATUS_NO_HEADER_EMPTY = (
+'')
+
+ERROR_STATUS = '%s%s' % (XML_HEADER, ERROR_STATUS_NO_HEADER)
+ERROR_STATUS_EMPTY = '%s%s' % (XML_HEADER, ERROR_STATUS_NO_HEADER_EMPTY)
def _eq(l1, l2):
return set(l1) == set(l2)
@@ -89,6 +96,18 @@ def test_status_from_exception():
assert status_text in (ERROR_STATUS_NO_HEADER, ERROR_STATUS)
+def test_status_from_tuple():
+ stat = utils.error_status_factory((samlp.STATUS_UNKNOWN_PRINCIPAL, 'Error resolving principal'))
+ status_text = "%s" % stat
+ assert status_text == ERROR_STATUS
+
+
+def test_status_from_tuple_empty_message():
+ stat = utils.error_status_factory((samlp.STATUS_UNKNOWN_PRINCIPAL, None))
+ status_text = "%s" % stat
+ assert status_text == ERROR_STATUS_EMPTY
+
+
def test_attribute_sn():
attr = utils.do_attributes({"surName": ("Jeter", "")})
assert len(attr) == 1