[java-identity-provider] branch master updated: IDP-1555 - Optimize entityID-based predicates in MetadataFilter parsers

Scott Cantor cantor.2 at osu.edu
Wed Feb 19 15:14:56 EST 2020


This is an automated email from the git hooks/post-receive script.

scantor pushed a commit to branch master
in repository java-identity-provider.

View the commit online:
http://git.shibboleth.net/view/?p=java-identity-provider.git;a=commit;h=9b7e5e7a2c0eb547d3419c4bc467cd900c2ed42f

The following commit(s) were added to refs/heads/master by this push:
       new  9b7e5e7   IDP-1555 - Optimize entityID-based predicates in MetadataFilter parsers
9b7e5e7 is described below

commit 9b7e5e7a2c0eb547d3419c4bc467cd900c2ed42f
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Wed Feb 19 15:14:52 2020 -0500

    IDP-1555 - Optimize entityID-based predicates in MetadataFilter parsers
    
    https://issues.shibboleth.net/jira/browse/IDP-1555
---
 .../filter/impl/AlgorithmFilterParser.java         | 49 +++++++++++++++++-----
 .../filter/impl/EntityAttributesFilterParser.java  | 49 +++++++++++++++++-----
 .../filter/impl/NameIDFormatFilterParser.java      | 41 +++++++++++++++---
 .../metadata/filter/AlgorithmFilterParserTest.java | 32 ++++++++------
 .../relyingparty/metadata/filter/algorithm.xml     | 21 +++++++++-
 .../metadata/filter/entityAttributes.xml           |  6 ++-
 .../relyingparty/metadata/filter/nameIDFormat.xml  |  1 +
 7 files changed, 158 insertions(+), 41 deletions(-)

diff --git a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/AlgorithmFilterParser.java b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/AlgorithmFilterParser.java
index cf707ee..34682c1 100644
--- a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/AlgorithmFilterParser.java
+++ b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/AlgorithmFilterParser.java
@@ -44,6 +44,7 @@ import org.springframework.beans.factory.config.RuntimeBeanReference;
 import org.springframework.beans.factory.support.BeanDefinitionBuilder;
 import org.springframework.beans.factory.support.ManagedList;
 import org.springframework.beans.factory.support.ManagedMap;
+import org.springframework.beans.factory.support.ManagedSet;
 import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;
 import org.springframework.beans.factory.xml.ParserContext;
 import org.w3c.dom.Element;
@@ -67,7 +68,7 @@ public class AlgorithmFilterParser extends AbstractSingleBeanDefinitionParser {
         return AlgorithmFilter.class;
     }
 
