From ef6f844be9cb08c437afd4bfa55001afc1281605 Mon Sep 17 00:00:00 2001 From: Roland Hedberg Date: Sat, 31 Oct 2009 17:34:48 +0100 Subject: [PATCH] tests for server api --- tests/test_server.py | 142 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 tests/test_server.py diff --git a/tests/test_server.py b/tests/test_server.py new file mode 100644 index 0000000..c24f01d --- /dev/null +++ b/tests/test_server.py @@ -0,0 +1,142 @@ +#!/usr/bin/env python + +from saml2.server import Server +from saml2 import samlp, saml +from saml2.utils import make_instance + +SUCCESS_STATUS = """ +""" + +ERROR_STATUS = """ +Error resolving principal""" + +def _eq(l1,l2): + return set(l1) == set(l2) + +class TestServer(): + def setup_class(self): + self.server = Server({},"tests/server.config") + + def test_success_status(self): + stat = self.server._status(samlp.STATUS_SUCCESS) + status_text = "%s" % make_instance( samlp.Status, stat ) + assert status_text == SUCCESS_STATUS + + def test_error_status(self): + stat = self.server._status(samlp.STATUS_RESPONDER, + message="Error resolving principal", + status_code=self.server._status(samlp.STATUS_UNKNOWN_PRINCIPAL)) + + status_text = "%s" % make_instance( samlp.Status, stat ) + assert status_text == ERROR_STATUS + + def test_issuer(self): + issuer = make_instance( saml.Issuer, self.server._issuer()) + assert isinstance(issuer, saml.Issuer) + assert _eq(issuer.keyswv(), ["text","format"]) + assert issuer.format == saml.NAMEID_FORMAT_ENTITY + assert issuer.text == self.server.conf["entityid"] + + def test_audience(self): + aud_restr = make_instance( saml.AudienceRestriction, + self.server._audience_restriction("urn:foo:bar")) + + assert aud_restr.keyswv() == ["audience"] + assert aud_restr.audience.text == "urn:foo:bar" + + def test_conditions(self): + conds_dict = self.server._conditions("2009-10-30T07:58:10.852Z", + "2009-10-30T08:03:10.852Z", + self.server._audience_restriction("urn:foo:bar")) + + conditions = make_instance(saml.Conditions, conds_dict) + assert _eq(conditions.keyswv(), ["not_before", "not_on_or_after", + "audience_restriction"]) + assert conditions.not_before == "2009-10-30T07:58:10.852Z" + assert conditions.not_on_or_after == "2009-10-30T08:03:10.852Z" + assert conditions.audience_restriction[0].audience.text == "urn:foo:bar" + + def test_value_1(self): + #FriendlyName="givenName" Name="urn:oid:2.5.4.42" + # NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri" + adict = self.server._attribute(name="urn:oid:2.5.4.42", + name_format=saml.NAME_FORMAT_URI) + attribute = make_instance(saml.Attribute, adict) + assert _eq(attribute.keyswv(),["name","name_format"]) + assert attribute.name == "urn:oid:2.5.4.42" + assert attribute.name_format == saml.NAME_FORMAT_URI + + def test_value_2(self): + adict = self.server._attribute(name="urn:oid:2.5.4.42", + name_format=saml.NAME_FORMAT_URI, + friendly_name="givenName") + attribute = make_instance(saml.Attribute, adict) + assert _eq(attribute.keyswv(),["name","name_format","friendly_name"]) + assert attribute.name == "urn:oid:2.5.4.42" + assert attribute.name_format == saml.NAME_FORMAT_URI + assert attribute.friendly_name == "givenName" + + def test_value_3(self): + adict = self.server._attribute("Derek",name="urn:oid:2.5.4.42", + name_format=saml.NAME_FORMAT_URI, + friendly_name="givenName") + attribute = make_instance(saml.Attribute, adict) + assert _eq(attribute.keyswv(),["name", "name_format", + "friendly_name", "attribute_value"]) + assert attribute.name == "urn:oid:2.5.4.42" + assert attribute.name_format == saml.NAME_FORMAT_URI + assert attribute.friendly_name == "givenName" + assert len(attribute.attribute_value) == 1 + assert attribute.attribute_value[0].text == "Derek" + + def test_value_4(self): + adict = self.server._attribute("Derek", + friendly_name="givenName") + attribute = make_instance(saml.Attribute, adict) + assert _eq(attribute.keyswv(),["friendly_name", "attribute_value"]) + assert attribute.friendly_name == "givenName" + assert len(attribute.attribute_value) == 1 + assert attribute.attribute_value[0].text == "Derek" + + def test_attribute_statement(self): + asdict = self.server._attribute_statement([ + self.server._attribute("Derek", + friendly_name="givenName"), + self.server._attribute("Jeter", + friendly_name="surName"), + ]) + attribute_statement = make_instance(saml.AttributeStatement,asdict) + assert len(attribute_statement.attribute) == 2 + attr0 = attribute_statement.attribute[0] + attr1 = attribute_statement.attribute[1] + if attr0.attribute_value[0].text == "Derek": + assert attr0.friendly_name == "givenName" + assert attr1.friendly_name == "surName" + assert attr1.attribute_value[0].text == "Jeter" + else: + assert attr1.friendly_name == "givenName" + assert attr1.attribute_value[0].text == "Derek" + assert attr0.friendly_name == "surName" + assert attr0.attribute_value[0].text == "Jeter" + + def test_subject(self): + adict = self.server._subject("_aaa", + name_id=saml.NAMEID_FORMAT_TRANSIENT) + subject = make_instance(saml.Subject, adict) + assert _eq(subject.keyswv(),["text", "name_id"]) + assert subject.text == "_aaa" + assert subject.name_id.text == saml.NAMEID_FORMAT_TRANSIENT + + def test_assertion(self): + tmp = self.server._assertion( + subject= self.server._subject("_aaa", + name_id=saml.NAMEID_FORMAT_TRANSIENT), + attribute_statement = self.server._attribute_statement([ + self.server._attribute("Derek", friendly_name="givenName"), + self.server._attribute("Jeter", friendly_name="surName"), + ]) + ) + + assertion = make_instance(saml.Assertion, tmp) + assert _eq(assertion.keyswv(),['attribute_statement', 'issuer', 'id', + 'subject', 'issue_instant', 'version']) \ No newline at end of file