[java-shib-attribute] branch main updated: JSSH-5 ServiceableComponent should implement AutoClose

Rod Widdowson rdw at steadingsoftware.com
Fri Nov 25 14:29:54 UTC 2022


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

rdw pushed a commit to branch main
in repository java-shib-attribute.

View the commit online:
http://git.shibboleth.net/view/?p=java-shib-attribute.git;a=commit;h=54a35408bce5514759c048cdef47a3320175664d

The following commit(s) were added to refs/heads/main by this push:
     new 54a35408b JSSH-5 ServiceableComponent should implement AutoClose
54a35408b is described below

commit 54a35408bce5514759c048cdef47a3320175664d
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Fri Nov 25 13:55:25 2022 +0000

    JSSH-5 ServiceableComponent should implement AutoClose
    
    https://shibboleth.atlassian.net/browse/JSSH-5
    
    AttributeFilterImpl is no longer a ServiceableComponent
---
 .../attribute/filter/impl/AttributeFilterImpl.java |   8 +-
 .../impl/TargettedAttributeValueFilterTest.java    | 159 ++++++------
 .../impl/UntargettedAttributeValueFilterTest.java  |  62 ++---
 .../filter/impl/AttributeFilterImplTest.java       | 271 ++++++++-------------
 .../policyrule/saml/impl/BaseMetadataTests.java    |   3 +-
 .../impl/AttributeFilterServiceStrategy.java       |  16 +-
 .../filter/spring/AttributeFilterServiceTest.java  |  15 +-
 7 files changed, 225 insertions(+), 309 deletions(-)

diff --git a/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/impl/AttributeFilterImpl.java b/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/impl/AttributeFilterImpl.java
index 75fc9abcd..2fe7618c8 100644
--- a/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/impl/AttributeFilterImpl.java
+++ b/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/impl/AttributeFilterImpl.java
@@ -44,13 +44,14 @@ import net.shibboleth.idp.attribute.filter.context.AttributeFilterWorkContext;
 import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.annotation.constraint.NotEmpty;
 import net.shibboleth.shared.annotation.constraint.Unmodifiable;
+import net.shibboleth.shared.component.AbstractIdentifiableInitializableComponent;
 import net.shibboleth.shared.component.ComponentInitializationException;
 import net.shibboleth.shared.logic.Constraint;
 import net.shibboleth.shared.spring.service.AbstractServiceableComponent;
 
 /** Service that filters out attributes and values based upon loaded policies. */
 @ThreadSafe