-// Checkstyle: CyclomaticComplexity OFF
+// Checkstyle: CyclomaticComplexity|MethodLength OFF
     /** {@inheritDoc} */
     @Override protected void doParse(final Element element, final ParserContext parserContext,
             final BeanDefinitionBuilder builder) {
@@ -83,11 +84,36 @@ public class AlgorithmFilterParser extends AbstractSingleBeanDefinitionParser {
         // Accumulate objects to attach as rule values.
         final List<XMLObject> accumulator = new ArrayList<>();
 
+        // Accumulated map of predicates to objects to attach to inject into filter.
         final ManagedMap<Object, ManagedList<XMLObject>> ruleMap = new ManagedMap<>();
 
+        // Acumulation of entityIDs to use in the next automated Predicate.
+        // Interrupting a sequence of <Entity> elements will end the accumulation.
+        ManagedSet<String> entitySet = new ManagedSet<>();
+        
         Element child = ElementSupport.getFirstChildElement(element);
 
         while (child != null) {
+            
+            if (ElementSupport.isElementNamed(child, AbstractMetadataProviderParser.METADATA_NAMESPACE, "Entity")) {
+                // Add to the active entity set.
+                entitySet.add(ElementSupport.getElementContentAsString(child));
+                child = ElementSupport.getNextSiblingElement(child);
+                continue;
+                
+            } else if (!entitySet.isEmpty()) {
+                // "Commit" the current entity set as a single condition against the current accumulator.
+                // Then reset the entity set. Use a new object rather than clearing to ensure no cross-contamination.
+                final BeanDefinitionBuilder entityIdBuilder =
+                        BeanDefinitionBuilder.genericBeanDefinition(EntityIdPredicate.class);
+                entityIdBuilder.addConstructorArgValue(entitySet);
+                final ManagedList<XMLObject> forRule = new ManagedList<>(accumulator.size());
+                forRule.addAll(accumulator);
+                ruleMap.put(entityIdBuilder.getBeanDefinition(), forRule);
+                
+                entitySet = new ManagedSet<>();
+            }
+            
             if (ElementSupport.isElementNamed(child, DigestMethod.DEFAULT_ELEMENT_NAME)) {
                 try {
                     accumulator.add(digestUnmarshaller.unmarshall(child));
@@ -106,14 +132,6 @@ public class AlgorithmFilterParser extends AbstractSingleBeanDefinitionParser {
                 } catch (final UnmarshallingException e) {
                     log.error("Error unmarshalling EncryptionMethod element", e);
                 }
-            } else if (ElementSupport
-                    .isElementNamed(child, AbstractMetadataProviderParser.METADATA_NAMESPACE, "Entity")) {
-                final BeanDefinitionBuilder entityIdBuilder =
-                        BeanDefinitionBuilder.genericBeanDefinition(EntityIdPredicate.class);
-                entityIdBuilder.addConstructorArgValue(ElementSupport.getElementContentAsString(child));
-                final ManagedList<XMLObject> forRule = new ManagedList<>(accumulator.size());
-                forRule.addAll(accumulator);
-                ruleMap.put(entityIdBuilder.getBeanDefinition(), forRule);
             } else if (ElementSupport.isElementNamed(child, AbstractMetadataProviderParser.METADATA_NAMESPACE,
                     "ConditionRef")) {
                 final ManagedList<XMLObject> forRule = new ManagedList<>(accumulator.size());
@@ -126,12 +144,23 @@ public class AlgorithmFilterParser extends AbstractSingleBeanDefinitionParser {
                 ruleMap.put(ScriptTypeBeanParser.parseScriptType(ScriptedPredicate.class, child).getBeanDefinition(),
                         forRule);
             }
+            
             child = ElementSupport.getNextSiblingElement(child);
         }
 
+        // Do a final check and commit for a non-empty entity set.
+        if (!entitySet.isEmpty()) {
+            final BeanDefinitionBuilder entityIdBuilder =
+                    BeanDefinitionBuilder.genericBeanDefinition(EntityIdPredicate.class);
+            entityIdBuilder.addConstructorArgValue(entitySet);
+            final ManagedList<XMLObject> forRule = new ManagedList<>(accumulator.size());
+            forRule.addAll(accumulator);
+            ruleMap.put(entityIdBuilder.getBeanDefinition(), forRule);
+        }
+        
         builder.addPropertyValue("rules", ruleMap);
     }
-// Checkstyle: CyclomaticComplexity ON
+// Checkstyle: CyclomaticComplexity|MethodLength ON
 
     /** {@inheritDoc} */
     @Override protected boolean shouldGenerateId() {
diff --git a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/EntityAttributesFilterParser.java b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/EntityAttributesFilterParser.java
index db6d97a..d69ef89 100644
--- a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/EntityAttributesFilterParser.java
+++ b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/EntityAttributesFilterParser.java
@@ -42,6 +42,7 @@ import org.springframework.beans.factory.config.RuntimeBeanReference;
 import org.springframework.beans.factory.support.BeanDefinitionBuilder;
 import org.springframework.beans.factory.support.ManagedList;
 import org.springframework.beans.factory.support.ManagedMap;
+import org.springframework.beans.factory.support.ManagedSet;
 import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;
 import org.springframework.beans.factory.xml.ParserContext;
 import org.w3c.dom.Element;
@@ -61,7 +62,7 @@ public class EntityAttributesFilterParser extends AbstractSingleBeanDefinitionPa
         return EntityAttributesFilter.class;
     }
 
-// Checkstyle: CyclomaticComplexity OFF
+// Checkstyle: CyclomaticComplexity|MethodLength OFF
     /** {@inheritDoc} */
     @Override protected void doParse(final Element element, final ParserContext parserContext,
             final BeanDefinitionBuilder builder) {
@@ -74,8 +75,13 @@ public class EntityAttributesFilterParser extends AbstractSingleBeanDefinitionPa
         // Accumulate Attribute objects to attach as rule values.
         final List<Attribute> accumulator = new ArrayList<>();
 
+        // Accumulated map of predicates to objects to attach to inject into filter.
         final ManagedMap<Object, ManagedList<Attribute>> ruleMap = new ManagedMap<>();
 
+        // Acumulation of entityIDs to use in the next automated Predicate.
+        // Interrupting a sequence of <Entity> elements will end the accumulation.
+        ManagedSet<String> entitySet = new ManagedSet<>();
+
         Element child = ElementSupport.getFirstChildElement(element);
         
         // Check for Predicate at the top.
@@ -87,10 +93,31 @@ public class EntityAttributesFilterParser extends AbstractSingleBeanDefinitionPa
                 "AttributeFilterScript")) {
             builder.addPropertyValue("attributeFilter",
                     ScriptTypeBeanParser.parseScriptType(ScriptedPredicate.class, child).getBeanDefinition());
+            child = ElementSupport.getNextSiblingElement(child);
         }
         
         // Loop over remaining children.
         while (child != null) {
+            
+            if (ElementSupport.isElementNamed(child, AbstractMetadataProviderParser.METADATA_NAMESPACE, "Entity")) {
+                // Add to the active entity set.
+                entitySet.add(ElementSupport.getElementContentAsString(child));
+                child = ElementSupport.getNextSiblingElement(child);
+                continue;
+                
+            } else if (!entitySet.isEmpty()) {
+                // "Commit" the current entity set as a single condition against the current accumulator.
+                // Then reset the entity set. Use a new object rather than clearing to ensure no cross-contamination.
+                final BeanDefinitionBuilder entityIdBuilder =
+                        BeanDefinitionBuilder.genericBeanDefinition(EntityIdPredicate.class);
+                entityIdBuilder.addConstructorArgValue(entitySet);
+                final ManagedList<Attribute> forRule = new ManagedList<>(accumulator.size());
+                forRule.addAll(accumulator);
+                ruleMap.put(entityIdBuilder.getBeanDefinition(), forRule);
+                
+                entitySet = new ManagedSet<>();
+            }
+            
             if (ElementSupport.isElementNamed(child, Attribute.DEFAULT_ELEMENT_NAME)) {
                 try {
                     final XMLObject attribute = unmarshaller.unmarshall(child);
@@ -100,14 +127,6 @@ public class EntityAttributesFilterParser extends AbstractSingleBeanDefinitionPa
                 } catch (final UnmarshallingException e) {
                     log.error("Error unmarshalling Attribute", e);
                 }
-            } else if (ElementSupport
-                    .isElementNamed(child, AbstractMetadataProviderParser.METADATA_NAMESPACE, "Entity")) {
-                final BeanDefinitionBuilder entityIdBuilder =
-                        BeanDefinitionBuilder.genericBeanDefinition(EntityIdPredicate.class);
-                entityIdBuilder.addConstructorArgValue(ElementSupport.getElementContentAsString(child));
-                final ManagedList<Attribute> forRule = new ManagedList<>(accumulator.size());
-                forRule.addAll(accumulator);
-                ruleMap.put(entityIdBuilder.getBeanDefinition(), forRule);
             } else if (ElementSupport.isElementNamed(child, AbstractMetadataProviderParser.METADATA_NAMESPACE,
                     "ConditionRef")) {
                 final ManagedList<Attribute> forRule = new ManagedList<>(accumulator.size());
@@ -122,10 +141,20 @@ public class EntityAttributesFilterParser extends AbstractSingleBeanDefinitionPa
             }
             child = ElementSupport.getNextSiblingElement(child);
         }
+        
+        // Do a final check and commit for a non-empty entity set.
+        if (!entitySet.isEmpty()) {
+            final BeanDefinitionBuilder entityIdBuilder =
+                    BeanDefinitionBuilder.genericBeanDefinition(EntityIdPredicate.class);
+            entityIdBuilder.addConstructorArgValue(entitySet);
+            final ManagedList<Attribute> forRule = new ManagedList<>(accumulator.size());
+            forRule.addAll(accumulator);
+            ruleMap.put(entityIdBuilder.getBeanDefinition(), forRule);
+        }
 
         builder.addPropertyValue("rules", ruleMap);
     }
-// Checkstyle: CyclomaticComplexity ON
+// Checkstyle: CyclomaticComplexity|MethodLength ON
 
     /** {@inheritDoc} */
     @Override protected boolean shouldGenerateId() {
diff --git a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/NameIDFormatFilterParser.java b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/NameIDFormatFilterParser.java
index ef64138..a2da4ca 100644
--- a/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/NameIDFormatFilterParser.java
+++ b/idp-profile-spring/src/main/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/impl/NameIDFormatFilterParser.java
@@ -37,6 +37,7 @@ import org.springframework.beans.factory.config.RuntimeBeanReference;
 import org.springframework.beans.factory.support.BeanDefinitionBuilder;
 import org.springframework.beans.factory.support.ManagedList;
 import org.springframework.beans.factory.support.ManagedMap;
+import org.springframework.beans.factory.support.ManagedSet;
 import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;
 import org.springframework.beans.factory.xml.ParserContext;
 import org.w3c.dom.Element;
@@ -56,6 +57,7 @@ public class NameIDFormatFilterParser extends AbstractSingleBeanDefinitionParser
         return NameIDFormatFilter.class;
     }
 
+// Checkstyle: MethodLength OFF
     /** {@inheritDoc} */
     @Override protected void doParse(final Element element, final ParserContext parserContext,
             final BeanDefinitionBuilder builder) {
@@ -72,20 +74,37 @@ public class NameIDFormatFilterParser extends AbstractSingleBeanDefinitionParser
         // Accumulate formats to attach as rule values.
         final List<String> accumulator = new ArrayList<>();
 
+        // Accumulated map of predicates to objects to attach to inject into filter.
         final ManagedMap<Object, ManagedList<String>> ruleMap = new ManagedMap<>();
 
+        // Acumulation of entityIDs to use in the next automated Predicate.
+        // Interrupting a sequence of <Entity> elements will end the accumulation.
+        ManagedSet<String> entitySet = new ManagedSet<>();
+
         Element child = ElementSupport.getFirstChildElement(element);
         while (child != null) {
-            if (ElementSupport.isElementNamed(child, AbstractMetadataProviderParser.METADATA_NAMESPACE, "Format")) {
-                accumulator.add(ElementSupport.getElementContentAsString(child));
-            } else if (ElementSupport.isElementNamed(child,
-                    AbstractMetadataProviderParser.METADATA_NAMESPACE, "Entity")) {
+            
+            if (ElementSupport.isElementNamed(child, AbstractMetadataProviderParser.METADATA_NAMESPACE, "Entity")) {
+                // Add to the active entity set.
+                entitySet.add(ElementSupport.getElementContentAsString(child));
+                child = ElementSupport.getNextSiblingElement(child);
+                continue;
+                
+            } else if (!entitySet.isEmpty()) {
+                // "Commit" the current entity set as a single condition against the current accumulator.
+                // Then reset the entity set. Use a new object rather than clearing to ensure no cross-contamination.
                 final BeanDefinitionBuilder entityIdBuilder =
                         BeanDefinitionBuilder.genericBeanDefinition(EntityIdPredicate.class);
-                entityIdBuilder.addConstructorArgValue(ElementSupport.getElementContentAsString(child));
+                entityIdBuilder.addConstructorArgValue(entitySet);
                 final ManagedList<String> forRule = new ManagedList<>(accumulator.size());
                 forRule.addAll(accumulator);
                 ruleMap.put(entityIdBuilder.getBeanDefinition(), forRule);
+                
+                entitySet = new ManagedSet<>();
+            }
+            
+            if (ElementSupport.isElementNamed(child, AbstractMetadataProviderParser.METADATA_NAMESPACE, "Format")) {
+                accumulator.add(ElementSupport.getElementContentAsString(child));
             } else if (ElementSupport.isElementNamed(child,
                     AbstractMetadataProviderParser.METADATA_NAMESPACE, "ConditionRef")) {
                 final ManagedList<String> forRule = new ManagedList<>(accumulator.size());
@@ -98,11 +117,23 @@ public class NameIDFormatFilterParser extends AbstractSingleBeanDefinitionParser
                 ruleMap.put(ScriptTypeBeanParser.parseScriptType(ScriptedPredicate.class, child).getBeanDefinition(),
                         forRule);
             }
+            
             child = ElementSupport.getNextSiblingElement(child);
         }
 
+        // Do a final check and commit for a non-empty entity set.
+        if (!entitySet.isEmpty()) {
+            final BeanDefinitionBuilder entityIdBuilder =
+                    BeanDefinitionBuilder.genericBeanDefinition(EntityIdPredicate.class);
+            entityIdBuilder.addConstructorArgValue(entitySet);
+            final ManagedList<String> forRule = new ManagedList<>(accumulator.size());
+            forRule.addAll(accumulator);
+            ruleMap.put(entityIdBuilder.getBeanDefinition(), forRule);
+        }
+        
         builder.addPropertyValue("rules", ruleMap);
     }
+// Checkstyle: MethodLength ON
 
     /** {@inheritDoc} */
     @Override protected boolean shouldGenerateId() {
diff --git a/idp-profile-spring/src/test/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/AlgorithmFilterParserTest.java b/idp-profile-spring/src/test/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/AlgorithmFilterParserTest.java
index 397350c..778c6f8 100644
--- a/idp-profile-spring/src/test/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/AlgorithmFilterParserTest.java
+++ b/idp-profile-spring/src/test/java/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/AlgorithmFilterParserTest.java
@@ -70,9 +70,26 @@ public class AlgorithmFilterParserTest extends AbstractMetadataParserTest {
         
         EntityIdCriterion crit = new EntityIdCriterion("https://sp.example.org/sp/shibboleth");
         EntityDescriptor entity = resolver.resolveSingle(new CriteriaSet(crit));
-        Assert.assertNotNull(entity);
+        validate(entity);
+
+        crit = new EntityIdCriterion("https://sp4.example.org/sp/shibboleth");
+        entity = resolver.resolveSingle(new CriteriaSet(crit));
+        if (entity != null) {
+            validate(entity);
+        }
 
-        Extensions exts = entity.getExtensions();
+        crit = new EntityIdCriterion("https://sp2.example.org/sp/shibboleth");
+        entity = resolver.resolveSingle(new CriteriaSet(crit));
+        Assert.assertNotNull(entity);
+        final Extensions exts = entity.getExtensions();
+        if (exts != null) {
+            Assert.assertTrue(exts.getUnknownXMLObjects(DigestMethod.DEFAULT_ELEMENT_NAME).isEmpty());
+            Assert.assertTrue(exts.getUnknownXMLObjects(SigningMethod.DEFAULT_ELEMENT_NAME).isEmpty());
+        }
+    }
+    
+    private void validate(final EntityDescriptor entity) {
+        final Extensions exts = entity.getExtensions();
         Assert.assertNotNull(exts);
         
         List<XMLObject> extElements = exts.getUnknownXMLObjects(DigestMethod.DEFAULT_ELEMENT_NAME);
@@ -106,15 +123,6 @@ public class AlgorithmFilterParserTest extends AbstractMetadataParserTest {
                 assertEquals(((MGF) mgfs.get(0)).getAlgorithm(), EncryptionConstants.ALGO_ID_MGF1_SHA256);
             }
         }        
-
-        crit = new EntityIdCriterion("https://sp2.example.org/sp/shibboleth");
-        entity = resolver.resolveSingle(new CriteriaSet(crit));
-        Assert.assertNotNull(entity);
-        exts = entity.getExtensions();
-        if (exts != null) {
-            Assert.assertTrue(exts.getUnknownXMLObjects(DigestMethod.DEFAULT_ELEMENT_NAME).isEmpty());
-            Assert.assertTrue(exts.getUnknownXMLObjects(SigningMethod.DEFAULT_ELEMENT_NAME).isEmpty());
-        }
     }
-    
+
 }
\ No newline at end of file
diff --git a/idp-profile-spring/src/test/resources/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/algorithm.xml b/idp-profile-spring/src/test/resources/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/algorithm.xml
index d11e50e..76f14c5 100644
--- a/idp-profile-spring/src/test/resources/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/algorithm.xml
+++ b/idp-profile-spring/src/test/resources/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/algorithm.xml
@@ -26,10 +26,15 @@
                 Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
         </EncryptionMethod>
         <metadata:Entity>https://sp.example.org/sp/shibboleth</metadata:Entity>
+        <metadata:Entity>https://sp3.example.org/sp/shibboleth</metadata:Entity>
+        <metadata:Entity>https://sp4.example.org/sp/shibboleth</metadata:Entity>
+        <metadata:ConditionScript language="javascript">
+            <metadata:Script>input.getEntityID().equals("https://sp3.example.org/sp/shibboleth");</metadata:Script>
+        </metadata:ConditionScript>
     </metadata:MetadataFilter>
 
     <EntitiesDescriptor Name="ukgroup">
-    	<EntityDescriptor ID="uk001502"
+    	<EntityDescriptor
     		entityID="https://sp.example.org/sp/shibboleth">
     		<SPSSODescriptor
     			protocolSupportEnumeration="urn:oasis:names:tc:SAML:1.1:protocol urn:oasis:names:tc:SAML:2.0:protocol">
@@ -41,7 +46,7 @@
     		</SPSSODescriptor>
     	</EntityDescriptor>
 
-        <EntityDescriptor ID="uk001503"
+        <EntityDescriptor
             entityID="https://sp2.example.org/sp/shibboleth">
             <SPSSODescriptor
                 protocolSupportEnumeration="urn:oasis:names:tc:SAML:1.1:protocol urn:oasis:names:tc:SAML:2.0:protocol">
@@ -52,5 +57,17 @@
                     index="5" />
             </SPSSODescriptor>
         </EntityDescriptor>
+
+        <EntityDescriptor
+            entityID="https://sp4.example.org/sp/shibboleth">
+            <SPSSODescriptor
+                protocolSupportEnumeration="urn:oasis:names:tc:SAML:1.1:protocol urn:oasis:names:tc:SAML:2.0:protocol">
+    
+                <AssertionConsumerService
+                    Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST-SimpleSign"
+                    Location="https://sp4.example.org/Shibboleth.sso/SAML2/POST-SimpleSign"
+                    index="5" />
+            </SPSSODescriptor>
+        </EntityDescriptor>
     </EntitiesDescriptor>
 </metadata:MetadataProvider>
diff --git a/idp-profile-spring/src/test/resources/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/entityAttributes.xml b/idp-profile-spring/src/test/resources/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/entityAttributes.xml
index fd30d2e..f2a919d 100644
--- a/idp-profile-spring/src/test/resources/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/entityAttributes.xml
+++ b/idp-profile-spring/src/test/resources/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/entityAttributes.xml
@@ -21,10 +21,12 @@
             <saml:AttributeValue>barValue</saml:AttributeValue>        
         </saml:Attribute>
         <metadata:Entity>https://sp.example.org/sp/shibboleth</metadata:Entity>
+        <metadata:Entity>https://sp3.example.org/sp/shibboleth</metadata:Entity>
+        <metadata:Entity>https://sp4.example.org/sp/shibboleth</metadata:Entity>
     </metadata:MetadataFilter>
 
     <EntitiesDescriptor Name="ukgroup">
-    	<EntityDescriptor ID="uk001502"
+    	<EntityDescriptor
     		entityID="https://sp.example.org/sp/shibboleth">
             <Extensions>
                 <mdattr:EntityAttributes>
@@ -44,7 +46,7 @@
     		</SPSSODescriptor>
     	</EntityDescriptor>
 
-        <EntityDescriptor ID="uk001503"
+        <EntityDescriptor
             entityID="https://sp2.example.org/sp/shibboleth">
             <Extensions>
                 <mdattr:EntityAttributes>
diff --git a/idp-profile-spring/src/test/resources/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/nameIDFormat.xml b/idp-profile-spring/src/test/resources/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/nameIDFormat.xml
index 92d0a54..4e58cb9 100644
--- a/idp-profile-spring/src/test/resources/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/nameIDFormat.xml
+++ b/idp-profile-spring/src/test/resources/net/shibboleth/idp/profile/spring/relyingparty/metadata/filter/nameIDFormat.xml
@@ -10,6 +10,7 @@
 	<metadata:MetadataFilter xsi:type="metadata:NameIDFormat" removeExistingFormats="true">
         <metadata:Format>foo</metadata:Format>
         <metadata:Entity>https://sp.example.org/sp/shibboleth</metadata:Entity>
+        <metadata:Entity>https://sp4.example.org/sp/shibboleth</metadata:Entity>
         <metadata:Format>bar</metadata:Format>
         <metadata:Entity>https://sp2.example.org/sp/shibboleth</metadata:Entity>
     </metadata:MetadataFilter>

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list