From 630b8f1ad699db858b2f4491f03bf8ffaa6b8b07 Mon Sep 17 00:00:00 2001 From: Roland Hedberg Date: Wed, 13 Oct 2010 13:34:01 +0200 Subject: [PATCH] Added Population class tests --- tests/test_34_population.py | 165 ++++++++++++++++++++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100644 tests/test_34_population.py diff --git a/tests/test_34_population.py b/tests/test_34_population.py new file mode 100644 index 0000000..9e03f14 --- /dev/null +++ b/tests/test_34_population.py @@ -0,0 +1,165 @@ +#!/usr/bin/env python + +from saml2.population import Population +from saml2.time_util import in_a_while + +IDP_ONE = "urn:mace:example.com:saml:one:idp" +IDP_OTHER = "urn:mace:example.com:saml:other:idp" + +def _eq(l1, l2): + return set(l1) == set(l2) + +class TestPopulationMemoryBased(): + def setup_class(self): + self.population = Population() + + def test_add_person(self): + session_info = { + "name_id": "123456", + "issuer": IDP_ONE, + "not_on_or_after": in_a_while(minutes=15), + "ava": { + "givenName": "Anders", + "surName": "Andersson", + "mail": "anders.andersson@example.com" + } + } + self.population.add_information_about_person(session_info) + + issuers = self.population.issuers_of_info("123456") + assert issuers == [IDP_ONE] + subjects = self.population.subjects() + assert subjects == ["123456"] + # Are any of the sources gone stale + stales = self.population.stale_sources_for_person("123456") + assert stales == [] + # are any of the possible sources not used or gone stale + possible = [IDP_ONE, IDP_OTHER] + stales = self.population.stale_sources_for_person("123456", possible) + assert stales == [IDP_OTHER] + + (identity, stale) = self.population.get_identity("123456") + assert stale == [] + assert identity == {'mail': 'anders.andersson@example.com', + 'givenName': 'Anders', + 'surName': 'Andersson'} + + info = self.population.get_info_from("123456", IDP_ONE) + assert info.keys() == ["not_on_or_after", "name_id", "ava"] + assert info["name_id"] == '123456' + assert info["ava"] == {'mail': 'anders.andersson@example.com', + 'givenName': 'Anders', + 'surName': 'Andersson'} + + def test_extend_person(self): + session_info = { + "name_id": "123456", + "issuer": IDP_OTHER, + "not_on_or_after": in_a_while(minutes=15), + "ava": { + "eduPersonEntitlement": "Anka" + } + } + + self.population.add_information_about_person(session_info) + + issuers = self.population.issuers_of_info("123456") + assert _eq(issuers, [IDP_ONE, IDP_OTHER]) + subjects = self.population.subjects() + assert subjects == ["123456"] + # Are any of the sources gone stale + stales = self.population.stale_sources_for_person("123456") + assert stales == [] + # are any of the possible sources not used or gone stale + possible = [IDP_ONE, IDP_OTHER] + stales = self.population.stale_sources_for_person("123456", possible) + assert stales == [] + + (identity, stale) = self.population.get_identity("123456") + assert stale == [] + assert identity == {'mail': 'anders.andersson@example.com', + 'givenName': 'Anders', + 'surName': 'Andersson', + "eduPersonEntitlement": "Anka"} + + info = self.population.get_info_from("123456", IDP_OTHER) + assert info.keys() == ["not_on_or_after", "name_id", "ava"] + assert info["name_id"] == '123456' + assert info["ava"] == {"eduPersonEntitlement": "Anka"} + + def test_add_another_person(self): + session_info = { + "name_id": "abcdef", + "issuer": IDP_ONE, + "not_on_or_after": in_a_while(minutes=15), + "ava": { + "givenName": "Bertil", + "surName": "Bertilsson", + "mail": "bertil.bertilsson@example.com" + } + } + self.population.add_information_about_person(session_info) + + issuers = self.population.issuers_of_info("abcdef") + assert issuers == [IDP_ONE] + subjects = self.population.subjects() + assert _eq(subjects, ["123456", "abcdef"]) + + stales = self.population.stale_sources_for_person("abcdef") + assert stales == [] + # are any of the possible sources not used or gone stale + possible = [IDP_ONE, IDP_OTHER] + stales = self.population.stale_sources_for_person("abcdef", possible) + assert stales == [IDP_OTHER] + + (identity, stale) = self.population.get_identity("abcdef") + assert stale == [] + assert identity == {"givenName": "Bertil", + "surName": "Bertilsson", + "mail": "bertil.bertilsson@example.com" + } + + info = self.population.get_info_from("abcdef", IDP_ONE) + assert info.keys() == ["not_on_or_after", "name_id", "ava"] + assert info["name_id"] == 'abcdef' + assert info["ava"] == {"givenName": "Bertil", + "surName": "Bertilsson", + "mail": "bertil.bertilsson@example.com" + } + + def test_modify_person(self): + session_info = { + "name_id": "123456", + "issuer": IDP_ONE, + "not_on_or_after": in_a_while(minutes=15), + "ava": { + "givenName": "Arne", + "surName": "Andersson", + "mail": "arne.andersson@example.com" + } + } + self.population.add_information_about_person(session_info) + + issuers = self.population.issuers_of_info("123456") + assert _eq(issuers, [IDP_ONE, IDP_OTHER]) + subjects = self.population.subjects() + assert _eq(subjects, ["123456", "abcdef"]) + # Are any of the sources gone stale + stales = self.population.stale_sources_for_person("123456") + assert stales == [] + # are any of the possible sources not used or gone stale + possible = [IDP_ONE, IDP_OTHER] + stales = self.population.stale_sources_for_person("123456", possible) + assert stales == [] + + (identity, stale) = self.population.get_identity("123456") + assert stale == [] + assert identity == {'mail': 'arne.andersson@example.com', + 'givenName': 'Arne', + 'surName': 'Andersson', + "eduPersonEntitlement": "Anka"} + + info = self.population.get_info_from("123456", IDP_OTHER) + assert info.keys() == ["not_on_or_after", "name_id", "ava"] + assert info["name_id"] == '123456' + assert info["ava"] == {"eduPersonEntitlement": "Anka"} \ No newline at end of file