-public class AttributeFilterImpl extends AbstractServiceableComponent<AttributeFilter> implements AttributeFilter {
+public class AttributeFilterImpl extends AbstractIdentifiableInitializableComponent implements AttributeFilter {
 
     /** Class logger. */
     @Nonnull private final Logger log = LoggerFactory.getLogger(AttributeFilterImpl.class);
@@ -208,11 +209,6 @@ public class AttributeFilterImpl extends AbstractServiceableComponent<AttributeF
         return result;
     }
 
-    /** {@inheritDoc} */
-    @Override @Nonnull public AttributeFilter getComponent() {
-        return this;
-    }
-
     /**
      * Conditionally start a timer at the beginning of the filtering process.
      * 
diff --git a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/complex/impl/TargettedAttributeValueFilterTest.java b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/complex/impl/TargettedAttributeValueFilterTest.java
index 95898ca53..40b84441f 100644
--- a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/complex/impl/TargettedAttributeValueFilterTest.java
+++ b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/complex/impl/TargettedAttributeValueFilterTest.java
@@ -42,7 +42,6 @@ import net.shibboleth.idp.attribute.filter.matcher.logic.impl.NotMatcher;
 import net.shibboleth.idp.attribute.filter.matcher.logic.impl.NotMatcherTest;
 import net.shibboleth.idp.attribute.resolver.ResolutionException;
 import net.shibboleth.shared.component.ComponentInitializationException;
-import net.shibboleth.shared.testing.MockApplicationContext;
 
 /**
  * Complex test for AttributeRuleFilters when the rule is targeted
@@ -98,36 +97,30 @@ public class TargettedAttributeValueFilterTest extends BaseComplexAttributeFilte
                 new AttributeFilterPolicy("targettedAtPermit", PolicyRequirementRule.MATCHES_ALL,
                         Collections.singleton(attributeValueFilterPolicy));
 
-        try (final AttributeFilterImpl engine = new AttributeFilterImpl("engine", Collections.singleton(policy))) {
-
-            // TODO: this seems off but is needed to allow try-with-resources while also unlocking.
-            engine.pinComponent();
-
-            engine.setApplicationContext(new MockApplicationContext());
-
-            attributeValueFilterPolicy.initialize();
-            policy.initialize();
-            engine.initialize();
-
-            AttributeFilterContext context = new AttributeFilterContext();
-            context.setPrefilteredIdPAttributes(getIdPAttributes("epa-uidwithjsmith.xml").values());
-            engine.filterAttributes(context);
-            Map<String, IdPAttribute> attributes = context.getFilteredIdPAttributes();
-            final IdPAttribute attribute = attributes.get("eduPersonAffiliation");
-            assertEquals(attribute.getValues().size(), 3);
-
-            context = new AttributeFilterContext();
-            context.setPrefilteredIdPAttributes(getIdPAttributes("uid-epawithjsmith.xml").values());
-            engine.filterAttributes(context);
-            attributes = context.getFilteredIdPAttributes();
-            assertNull(attributes.get("eduPersonAffiliation"));
-
-            context = new AttributeFilterContext();
-            context.setPrefilteredIdPAttributes(getIdPAttributes("epa-uid.xml").values());
-            engine.filterAttributes(context);
-            attributes = context.getFilteredIdPAttributes();
-            assertNull(attributes.get("eduPersonAffiliation"));
-        }
+        final AttributeFilterImpl engine = new AttributeFilterImpl("engine", Collections.singleton(policy));
+
+        attributeValueFilterPolicy.initialize();
+        policy.initialize();
+        engine.initialize();
+
+        AttributeFilterContext context = new AttributeFilterContext();
+        context.setPrefilteredIdPAttributes(getIdPAttributes("epa-uidwithjsmith.xml").values());
+        engine.filterAttributes(context);
+        Map<String, IdPAttribute> attributes = context.getFilteredIdPAttributes();
+        final IdPAttribute attribute = attributes.get("eduPersonAffiliation");
+        assertEquals(attribute.getValues().size(), 3);
+
+        context = new AttributeFilterContext();
+        context.setPrefilteredIdPAttributes(getIdPAttributes("uid-epawithjsmith.xml").values());
+        engine.filterAttributes(context);
+        attributes = context.getFilteredIdPAttributes();
+        assertNull(attributes.get("eduPersonAffiliation"));
+
+        context = new AttributeFilterContext();
+        context.setPrefilteredIdPAttributes(getIdPAttributes("epa-uid.xml").values());
+        engine.filterAttributes(context);
+        attributes = context.getFilteredIdPAttributes();
+        assertNull(attributes.get("eduPersonAffiliation"));
     }
 
     /**
@@ -171,36 +164,30 @@ public class TargettedAttributeValueFilterTest extends BaseComplexAttributeFilte
                 new AttributeFilterPolicy("targettedAtPermit", PolicyRequirementRule.MATCHES_ALL,
                         Collections.singleton(attributeValueFilterPolicy));
 
-        try (final AttributeFilterImpl engine = new AttributeFilterImpl("engine", Collections.singleton(policy))) {
-    
-            // TODO: this seems off but is needed to allow try-with-resources while also unlocking.
-            engine.pinComponent();
-            
-            engine.setApplicationContext(new MockApplicationContext());
+        final AttributeFilterImpl engine = new AttributeFilterImpl("engine", Collections.singleton(policy));
     
-            attributeValueFilterPolicy.initialize();
-            policy.initialize();
-            engine.initialize();
+        attributeValueFilterPolicy.initialize();
+        policy.initialize();
+        engine.initialize();
     
-            AttributeFilterContext context = new AttributeFilterContext();
-            context.setPrefilteredIdPAttributes(getIdPAttributes("epa-uidwithjsmith.xml").values());
-            engine.filterAttributes(context);
-            Map<String, IdPAttribute> attributes = context.getFilteredIdPAttributes();
-            final IdPAttribute attribute = attributes.get("eduPersonAffiliation");
-            assertEquals(attribute.getValues().size(), 3);
-    
-            context = new AttributeFilterContext();
-            context.setPrefilteredIdPAttributes(getIdPAttributes("uid-epawithjsmith.xml").values());
-            engine.filterAttributes(context);
-            attributes = context.getFilteredIdPAttributes();
-            assertEquals(attribute.getValues().size(), 3);
-    
-            context = new AttributeFilterContext();
-            context.setPrefilteredIdPAttributes(getIdPAttributes("epa-uid.xml").values());
-            engine.filterAttributes(context);
-            attributes = context.getFilteredIdPAttributes();
-            assertEquals(attribute.getValues().size(), 3);
-        }
+        AttributeFilterContext context = new AttributeFilterContext();
+        context.setPrefilteredIdPAttributes(getIdPAttributes("epa-uidwithjsmith.xml").values());
+        engine.filterAttributes(context);
+        Map<String, IdPAttribute> attributes = context.getFilteredIdPAttributes();
+        final IdPAttribute attribute = attributes.get("eduPersonAffiliation");
+        assertEquals(attribute.getValues().size(), 3);
+
+        context = new AttributeFilterContext();
+        context.setPrefilteredIdPAttributes(getIdPAttributes("uid-epawithjsmith.xml").values());
+        engine.filterAttributes(context);
+        attributes = context.getFilteredIdPAttributes();
+        assertEquals(attribute.getValues().size(), 3);
+
+        context = new AttributeFilterContext();
+        context.setPrefilteredIdPAttributes(getIdPAttributes("epa-uid.xml").values());
+        engine.filterAttributes(context);
+        attributes = context.getFilteredIdPAttributes();
+        assertEquals(attribute.getValues().size(), 3);
     }
 
     /**
@@ -235,36 +222,30 @@ public class TargettedAttributeValueFilterTest extends BaseComplexAttributeFilte
         final AttributeFilterPolicy policy =
                 new AttributeFilterPolicy("targettedAtPermit", rule,  Collections.singleton(attributeValueFilterPolicy));
 
-        try (final AttributeFilterImpl engine = new AttributeFilterImpl("engine", Collections.singleton(policy))) {
-
-            // TODO: this seems off but is needed to allow try-with-resources while also unlocking.
-            engine.pinComponent();
-            
-            engine.setApplicationContext(new MockApplicationContext());
-    
-            attributeValueFilterPolicy.initialize();
-            policy.initialize();
-            engine.initialize();
-    
-            AttributeFilterContext context = new AttributeFilterContext();
-            context.setPrefilteredIdPAttributes(getIdPAttributes("epa-uidwithjsmith.xml").values());
-            engine.filterAttributes(context);
-            Map<String, IdPAttribute> attributes = context.getFilteredIdPAttributes();
-            final IdPAttribute attribute = attributes.get("eduPersonAffiliation");
-            assertEquals(attribute.getValues().size(), 3);
-    
-            context = new AttributeFilterContext();
-            context.setPrefilteredIdPAttributes(getIdPAttributes("uid-epawithjsmith.xml").values());
-            engine.filterAttributes(context);
-            attributes = context.getFilteredIdPAttributes();
-            assertNull(attributes.get("eduPersonAffiliation"));
-    
-            context = new AttributeFilterContext();
-            context.setPrefilteredIdPAttributes(getIdPAttributes("epa-uid.xml").values());
-            engine.filterAttributes(context);
-            attributes = context.getFilteredIdPAttributes();
-            assertNull(attributes.get("eduPersonAffiliation"));
-        }
+        final AttributeFilterImpl engine = new AttributeFilterImpl("engine", Collections.singleton(policy));
+
+        attributeValueFilterPolicy.initialize();
+        policy.initialize();
+        engine.initialize();
+
+        AttributeFilterContext context = new AttributeFilterContext();
+        context.setPrefilteredIdPAttributes(getIdPAttributes("epa-uidwithjsmith.xml").values());
+        engine.filterAttributes(context);
+        Map<String, IdPAttribute> attributes = context.getFilteredIdPAttributes();
+        final IdPAttribute attribute = attributes.get("eduPersonAffiliation");
+        assertEquals(attribute.getValues().size(), 3);
+
+        context = new AttributeFilterContext();
+        context.setPrefilteredIdPAttributes(getIdPAttributes("uid-epawithjsmith.xml").values());
+        engine.filterAttributes(context);
+        attributes = context.getFilteredIdPAttributes();
+        assertNull(attributes.get("eduPersonAffiliation"));
+
+        context = new AttributeFilterContext();
+        context.setPrefilteredIdPAttributes(getIdPAttributes("epa-uid.xml").values());
+        engine.filterAttributes(context);
+        attributes = context.getFilteredIdPAttributes();
+        assertNull(attributes.get("eduPersonAffiliation"));
     }
 
 }
diff --git a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/complex/impl/UntargettedAttributeValueFilterTest.java b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/complex/impl/UntargettedAttributeValueFilterTest.java
index a0cefc683..8f14e9859 100644
--- a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/complex/impl/UntargettedAttributeValueFilterTest.java
+++ b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/complex/impl/UntargettedAttributeValueFilterTest.java
@@ -39,7 +39,6 @@ import net.shibboleth.idp.attribute.filter.impl.AttributeFilterImpl;
 import net.shibboleth.idp.attribute.filter.matcher.impl.AttributeValueStringMatcher;
 import net.shibboleth.idp.attribute.resolver.ResolutionException;
 import net.shibboleth.shared.component.ComponentInitializationException;
-import net.shibboleth.shared.testing.MockApplicationContext;
 
 /**
  * Complex test for AttributeRuleFilters when the rule is targeted
@@ -92,36 +91,29 @@ public class UntargettedAttributeValueFilterTest extends BaseComplexAttributeFil
                 new AttributeFilterPolicy("targettedAtPermit", PolicyRequirementRule.MATCHES_ALL,
                         Collections.singleton(attributeValueFilterPolicy));
         
-        try (final AttributeFilterImpl engine = new AttributeFilterImpl("engine", Collections.singleton(policy))) {
-            
-            // TODO: this seems off but is needed to allow try-with-resources while also unlocking.
-            engine.pinComponent();
-            
-            engine.setApplicationContext(new MockApplicationContext());
-    
-            attributeValueFilterPolicy.initialize();
-            policy.initialize();
-            engine.initialize();
-    
-            AttributeFilterContext context = new AttributeFilterContext();
-            context.setPrefilteredIdPAttributes(getIdPAttributes("epa-uidwithjsmith.xml").values());
-            engine.filterAttributes(context);
-            Map<String, IdPAttribute> attributes = context.getFilteredIdPAttributes();
-            assertNull(attributes.get("eduPersonAffiliation"));
-    
-            context = new AttributeFilterContext();
-            context.setPrefilteredIdPAttributes(getIdPAttributes("uid-epawithjsmith.xml").values());
-            engine.filterAttributes(context);
-            attributes = context.getFilteredIdPAttributes();
-            IdPAttribute attribute = attributes.get("eduPersonAffiliation");
-            assertEquals(attribute.getValues().size(), 1);
-    
-            context = new AttributeFilterContext();
-            context.setPrefilteredIdPAttributes(getIdPAttributes("epa-uid.xml").values());
-            engine.filterAttributes(context);
-            attributes = context.getFilteredIdPAttributes();
-            assertNull(attributes.get("eduPersonAffiliation"));
-        }
+        final AttributeFilterImpl engine = new AttributeFilterImpl("engine", Collections.singleton(policy));
+        attributeValueFilterPolicy.initialize();
+        policy.initialize();
+        engine.initialize();
+
+        AttributeFilterContext context = new AttributeFilterContext();
+        context.setPrefilteredIdPAttributes(getIdPAttributes("epa-uidwithjsmith.xml").values());
+        engine.filterAttributes(context);
+        Map<String, IdPAttribute> attributes = context.getFilteredIdPAttributes();
+        assertNull(attributes.get("eduPersonAffiliation"));
+
+        context = new AttributeFilterContext();
+        context.setPrefilteredIdPAttributes(getIdPAttributes("uid-epawithjsmith.xml").values());
+        engine.filterAttributes(context);
+        attributes = context.getFilteredIdPAttributes();
+        IdPAttribute attribute = attributes.get("eduPersonAffiliation");
+        assertEquals(attribute.getValues().size(), 1);
+
+        context = new AttributeFilterContext();
+        context.setPrefilteredIdPAttributes(getIdPAttributes("epa-uid.xml").values());
+        engine.filterAttributes(context);
+        attributes = context.getFilteredIdPAttributes();
+        assertNull(attributes.get("eduPersonAffiliation"));
     }
 
     /**
@@ -155,13 +147,8 @@ public class UntargettedAttributeValueFilterTest extends BaseComplexAttributeFil
         final AttributeFilterPolicy policy =
                 new AttributeFilterPolicy("targettedAtPermit", rule,  Collections.singleton(attributeValueFilterPolicy));
 
-        try (final AttributeFilterImpl engine = new AttributeFilterImpl("engine", Collections.singleton(policy))) {
-    
-            // TODO: this seems off but is needed to allow try-with-resources while also unlocking.
-            engine.pinComponent();
+        final AttributeFilterImpl engine = new AttributeFilterImpl("engine", Collections.singleton(policy));
 
-            engine.setApplicationContext(new MockApplicationContext());
-    
             attributeValueFilterPolicy.initialize();
             policy.initialize();
             engine.initialize();
@@ -184,7 +171,6 @@ public class UntargettedAttributeValueFilterTest extends BaseComplexAttributeFil
             engine.filterAttributes(context);
             attributes = context.getFilteredIdPAttributes();
             assertNull(attributes.get("eduPersonAffiliation"));
-        }
     }
 
 }
\ No newline at end of file
diff --git a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/impl/AttributeFilterImplTest.java b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/impl/AttributeFilterImplTest.java
index 20016a5fc..215cac3f4 100644
--- a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/impl/AttributeFilterImplTest.java
+++ b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/impl/AttributeFilterImplTest.java
@@ -38,7 +38,6 @@ import net.shibboleth.idp.attribute.filter.testing.MockMatcher;
 import net.shibboleth.idp.attribute.filter.testing.MockPolicyRequirementRule;
 import net.shibboleth.shared.component.ComponentInitializationException;
 import net.shibboleth.shared.logic.ConstraintViolationException;
-import net.shibboleth.shared.testing.MockApplicationContext;
 
 /** Unit test for {@link AttributeFilter}. */
 @SuppressWarnings("javadoc")
@@ -50,23 +49,21 @@ public class AttributeFilterImplTest {
      * @throws Exception if something goes wrong
      */
     @Test public void testPostConstructionState() throws Exception {
-        try (final AttributeFilterImpl filter = new AttributeFilterImpl("engine", Collections.emptyList())) {
+        final AttributeFilterImpl filter = new AttributeFilterImpl("engine", Collections.emptyList());
             
-            // TODO: this seems off but is needed to allow try-with-resources while also unlocking.
-            filter.pinComponent();
-            
-            Assert.assertNotNull(filter.getFilterPolicies());
-            Assert.assertTrue(filter.getFilterPolicies().isEmpty());
-            Assert.assertEquals(filter.getId(), "engine");
-        }
+        Assert.assertNotNull(filter.getFilterPolicies());
+        Assert.assertTrue(filter.getFilterPolicies().isEmpty());
+        Assert.assertEquals(filter.getId(), "engine");
 
-        try (final AttributeFilterImpl engine = new AttributeFilterImpl("  ", null)) {
+        try {
+            final AttributeFilterImpl engine = new AttributeFilterImpl("  ", null);
             Assert.fail();
         } catch (final ConstraintViolationException e) {
             // expected
         }
 
-        try (final AttributeFilterImpl engine = new AttributeFilterImpl("", null)) {
+        try {
+            final AttributeFilterImpl engine = new AttributeFilterImpl("", null);
             Assert.fail();
         } catch (final ConstraintViolationException e) {
             // expected
@@ -83,44 +80,34 @@ public class AttributeFilterImplTest {
         AttributeFilterPolicy policy2 = new AttributeFilterPolicy("policy2", PolicyRequirementRule.MATCHES_NONE, null);
         AttributeFilterPolicy policy3 = new AttributeFilterPolicy("policy3", PolicyRequirementRule.MATCHES_NONE, null);
 
-        try (final AttributeFilterImpl filter = new AttributeFilterImpl("engine", Arrays.asList(policy1, policy1, policy2))) {
+        AttributeFilterImpl filter = new AttributeFilterImpl("engine", Arrays.asList(policy1, policy1, policy2));
 
-            // TODO: this seems off but is needed to allow try-with-resources while also unlocking.
-            filter.pinComponent();
-            
-            filter.setApplicationContext(new MockApplicationContext());
-            policy1.initialize();
-            policy2.initialize();
-            filter.initialize();
-    
-            Assert.assertTrue(filter.isInitialized());
-            Assert.assertEquals(filter.getFilterPolicies().size(), 3);
-            Assert.assertTrue(filter.getFilterPolicies().contains(policy1));
-            Assert.assertTrue(policy1.isInitialized());
-            Assert.assertTrue(filter.getFilterPolicies().contains(policy2));
-            Assert.assertTrue(policy2.isInitialized());
-            Assert.assertFalse(filter.getFilterPolicies().contains(policy3));
-            Assert.assertFalse(policy3.isInitialized());
-        }
+        policy1.initialize();
+        policy2.initialize();
+        filter.initialize();
 
-        try (final AttributeFilterImpl filter = new AttributeFilterImpl("engine", Arrays.asList(policy1, policy2))) {
-            // TODO: this seems off but is needed to allow try-with-resources while also unlocking.
-            filter.pinComponent();
+        Assert.assertTrue(filter.isInitialized());
+        Assert.assertEquals(filter.getFilterPolicies().size(), 3);
+        Assert.assertTrue(filter.getFilterPolicies().contains(policy1));
+        Assert.assertTrue(policy1.isInitialized());
+        Assert.assertTrue(filter.getFilterPolicies().contains(policy2));
+        Assert.assertTrue(policy2.isInitialized());
+        Assert.assertFalse(filter.getFilterPolicies().contains(policy3));
+        Assert.assertFalse(policy3.isInitialized());
 
-            filter.setApplicationContext(new MockApplicationContext());
-            filter.initialize();
-    
-            Assert.assertEquals(filter.getFilterPolicies().size(), 2);
-            List<AttributeFilterPolicy> contents = filter.getFilterPolicies();
-            Assert.assertEquals(contents.get(0).getId(), "policy1");
-            Assert.assertEquals(contents.get(1).getId(), "policy2");
-    
-            try {
-                filter.getFilterPolicies().add(policy1);
-                Assert.fail();
-            } catch (UnsupportedOperationException e) {
-                // expected this
-            }
+        filter = new AttributeFilterImpl("engine", Arrays.asList(policy1, policy2));
+        filter.initialize();
+
+        Assert.assertEquals(filter.getFilterPolicies().size(), 2);
+        List<AttributeFilterPolicy> contents = filter.getFilterPolicies();
+        Assert.assertEquals(contents.get(0).getId(), "policy1");
+        Assert.assertEquals(contents.get(1).getId(), "policy2");
+
+        try {
+            filter.getFilterPolicies().add(policy1);
+            Assert.fail();
+        } catch (UnsupportedOperationException e) {
+            // expected this
         }
     }
 
@@ -154,24 +141,19 @@ public class AttributeFilterImplTest {
         attribute2.setValues(Arrays.asList(new StringAttributeValue("a"), new StringAttributeValue("b")));
         filterContext.getPrefilteredIdPAttributes().put(attribute2.getId(), attribute2);
 
-        try (final AttributeFilterImpl filter = new AttributeFilterImpl("engine", Collections.singletonList(policy))) {
-
-            // TODO: this seems off but is needed to allow try-with-resources while also unlocking.
-            filter.pinComponent();
+        final AttributeFilterImpl filter = new AttributeFilterImpl("engine", Collections.singletonList(policy));
 
-            filter.setApplicationContext(new MockApplicationContext());
-            attribute1Policy.initialize();
-            policy.initialize();
-            filter.initialize();
-    
-            filter.filterAttributes(filterContext);
-            final Map<String, IdPAttribute> resultAttrs = filterContext.getFilteredIdPAttributes();
-            Assert.assertEquals(resultAttrs.size(), 1);
-            final List<IdPAttributeValue> result = resultAttrs.get("attribute1").getValues();
-            Assert.assertEquals(result.size(), 2);
-            Assert.assertTrue(result.contains(new StringAttributeValue("one")));
-            Assert.assertTrue(result.contains(new StringAttributeValue("two")));
-        }
+        attribute1Policy.initialize();
+        policy.initialize();
+        filter.initialize();
+
+        filter.filterAttributes(filterContext);
+        final Map<String, IdPAttribute> resultAttrs = filterContext.getFilteredIdPAttributes();
+        Assert.assertEquals(resultAttrs.size(), 1);
+        final List<IdPAttributeValue> result = resultAttrs.get("attribute1").getValues();
+        Assert.assertEquals(result.size(), 2);
+        Assert.assertTrue(result.contains(new StringAttributeValue("one")));
+        Assert.assertTrue(result.contains(new StringAttributeValue("two")));
     }
 
     @Test public void testAllMatcher() throws Exception {
@@ -195,20 +177,13 @@ public class AttributeFilterImplTest {
         attribute1Policy.initialize();
         policy.initialize();
         
-        try (final AttributeFilterImpl filter = new AttributeFilterImpl("engine", Collections.singletonList(policy))) {
-
-            // TODO: this seems off but is needed to allow try-with-resources while also unlocking.
-            filter.pinComponent();
-
-            filter.setApplicationContext(new MockApplicationContext());
-            filter.initialize();
-    
-            filter.filterAttributes(filterContext);
-            final List<IdPAttributeValue> result = filterContext.getFilteredIdPAttributes().get("attribute1").getValues();
-            Assert.assertEquals(result.size(), 2);
-            Assert.assertTrue(result.contains(new StringAttributeValue("one")));
-            Assert.assertTrue(result.contains(new StringAttributeValue("two")));
-        }
+        final AttributeFilterImpl filter = new AttributeFilterImpl("engine", Collections.singletonList(policy));
+        filter.initialize();
+        filter.filterAttributes(filterContext);
+        final List<IdPAttributeValue> result = filterContext.getFilteredIdPAttributes().get("attribute1").getValues();
+        Assert.assertEquals(result.size(), 2);
+        Assert.assertTrue(result.contains(new StringAttributeValue("one")));
+        Assert.assertTrue(result.contains(new StringAttributeValue("two")));
     }
     
     @Test public void testAllMatcherFails() throws Exception {
@@ -234,17 +209,11 @@ public class AttributeFilterImplTest {
         attribute2Policy.initialize();
         policy.initialize();
         
-        try (final AttributeFilterImpl filter = new AttributeFilterImpl("engine", Collections.singletonList(policy))) {
-
-            // TODO: this seems off but is needed to allow try-with-resources while also unlocking.
-            filter.pinComponent();
+        final AttributeFilterImpl filter = new AttributeFilterImpl("engine", Collections.singletonList(policy));
+        filter.initialize();
 
-            filter.setApplicationContext(new MockApplicationContext());
-            filter.initialize();
-    
-            filter.filterAttributes(filterContext);
-            Assert.assertTrue(filterContext.getFilteredIdPAttributes().isEmpty());
-        }
+        filter.filterAttributes(filterContext);
+        Assert.assertTrue(filterContext.getFilteredIdPAttributes().isEmpty());
     }
 
 
@@ -266,19 +235,14 @@ public class AttributeFilterImplTest {
         attribute1.setValues(Arrays.asList(new StringAttributeValue("one"), new StringAttributeValue("two")));
         filterContext.getPrefilteredIdPAttributes().put(attribute1.getId(), attribute1);
 
-        try (final AttributeFilterImpl filter = new AttributeFilterImpl("engine", Collections.singletonList(policy))) {
+        final AttributeFilterImpl filter = new AttributeFilterImpl("engine", Collections.singletonList(policy));
 
-            // TODO: this seems off but is needed to allow try-with-resources while also unlocking.
-            filter.pinComponent();
+        attribute1Policy.initialize();
+        policy.initialize();
+        filter.initialize();
 
-            filter.setApplicationContext(new MockApplicationContext());
-            attribute1Policy.initialize();
-            policy.initialize();
-            filter.initialize();
-    
-            filter.filterAttributes(filterContext);
-            Assert.assertTrue(filterContext.getFilteredIdPAttributes().isEmpty());
-        }
+        filter.filterAttributes(filterContext);
+        Assert.assertTrue(filterContext.getFilteredIdPAttributes().isEmpty());
     }
 
     @Test public void testDenyFilterAttributes() throws Exception {
@@ -308,24 +272,19 @@ public class AttributeFilterImplTest {
         attribute1.setValues(Arrays.asList(new StringAttributeValue("one"), new StringAttributeValue("two")));
         filterContext.getPrefilteredIdPAttributes().put(attribute1.getId(), attribute1);
 
-        try (final AttributeFilterImpl filter = new AttributeFilterImpl("engine", Collections.singletonList(policy))) {
+        final AttributeFilterImpl filter = new AttributeFilterImpl("engine", Collections.singletonList(policy));
 
-            // TODO: this seems off but is needed to allow try-with-resources while also unlocking.
-            filter.pinComponent();
-
-            filter.setApplicationContext(new MockApplicationContext());
-            denyPolicy.initialize();
-            allowPolicy.initialize();
-            policy.initialize();
-            filter.initialize();
-    
-            filter.filterAttributes(filterContext);
-            final Map<String, IdPAttribute> resultAttrs = filterContext.getFilteredIdPAttributes();
-            Assert.assertEquals(resultAttrs.size(), 1);
-            final List<IdPAttributeValue> result = resultAttrs.get("attribute1").getValues();
-            Assert.assertEquals(result.size(), 1);
-            Assert.assertTrue(result.contains(new StringAttributeValue("two")));
-        }
+        denyPolicy.initialize();
+        allowPolicy.initialize();
+        policy.initialize();
+        filter.initialize();
+
+        filter.filterAttributes(filterContext);
+        final Map<String, IdPAttribute> resultAttrs = filterContext.getFilteredIdPAttributes();
+        Assert.assertEquals(resultAttrs.size(), 1);
+        final List<IdPAttributeValue> result = resultAttrs.get("attribute1").getValues();
+        Assert.assertEquals(result.size(), 1);
+        Assert.assertTrue(result.contains(new StringAttributeValue("two")));
     }
 
     @Test public void testNoPolicy() throws Exception {
@@ -345,18 +304,13 @@ public class AttributeFilterImplTest {
         attribute1.setValues(Arrays.asList(new StringAttributeValue("one"), new StringAttributeValue("two")));
         filterContext.getPrefilteredIdPAttributes().put(attribute1.getId(), attribute1);
 
-        try (final AttributeFilterImpl filter = new AttributeFilterImpl("engine", Collections.singletonList(policy))) {
+        final AttributeFilterImpl filter = new AttributeFilterImpl("engine", Collections.singletonList(policy));
 
-            // TODO: this seems off but is needed to allow try-with-resources while also unlocking.
-            filter.pinComponent();
+        policy.initialize();
+        filter.initialize();
 
-            filter.setApplicationContext(new MockApplicationContext());
-            policy.initialize();
-            filter.initialize();
-    
-            filter.filterAttributes(filterContext);
-            Assert.assertTrue(filterContext.getFilteredIdPAttributes().isEmpty());
-        }
+        filter.filterAttributes(filterContext);
+        Assert.assertTrue(filterContext.getFilteredIdPAttributes().isEmpty());
     }
 
     @Test public void testDenyAllFilterAttributes() throws Exception {
@@ -382,21 +336,16 @@ public class AttributeFilterImplTest {
         attribute1.setValues(Arrays.asList(new StringAttributeValue("one"), new StringAttributeValue("two")));
         filterContext.getPrefilteredIdPAttributes().put(attribute1.getId(), attribute1);
 
-        try (final AttributeFilterImpl filter = new AttributeFilterImpl("engine", Collections.singletonList(policy))) {
-
-            // TODO: this seems off but is needed to allow try-with-resources while also unlocking.
-            filter.pinComponent();
+        final AttributeFilterImpl filter = new AttributeFilterImpl("engine", Collections.singletonList(policy));
 
-            filter.setApplicationContext(new MockApplicationContext());
-            allowPolicy.initialize();
-            denyPolicy.initialize();
-            policy.initialize();
-            filter.initialize();
+        allowPolicy.initialize();
+        denyPolicy.initialize();
+        policy.initialize();
+        filter.initialize();
     
-            filter.filterAttributes(filterContext);
-            final Map<String, IdPAttribute> resultAttrs = filterContext.getFilteredIdPAttributes();
-            Assert.assertTrue(resultAttrs.isEmpty());
-        }
+        filter.filterAttributes(filterContext);
+        final Map<String, IdPAttribute> resultAttrs = filterContext.getFilteredIdPAttributes();
+        Assert.assertTrue(resultAttrs.isEmpty());
     }
 
     @Test public void testInitDestroy() throws ComponentInitializationException {
@@ -415,34 +364,28 @@ public class AttributeFilterImplTest {
         Assert.assertFalse(matcher.isInitialized());
         Assert.assertFalse(matcher.isDestroyed());
 
-        try (final AttributeFilterImpl filter = new AttributeFilterImpl("engine", Collections.singletonList(policy))) {
+        final AttributeFilterImpl filter = new AttributeFilterImpl("engine", Collections.singletonList(policy));
 
-            // TODO: this seems off but is needed to allow try-with-resources while also unlocking.
-            filter.pinComponent();
+        policy.initialize();
+        matcher.initialize();
+        policyRule.initialize();
+        filter.initialize();
 
-            filter.setApplicationContext(new MockApplicationContext());
-    
-            policy.initialize();
-            matcher.initialize();
-            policyRule.initialize();
-            filter.initialize();
-    
-            Assert.assertTrue(policyRule.isInitialized());
-            Assert.assertFalse(policyRule.isDestroyed());
-            Assert.assertTrue(matcher.isInitialized());
-            Assert.assertFalse(matcher.isDestroyed());
-    
-            // TODO: can't do this because pin above grabs read lock and this requires write lock
-            //filter.destroy();
-            
-            policyRule.destroy();
-            policy.destroy();
-            matcher.destroy();
-            Assert.assertTrue(policyRule.isInitialized());
-            Assert.assertTrue(policyRule.isDestroyed());
-            Assert.assertTrue(matcher.isInitialized());
-            Assert.assertTrue(matcher.isDestroyed());
-        }
+        Assert.assertTrue(policyRule.isInitialized());
+        Assert.assertFalse(policyRule.isDestroyed());
+        Assert.assertTrue(matcher.isInitialized());
+        Assert.assertFalse(matcher.isDestroyed());
+
+        // TODO: can't do this because pin above grabs read lock and this requires write lock
+        //filter.destroy();
+        
+        policyRule.destroy();
+        policy.destroy();
+        matcher.destroy();
+        Assert.assertTrue(policyRule.isInitialized());
+        Assert.assertTrue(policyRule.isDestroyed());
+        Assert.assertTrue(matcher.isInitialized());
+        Assert.assertTrue(matcher.isDestroyed());
     }
 
 }
diff --git a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/saml/impl/BaseMetadataTests.java b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/saml/impl/BaseMetadataTests.java
index bcf44df09..3e9ad7f49 100644
--- a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/saml/impl/BaseMetadataTests.java
+++ b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/saml/impl/BaseMetadataTests.java
@@ -23,6 +23,7 @@ import java.util.Collections;
 import javax.annotation.Nonnull;
 
 import net.shibboleth.idp.attribute.filter.context.AttributeFilterContext;
+import net.shibboleth.idp.attribute.transcoding.AttributeTranscoderRegistry;
 import net.shibboleth.idp.attribute.transcoding.BasicNamingFunction;
 import net.shibboleth.idp.attribute.transcoding.impl.AttributeTranscoderRegistryImpl;
 import net.shibboleth.idp.saml.attribute.impl.AttributeMappingNodeProcessor;
@@ -77,7 +78,7 @@ public class BaseMetadataTests extends XMLObjectBaseTestCase {
         
         final NodeProcessingMetadataFilter filter = new NodeProcessingMetadataFilter();
         filter.setNodeProcessors(Arrays.asList(new EntitiesDescriptorNameProcessor(),
-                new AttributeMappingNodeProcessor(new MockReloadableService<>(registry))));
+                new AttributeMappingNodeProcessor(new MockReloadableService<AttributeTranscoderRegistry>(registry))));
         filter.initialize();
         filter.filter(metadata, new MetadataFilterContext());
 
diff --git a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/impl/AttributeFilterServiceStrategy.java b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/impl/AttributeFilterServiceStrategy.java
index 39c1b4f87..baaafa226 100644
--- a/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/impl/AttributeFilterServiceStrategy.java
+++ b/shib-attribute-filter-spring/src/main/java/net/shibboleth/idp/attribute/filter/spring/impl/AttributeFilterServiceStrategy.java
@@ -32,7 +32,9 @@ import net.shibboleth.idp.attribute.filter.impl.AttributeFilterImpl;
 import net.shibboleth.shared.component.AbstractIdentifiableInitializableComponent;
 import net.shibboleth.shared.component.ComponentInitializationException;
 import net.shibboleth.shared.service.ServiceException;
-import net.shibboleth.shared.spring.service.AbstractServiceableComponent;
+import net.shibboleth.shared.service.ServiceableComponent;
+import net.shibboleth.shared.spring.service.impl.SpringServiceableComponent;
+
 
 /**
  * Strategy for summoning up an {@link AttributeFilterImpl} from a populated {@link ApplicationContext}. We do this by
@@ -40,14 +42,14 @@ import net.shibboleth.shared.spring.service.AbstractServiceableComponent;
  * then initialize.
  */
 public class AttributeFilterServiceStrategy extends AbstractIdentifiableInitializableComponent implements
-        Function<ApplicationContext, AbstractServiceableComponent<AttributeFilter>> {
+        Function<ApplicationContext, ServiceableComponent<AttributeFilter>> {
 
     /** log. */
     private final Logger log = LoggerFactory.getLogger(AttributeFilterServiceStrategy.class);
 
     /** {@inheritDoc} */
     @Nullable
-    public AbstractServiceableComponent<AttributeFilter> apply(@Nullable final ApplicationContext appContext) {
+    public ServiceableComponent<AttributeFilter> apply(@Nullable final ApplicationContext appContext) {
 
         if (appContext == null) {
             throw new ServiceException("ApplicationContext was null");
@@ -57,13 +59,15 @@ public class AttributeFilterServiceStrategy extends AbstractIdentifiableInitiali
         log.debug("Creating Attribute Filter {} with  {} Policies", getId(), afps.size());
 
         final AttributeFilterImpl filter = new AttributeFilterImpl(getId(), afps);
-        filter.setApplicationContext(appContext);
-
+        
+        final SpringServiceableComponent<AttributeFilter> result;
         try {
             filter.initialize();
+            result = new SpringServiceableComponent<AttributeFilter>(filter);
+            result.setApplicationContext(appContext);
         } catch (final ComponentInitializationException e) {
             throw new ServiceException("Unable to initialize attribute filter for " + appContext.getDisplayName(), e);
         }
-        return filter;
+        return result;
     }
 }
\ No newline at end of file
diff --git a/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/AttributeFilterServiceTest.java b/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/AttributeFilterServiceTest.java
index 730de570f..671ceed69 100644
--- a/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/AttributeFilterServiceTest.java
+++ b/shib-attribute-filter-spring/src/test/java/net/shibboleth/idp/attribute/filter/spring/AttributeFilterServiceTest.java
@@ -22,6 +22,7 @@ import static org.testng.Assert.assertNull;
 import static org.testng.Assert.assertTrue;
 
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
@@ -37,8 +38,9 @@ import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.StringAttributeValue;
 import net.shibboleth.idp.attribute.filter.AttributeFilter;
 import net.shibboleth.idp.attribute.filter.AttributeFilterException;
+import net.shibboleth.idp.attribute.filter.AttributeFilterPolicy;
 import net.shibboleth.idp.attribute.filter.context.AttributeFilterContext;
-import net.shibboleth.idp.attribute.filter.spring.impl.AttributeFilterServiceStrategy;
+import net.shibboleth.idp.attribute.filter.impl.AttributeFilterImpl;
 import net.shibboleth.shared.component.ComponentInitializationException;
 import net.shibboleth.shared.service.ServiceException;
 import net.shibboleth.shared.spring.config.IdentifiableBeanPostProcessor;
@@ -88,10 +90,13 @@ public class AttributeFilterServiceTest {
                     .build();
 
         testContext = context;
-        final AttributeFilterServiceStrategy strategy = new AttributeFilterServiceStrategy();
-        strategy.setId("ID");
-        strategy.initialize();
-        return (AttributeFilter) strategy.apply(context);
+
+        final Collection<AttributeFilterPolicy> afps = context.getBeansOfType(AttributeFilterPolicy.class).values();
+
+        final AttributeFilterImpl filter = new AttributeFilterImpl("ID", afps);
+        filter.initialize();
+
+        return filter;
     }
 
     @BeforeClass protected void setUp() throws Exception {

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


More information about the commits mailing list