Fix bug in MetadataStore.extension().

Continue with the next metadata source if the entity id or the expected
type (SP or IDP) SSO descriptor is not found in the current metadata
source instead of prematurely returning.
This commit is contained in:
Rebecka Gulliksson
2016-09-15 13:14:46 +02:00
parent fd7a4f694b
commit c8d2705e47
2 changed files with 15 additions and 4 deletions

View File

@@ -992,10 +992,7 @@ class MetadataStore(MetaData):
try: try:
srvs = _md[entity_id][typ] srvs = _md[entity_id][typ]
except KeyError: except KeyError:
return None continue
if not srvs:
return srvs
res = [] res = []
for srv in srvs: for srv in srvs:
@@ -1005,6 +1002,8 @@ class MetadataStore(MetaData):
res.append(elem) res.append(elem)
return res return res
return None
def ext_service(self, entity_id, typ, service, binding=None): def ext_service(self, entity_id, typ, service, binding=None):
known_entity = False known_entity = False
for key, _md in self.metadata.items(): for key, _md in self.metadata.items():

View File

@@ -2,6 +2,7 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import datetime import datetime
import re import re
from collections import OrderedDict
from future.backports.urllib.parse import quote_plus from future.backports.urllib.parse import quote_plus
@@ -455,5 +456,16 @@ def test_metadata_extension_algsupport():
mdf = mds.metadata[full_path("uu.xml")] mdf = mds.metadata[full_path("uu.xml")]
assert mds assert mds
def test_extension():
mds = MetadataStore(ATTRCONV, None)
# use ordered dict to force expected entity to be last
metadata = OrderedDict()
metadata["1"] = {"entity1": {}}
metadata["2"] = {"entity2": {"idpsso_descriptor": [{"extensions": {"extension_elements": [{"__class__": "test"}]}}]}}
mds.metadata = metadata
assert mds.extension("entity2", "idpsso_descriptor", "test")
if __name__ == "__main__": if __name__ == "__main__":
test_metadata_extension_algsupport() test_metadata_extension_algsupport()