[java-shib-attribute] branch main updated: Fix null and annotation issues.
Scott Cantor
cantor.2 at osu.edu
Thu Nov 17 19:38:51 UTC 2022
This is an automated email from the git hooks/post-receive script.
scantor 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=2970833925dc52ecd426b981cc4e6338ea0c52ad
The following commit(s) were added to refs/heads/main by this push:
new 297083392 Fix null and annotation issues.
297083392 is described below
commit 2970833925dc52ecd426b981cc4e6338ea0c52ad
Author: Scott Cantor <cantor.2 at osu.edu>
AuthorDate: Thu Nov 17 14:38:48 2022 -0500
Fix null and annotation issues.
---
.../attribute/filter/AttributeFilterPolicy.java | 8 +-
.../idp/attribute/filter/AttributeRule.java | 27 +-
.../shibboleth/idp/attribute/filter/Matcher.java | 6 +-
.../idp/attribute/filter/MatcherFromPolicy.java | 6 +-
.../idp/attribute/filter/PolicyFromMatcher.java | 6 +-
.../idp/attribute/filter/PolicyFromMatcherId.java | 8 +-
.../attribute/filter/PolicyRequirementRule.java | 6 +-
.../filter/context/AttributeFilterWorkContext.java | 39 ++-
.../attribute/filter/BaseBridgingClassTester.java | 10 +-
.../attribute/filter/MatcherFromPolicyTest.java | 21 +-
.../attribute/filter/PolicyFromMatcherIdTest.java | 9 +-
.../filter/context/AttributeFilterContextTest.java | 2 +
.../context/AttributeFilterWorkContextTest.java | 51 +--
.../attribute/filter/impl/AttributeFilterImpl.java | 23 +-
.../filter/matcher/impl/AbstractMatcher.java | 10 +-
.../matcher/impl/AttributeScopeStringMatcher.java | 2 +-
.../filter/matcher/impl/ScriptedMatcher.java | 20 +-
.../saml/impl/AttributeInMetadataMatcher.java | 72 ++--
.../filter/policyrule/impl/ScriptedPolicyRule.java | 16 +-
.../impl/AbstractEntityAttributePolicyRule.java | 48 ++-
.../AbstractRegistrationAuthorityPolicyRule.java | 10 +-
.../impl/BaseComplexAttributeFilterTestCase.java | 28 +-
.../impl/TargettedAttributeValueFilterTest.java | 169 +++++-----
.../impl/UntargettedAttributeValueFilterTest.java | 123 +++----
.../filter/impl/AttributeFilterImplTest.java | 375 ++++++++++++---------
.../impl/AbstractRegexpStringMatcherTest.java | 2 +-
.../attribute/filter/matcher/impl/DataSources.java | 34 +-
.../filter/matcher/impl/ScriptedMatcherTest.java | 10 +-
.../filter/matcher/logic/impl/AndMatcherTest.java | 8 +-
.../filter/matcher/logic/impl/NotMatcherTest.java | 13 +-
.../filter/matcher/logic/impl/OrMatcherTest.java | 11 +-
.../saml/impl/AttributeInMetadataMatcherTest.java | 30 +-
.../impl/MappedAttributeInMetadataMatcherTest.java | 33 +-
.../saml/impl/ScopeMatchesShibMDScopeTests.java | 18 +-
.../impl/PredicatePolicyRuleTest.java | 2 +
.../filtercontext/impl/ProfilePolicyRuleTest.java | 12 +-
.../impl/ProxiedRequesterPolicyRuleTest.java | 23 +-
.../impl/ProxiedRequesterRegexpPolicyRuleTest.java | 10 +-
.../policyrule/saml/impl/BaseMetadataTests.java | 18 +-
.../IssuerEntityAttributeExactPolicyRuleTest.java | 8 +-
.../filter/tests/AttributeFilterPolicyTest.java | 25 +-
.../tests/AttributeValueFilterPolicyTest.java | 29 +-
.../idp/attribute/filter/testing/MockMatcher.java | 5 +-
.../impl/testing/SAMLAttributeDataConnector.java | 10 +-
.../resolver/testing/MockAttributeDefinition.java | 10 +-
.../resolver/testing/MockDataConnector.java | 20 +-
.../testing/MockStaticAttributeDefinition.java | 10 +-
.../resolver/testing/MockStaticDataConnector.java | 11 +-
.../resolver/testing/ResolverTestSupport.java | 39 ++-
.../attribute/resolver/testing/TestSources.java | 7 +-
50 files changed, 898 insertions(+), 595 deletions(-)
diff --git a/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/AttributeFilterPolicy.java b/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/AttributeFilterPolicy.java
index bd78a0817..66294aca9 100644
--- a/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/AttributeFilterPolicy.java
+++ b/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/AttributeFilterPolicy.java
@@ -53,16 +53,16 @@ public final class AttributeFilterPolicy extends AbstractIdentifiedInitializable
UnmodifiableComponent {
/** Class logger. */
- private final Logger log = LoggerFactory.getLogger(AttributeFilterPolicy.class);
+ @Nonnull private final Logger log = LoggerFactory.getLogger(AttributeFilterPolicy.class);
/** Criterion that must be met for this policy to be active for a given request. */
- private final PolicyRequirementRule rule;
+ @Nonnull private final PolicyRequirementRule rule;
/** Filters to be used on attribute values. */
- private final List<AttributeRule> valuePolicies;
+ @Nonnull @NonnullElements private final List<AttributeRule> valuePolicies;
/** Log prefix. */
- private String logPrefix;
+ @Nullable private String logPrefix;
/**
* Constructor.
diff --git a/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/AttributeRule.java b/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/AttributeRule.java
index 2f7edda0d..ce1f20607 100644
--- a/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/AttributeRule.java
+++ b/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/AttributeRule.java
@@ -59,10 +59,10 @@ public final class AttributeRule extends AbstractIdentifiableInitializableCompon
UnmodifiableComponent {
/** Class logger. */
- private final Logger log = LoggerFactory.getLogger(AttributeRule.class);
+ @Nonnull private final Logger log = LoggerFactory.getLogger(AttributeRule.class);
/** Log prefix. */
- private String logPrefix;
+ @Nullable private String logPrefix;
// Checkstyle: Javadoc OFF
// See https://github.com/checkstyle/checkstyle/issues/3351
@@ -81,12 +81,12 @@ public final class AttributeRule extends AbstractIdentifiableInitializableCompon
*/
// Checkstyle: Javadoc ON
- private String attributeId;
+ @NonnullAfterInit private String attributeId;
/**
* Filter that permits the release of attribute values.
*/
- private Matcher matcher;
+ @NonnullAfterInit private Matcher matcher;
/**
* Filter that denies the release of attribute values.
@@ -164,16 +164,19 @@ public final class AttributeRule extends AbstractIdentifiableInitializableCompon
* @param attribute attribute whose values will be filtered by this policy
* @param filterContext current filter context
*
+ * @throws AttributeFilterException if an error occurs while applying the rule
+ *
*/
- public void apply(@Nonnull final IdPAttribute attribute, @Nonnull final AttributeFilterContext filterContext) {
+ public void apply(@Nonnull final IdPAttribute attribute, @Nonnull final AttributeFilterContext filterContext)
+ throws AttributeFilterException {
checkComponentActive();
Constraint.isNotNull(attribute, "To-be-filtered attribute can not be null");
Constraint.isNotNull(filterContext, "Attribute filter context can not be null");
- final AttributeFilterWorkContext filterWorkContext =
- filterContext.getSubcontext(AttributeFilterWorkContext.class, false);
- Constraint.isNotNull(filterWorkContext, "Attribute filter work context can not be null");
+ final AttributeFilterWorkContext filterWorkContext = Constraint.isNotNull(
+ filterContext.getSubcontext(AttributeFilterWorkContext.class, false),
+ "Attribute filter work context can not be null");
log.debug("{} Filtering values for attribute '{}' which currently contains {} values", getLogPrefix(),
getAttributeId(), attribute.getValues().size());
@@ -220,10 +223,8 @@ public final class AttributeRule extends AbstractIdentifiableInitializableCompon
*
* @return Returns the logPrefix.
*/
- protected String getLogPrefix() {
- String result;
-
- result = logPrefix;
+ @Nonnull @NotEmpty protected String getLogPrefix() {
+ String result = logPrefix;
if (null == result) {
result = new StringBuffer("Attribute filtering engine '").append(getId()).append("' ").toString();
logPrefix = result;
@@ -231,4 +232,4 @@ public final class AttributeRule extends AbstractIdentifiableInitializableCompon
return result;
}
-}
+}
\ No newline at end of file
diff --git a/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/Matcher.java b/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/Matcher.java
index 937644720..e23027955 100644
--- a/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/Matcher.java
+++ b/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/Matcher.java
@@ -36,7 +36,7 @@ import net.shibboleth.shared.component.IdentifiedComponent;
public interface Matcher extends IdentifiedComponent {
/** A {@link Matcher} that returns true/all attribute values as matched. */
- public static final Matcher MATCHES_ALL = new Matcher() {
+ @Nonnull public static final Matcher MATCHES_ALL = new Matcher() {
/** {@inheritDoc} */
@Override public Set<IdPAttributeValue> getMatchingValues(@Nonnull final IdPAttribute attribute,
@@ -51,7 +51,7 @@ public interface Matcher extends IdentifiedComponent {
};
/** A {@link Matcher} that returns false/no attribute values as matched. */
- public static final Matcher MATCHES_NONE = new Matcher() {
+ @Nonnull public static final Matcher MATCHES_NONE = new Matcher() {
/** {@inheritDoc} */
@Override public Set<IdPAttributeValue> getMatchingValues(@Nonnull final IdPAttribute attribute,
@@ -66,7 +66,7 @@ public interface Matcher extends IdentifiedComponent {
};
/** A {@link Matcher} that fails. targetted primarily at testing, but also at odd corners of parsing. */
- public static final Matcher MATCHER_FAILS = new Matcher() {
+ @Nonnull public static final Matcher MATCHER_FAILS = new Matcher() {
/** {@inheritDoc} */
@Override public Set<IdPAttributeValue> getMatchingValues(@Nonnull final IdPAttribute attribute,
diff --git a/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/MatcherFromPolicy.java b/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/MatcherFromPolicy.java
index 943a6a72d..73241fa66 100644
--- a/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/MatcherFromPolicy.java
+++ b/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/MatcherFromPolicy.java
@@ -44,10 +44,10 @@ public final class MatcherFromPolicy extends BaseBridgingClass implements Matche
DestructableComponent {
/** The rule we are shadowing. */
- private final PolicyRequirementRule rule;
+ @Nonnull private final PolicyRequirementRule rule;
/** Class logger. */
- private final Logger log = LoggerFactory.getLogger(MatcherFromPolicy.class);
+ @Nonnull private final Logger log = LoggerFactory.getLogger(MatcherFromPolicy.class);
/**
* Constructor.
@@ -86,4 +86,4 @@ public final class MatcherFromPolicy extends BaseBridgingClass implements Matche
}
}
-}
+}
\ No newline at end of file
diff --git a/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/PolicyFromMatcher.java b/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/PolicyFromMatcher.java
index c28e28129..afcb28347 100644
--- a/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/PolicyFromMatcher.java
+++ b/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/PolicyFromMatcher.java
@@ -41,10 +41,10 @@ public final class PolicyFromMatcher extends BaseBridgingClass implements Policy
IdentifiedComponent, DestructableComponent {
/** The rule we are shadowing. */
- private final Matcher matcher;
+ @Nonnull private final Matcher matcher;
/** Class logger. */
- private final Logger log = LoggerFactory.getLogger(PolicyFromMatcher.class);
+ @Nonnull private final Logger log = LoggerFactory.getLogger(PolicyFromMatcher.class);
/**
* Constructor.
@@ -81,5 +81,5 @@ public final class PolicyFromMatcher extends BaseBridgingClass implements Policy
log.debug("{} Matcher returned no values for any attribute. Return FALSE", getLogPrefix());
return Tristate.FALSE;
}
-}
+}
\ No newline at end of file
diff --git a/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/PolicyFromMatcherId.java b/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/PolicyFromMatcherId.java
index 2ca9bde3f..db4ae5581 100644
--- a/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/PolicyFromMatcherId.java
+++ b/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/PolicyFromMatcherId.java
@@ -44,13 +44,13 @@ public final class PolicyFromMatcherId extends BaseBridgingClass implements Poli
IdentifiedComponent, DestructableComponent {
/** The rule we are shadowing. */
- private final Matcher theMatcher;
+ @Nonnull private final Matcher theMatcher;
/** The attribute Id we care about. */
- private final String attributeId;
+ @Nonnull @NotEmpty private final String attributeId;
/** Class logger. */
- private final Logger log = LoggerFactory.getLogger(PolicyFromMatcherId.class);
+ @Nonnull private final Logger log = LoggerFactory.getLogger(PolicyFromMatcherId.class);
/**
* Constructor.
@@ -103,5 +103,5 @@ public final class PolicyFromMatcherId extends BaseBridgingClass implements Poli
return Tristate.FALSE;
}
}
-}
+}
\ No newline at end of file
diff --git a/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/PolicyRequirementRule.java b/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/PolicyRequirementRule.java
index afdb1255a..317076f5d 100644
--- a/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/PolicyRequirementRule.java
+++ b/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/PolicyRequirementRule.java
@@ -48,7 +48,7 @@ public interface PolicyRequirementRule extends IdentifiedComponent {
};
/** A {@link PolicyRequirementRule} that returns true matched. */
- public static final PolicyRequirementRule MATCHES_ALL = new PolicyRequirementRule() {
+ @Nonnull public static final PolicyRequirementRule MATCHES_ALL = new PolicyRequirementRule() {
@Override public Tristate matches(@Nonnull final AttributeFilterContext filterContext) {
return Tristate.TRUE;
@@ -61,7 +61,7 @@ public interface PolicyRequirementRule extends IdentifiedComponent {
};
/** A {@link PolicyRequirementRule} that returns false as matched. */
- public static final PolicyRequirementRule MATCHES_NONE = new PolicyRequirementRule() {
+ @Nonnull public static final PolicyRequirementRule MATCHES_NONE = new PolicyRequirementRule() {
@Override public Tristate matches(@Nonnull final AttributeFilterContext filterContext) {
return Tristate.FALSE;
@@ -74,7 +74,7 @@ public interface PolicyRequirementRule extends IdentifiedComponent {
};
/** A {@link PolicyRequirementRule} that returns failed. */
- public static final PolicyRequirementRule REQUIREMENT_RULE_FAILS = new PolicyRequirementRule() {
+ @Nonnull public static final PolicyRequirementRule REQUIREMENT_RULE_FAILS = new PolicyRequirementRule() {
@Override public Tristate matches(@Nonnull final AttributeFilterContext filterContext) {
return Tristate.FAIL;
diff --git a/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterWorkContext.java b/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterWorkContext.java
index 8c9d7a571..2b6864e95 100644
--- a/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterWorkContext.java
+++ b/shib-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterWorkContext.java
@@ -32,6 +32,7 @@ import org.opensaml.messaging.context.BaseContext;
import net.shibboleth.idp.attribute.IdPAttribute;
import net.shibboleth.idp.attribute.IdPAttributeValue;
+import net.shibboleth.idp.attribute.filter.AttributeFilterException;
import net.shibboleth.shared.annotation.constraint.NonnullElements;
import net.shibboleth.shared.annotation.constraint.NotEmpty;
import net.shibboleth.shared.annotation.constraint.Unmodifiable;
@@ -79,11 +80,21 @@ public final class AttributeFilterWorkContext extends BaseContext {
*
* @param attributeId ID of the attribute whose values are permitted to be released
* @param attributeValues values for the attribute that are permitted to be released
+ *
+ * @throws AttributeFilterException if the context tree is invalid or the value(s) to add are
+ * not actually values of the attribute.
*/
public void addPermittedIdPAttributeValues(@Nonnull @NotEmpty final String attributeId,
- @Nullable @NonnullElements final Collection<IdPAttributeValue> attributeValues) {
- final AttributeFilterContext parent = (AttributeFilterContext) getParent();
- final Map<String, IdPAttribute> prefilteredAttributes = parent.getPrefilteredIdPAttributes();
+ @Nullable @NonnullElements final Collection<IdPAttributeValue> attributeValues)
+ throws AttributeFilterException {
+
+ final BaseContext parent = getParent();
+ if (!(parent instanceof AttributeFilterContext)) {
+ throw new AttributeFilterException("AttributeFilterWorkContext was not a child of AttributeFilterContext");
+ }
+
+ final Map<String, IdPAttribute> prefilteredAttributes =
+ ((AttributeFilterContext) parent).getPrefilteredIdPAttributes();
final String trimmedAttributeId =
Constraint.isNotNull(StringSupport.trimOrNull(attributeId), "Attribute ID can not be null or empty");
Constraint.isTrue(prefilteredAttributes.containsKey(trimmedAttributeId), "no attribute with ID "
@@ -102,7 +113,7 @@ public final class AttributeFilterWorkContext extends BaseContext {
for (final IdPAttributeValue value : attributeValues) {
Constraint.isNotNull(value, "non null value cannot be added to permitted list");
if (!prefilteredAttributes.get(trimmedAttributeId).getValues().contains(value)) {
- throw new IllegalArgumentException("permitted value is not a current value of attribute "
+ throw new AttributeFilterException("permitted value is not a current value of attribute "
+ trimmedAttributeId);
}
@@ -129,11 +140,21 @@ public final class AttributeFilterWorkContext extends BaseContext {
*
* @param attributeId ID of the attribute whose values are not permitted to be released
* @param attributeValues values for the attribute that are not permitted to be released
+ *
+ * @throws AttributeFilterException if the context tree is invalid or if the values being denied are not in fact
+ * values of the attribute
*/
public void addDeniedIdPAttributeValues(@Nonnull @NotEmpty final String attributeId,
- @Nullable @NonnullElements final Collection<IdPAttributeValue> attributeValues) {
- final AttributeFilterContext parent = (AttributeFilterContext) getParent();
- final Map<String, IdPAttribute> prefilteredAttributes = parent.getPrefilteredIdPAttributes();
+ @Nullable @NonnullElements final Collection<IdPAttributeValue> attributeValues)
+ throws AttributeFilterException {
+
+ final BaseContext parent = getParent();
+ if (!(parent instanceof AttributeFilterContext)) {
+ throw new AttributeFilterException("AttributeFilterWorkContext was not a child of AttributeFilterContext");
+ }
+
+ final Map<String, IdPAttribute> prefilteredAttributes =
+ ((AttributeFilterContext) parent).getPrefilteredIdPAttributes();
final String trimmedAttributeId =
Constraint.isNotNull(StringSupport.trimOrNull(attributeId), "Attribute ID can not be null or empty");
Constraint.isTrue(prefilteredAttributes.containsKey(trimmedAttributeId), "No attribute with ID "
@@ -152,7 +173,7 @@ public final class AttributeFilterWorkContext extends BaseContext {
for (final IdPAttributeValue value : attributeValues) {
Constraint.isNotNull(value, "non null value cannot be added to denied list");
if (!prefilteredAttributes.get(trimmedAttributeId).getValues().contains(value)) {
- throw new IllegalArgumentException("denied value is not a current value of attribute "
+ throw new AttributeFilterException("denied value is not a current value of attribute "
+ trimmedAttributeId);
}
@@ -162,4 +183,4 @@ public final class AttributeFilterWorkContext extends BaseContext {
}
}
-}
+}
\ No newline at end of file
diff --git a/shib-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/BaseBridgingClassTester.java b/shib-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/BaseBridgingClassTester.java
index 59f06a96d..a0d856005 100644
--- a/shib-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/BaseBridgingClassTester.java
+++ b/shib-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/BaseBridgingClassTester.java
@@ -20,6 +20,8 @@ package net.shibboleth.idp.attribute.filter;
import java.util.Arrays;
import java.util.LinkedHashSet;
+import javax.annotation.Nonnull;
+
import net.shibboleth.idp.attribute.IdPAttribute;
import net.shibboleth.idp.attribute.IdPAttributeValue;
import net.shibboleth.idp.attribute.StringAttributeValue;
@@ -42,8 +44,8 @@ public class BaseBridgingClassTester {
protected final String NAME1 = "foo";
protected final String NAME2 = "bar";
- protected AttributeFilterContext setUpCtx() {
- LinkedHashSet<IdPAttribute> attributes = new LinkedHashSet<>(2);
+ @Nonnull protected AttributeFilterContext setUpCtx() {
+ final LinkedHashSet<IdPAttribute> attributes = new LinkedHashSet<>(2);
IdPAttribute attribute = new IdPAttribute(NAME1);
attribute.setValues(Arrays.asList(VALUE1, VALUE2));
@@ -53,8 +55,8 @@ public class BaseBridgingClassTester {
attribute = new IdPAttribute(NAME2);
attribute.setValues(Arrays.asList(VALUE1, VALUE3));
attributes.add(attribute);
- AttributeFilterContext filterContext = new AttributeFilterContext();
-
+
+ final AttributeFilterContext filterContext = new AttributeFilterContext();
filterContext.setPrefilteredIdPAttributes(attributes);
return filterContext;
diff --git a/shib-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/MatcherFromPolicyTest.java b/shib-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/MatcherFromPolicyTest.java
index 6d47fb645..d1606306f 100644
--- a/shib-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/MatcherFromPolicyTest.java
+++ b/shib-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/MatcherFromPolicyTest.java
@@ -33,11 +33,13 @@ public class MatcherFromPolicyTest extends BaseBridgingClassTester {
@Test public void all() {
- Matcher matcher = new MatcherFromPolicy(PolicyRequirementRule.MATCHES_ALL);
+ final Matcher matcher = new MatcherFromPolicy(PolicyRequirementRule.MATCHES_ALL);
- AttributeFilterContext context = setUpCtx();
+ final AttributeFilterContext context = setUpCtx();
- Set<IdPAttributeValue> values = matcher.getMatchingValues(context.getPrefilteredIdPAttributes().get(NAME1), context);
+ final Set<IdPAttributeValue> values =
+ matcher.getMatchingValues(context.getPrefilteredIdPAttributes().get(NAME1), context);
+ assert values != null;
Assert.assertEquals(values.size(), 2);
Assert.assertTrue(values.contains(VALUE1));
@@ -45,11 +47,13 @@ public class MatcherFromPolicyTest extends BaseBridgingClassTester {
}
@Test public void none() {
- Matcher matcher = new MatcherFromPolicy(PolicyRequirementRule.MATCHES_NONE);
+ final Matcher matcher = new MatcherFromPolicy(PolicyRequirementRule.MATCHES_NONE);
- AttributeFilterContext context = setUpCtx();
+ final AttributeFilterContext context = setUpCtx();
- Set<IdPAttributeValue> values = matcher.getMatchingValues(context.getPrefilteredIdPAttributes().get(NAME1), context);
+ final Set<IdPAttributeValue> values =
+ matcher.getMatchingValues(context.getPrefilteredIdPAttributes().get(NAME1), context);
+ assert values != null;
Assert.assertTrue(values.isEmpty());
}
@@ -57,9 +61,10 @@ public class MatcherFromPolicyTest extends BaseBridgingClassTester {
@Test public void fails() {
Matcher matcher = new MatcherFromPolicy(PolicyRequirementRule.REQUIREMENT_RULE_FAILS);
- AttributeFilterContext context = setUpCtx();
+ final AttributeFilterContext context = setUpCtx();
- Set<IdPAttributeValue> values = matcher.getMatchingValues(context.getPrefilteredIdPAttributes().get(NAME1), context);
+ final Set<IdPAttributeValue> values =
+ matcher.getMatchingValues(context.getPrefilteredIdPAttributes().get(NAME1), context);
Assert.assertNull(values);
}
diff --git a/shib-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/PolicyFromMatcherIdTest.java b/shib-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/PolicyFromMatcherIdTest.java
index b14415ba6..241b6e752 100644
--- a/shib-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/PolicyFromMatcherIdTest.java
+++ b/shib-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/PolicyFromMatcherIdTest.java
@@ -32,7 +32,7 @@ public class PolicyFromMatcherIdTest extends BaseBridgingClassTester {
@Test public void all() {
PolicyFromMatcherId rule = new PolicyFromMatcherId(Matcher.MATCHES_ALL, NAME1);
- AttributeFilterContext context = setUpCtx();
+ final AttributeFilterContext context = setUpCtx();
Assert.assertTrue(rule.matches(context) == Tristate.TRUE);
Assert.assertEquals(rule.getAttributeId(), NAME1);
@@ -45,7 +45,7 @@ public class PolicyFromMatcherIdTest extends BaseBridgingClassTester {
@Test public void none() {
PolicyRequirementRule rule = new PolicyFromMatcherId(Matcher.MATCHES_NONE, NAME1);
- AttributeFilterContext context = setUpCtx();
+ final AttributeFilterContext context = setUpCtx();
Assert.assertTrue(rule.matches(context) == Tristate.FALSE);
Assert.assertTrue(new PolicyFromMatcherId(Matcher.MATCHES_NONE, "fred").matches(setUpCtx()) == Tristate.FALSE);
@@ -54,9 +54,10 @@ public class PolicyFromMatcherIdTest extends BaseBridgingClassTester {
@Test public void fails() {
PolicyRequirementRule rule = new PolicyFromMatcherId(Matcher.MATCHER_FAILS, NAME1);
- AttributeFilterContext context = setUpCtx();
+ final AttributeFilterContext context = setUpCtx();
Assert.assertTrue(rule.matches(context) == Tristate.FAIL);
Assert.assertTrue(new PolicyFromMatcherId(Matcher.MATCHER_FAILS, "fred").matches(context) == Tristate.FALSE);
}
-}
+
+}
\ No newline at end of file
diff --git a/shib-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterContextTest.java b/shib-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterContextTest.java
index 13b1c53c2..e45f1942f 100644
--- a/shib-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterContextTest.java
+++ b/shib-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterContextTest.java
@@ -35,6 +35,8 @@ public class AttributeFilterContextTest {
@Test public void testPostConstructionState() {
final AttributeFilterContext context = new AttributeFilterContext();
final AttributeFilterWorkContext child = context.getSubcontext(AttributeFilterWorkContext.class, true);
+ assert child != null;
+
Assert.assertNotNull(context.getFilteredIdPAttributes());
Assert.assertTrue(context.getFilteredIdPAttributes().isEmpty());
Assert.assertNull(context.getParent());
diff --git a/shib-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterWorkContextTest.java b/shib-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterWorkContextTest.java
index e6620c7c7..7f98d14d2 100644
--- a/shib-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterWorkContextTest.java
+++ b/shib-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterWorkContextTest.java
@@ -24,6 +24,7 @@ import java.util.Collections;
import net.shibboleth.idp.attribute.IdPAttribute;
import net.shibboleth.idp.attribute.IdPAttributeValue;
import net.shibboleth.idp.attribute.StringAttributeValue;
+import net.shibboleth.idp.attribute.filter.AttributeFilterException;
import net.shibboleth.shared.logic.ConstraintViolationException;
import org.testng.Assert;
@@ -40,12 +41,17 @@ public class AttributeFilterWorkContextTest {
- /** Testing getting and adding permitted attribute values. */
- @Test public void testPermittedAttributeValues() {
- AttributeFilterContext parent = new AttributeFilterContext();
- AttributeFilterWorkContext context = parent.getSubcontext(AttributeFilterWorkContext.class, true);
-
- IdPAttribute attribute1 = new IdPAttribute("one");
+ /**
+ * Testing getting and adding permitted attribute values.
+ *
+ * @throws AttributeFilterException
+ */
+ @Test public void testPermittedAttributeValues() throws AttributeFilterException {
+ final AttributeFilterContext parent = new AttributeFilterContext();
+ final AttributeFilterWorkContext context = parent.getSubcontext(AttributeFilterWorkContext.class, true);
+ assert context != null;
+
+ final IdPAttribute attribute1 = new IdPAttribute("one");
attribute1.setValues(Arrays.asList(aStringAttributeValue, bStringAttributeValue));
parent.getPrefilteredIdPAttributes().put(attribute1.getId(), attribute1);
@@ -64,38 +70,43 @@ public class AttributeFilterWorkContextTest {
try {
context.addPermittedIdPAttributeValues(null, Collections.singletonList(aStringAttributeValue));
Assert.fail();
- } catch (ConstraintViolationException e) {
+ } catch (final ConstraintViolationException e) {
// expected this
}
try {
context.addPermittedIdPAttributeValues("", Collections.singletonList(aStringAttributeValue));
Assert.fail();
- } catch (ConstraintViolationException e) {
+ } catch (final ConstraintViolationException e) {
// expected this
}
try {
context.addPermittedIdPAttributeValues("two", Collections.singletonList(aStringAttributeValue));
Assert.fail();
- } catch (ConstraintViolationException e) {
+ } catch (final ConstraintViolationException e) {
// expected this
}
try {
context.addPermittedIdPAttributeValues("one", Collections.singletonList(cStringAttributeValue));
Assert.fail();
- } catch (IllegalArgumentException e) {
+ } catch (final AttributeFilterException e) {
// expected this
}
}
- /** Testing getting and adding denied attribute values. */
- @Test public void testDeniedAttributeValues() {
- AttributeFilterContext parent = new AttributeFilterContext();
- AttributeFilterWorkContext context = parent.getSubcontext(AttributeFilterWorkContext.class, true);
-
- IdPAttribute attribute1 = new IdPAttribute("one");
+ /**
+ * Testing getting and adding denied attribute values.
+ *
+ * @throws AttributeFilterException
+ */
+ @Test public void testDeniedAttributeValues() throws AttributeFilterException {
+ final AttributeFilterContext parent = new AttributeFilterContext();
+ final AttributeFilterWorkContext context = parent.getSubcontext(AttributeFilterWorkContext.class, true);
+ assert context != null;
+
+ final IdPAttribute attribute1 = new IdPAttribute("one");
attribute1.setValues(Arrays.asList(aStringAttributeValue, bStringAttributeValue));
parent.getPrefilteredIdPAttributes().put(attribute1.getId(), attribute1);
@@ -114,28 +125,28 @@ public class AttributeFilterWorkContextTest {
try {
context.addDeniedIdPAttributeValues(null, Collections.singletonList(bStringAttributeValue));
Assert.fail();
- } catch (ConstraintViolationException e) {
+ } catch (final ConstraintViolationException e) {
// expected this
}
try {
context.addDeniedIdPAttributeValues("", Collections.singletonList(bStringAttributeValue));
Assert.fail();
- } catch (ConstraintViolationException e) {
+ } catch (final ConstraintViolationException e) {
// expected this
}
try {
context.addDeniedIdPAttributeValues("two", Collections.singletonList(bStringAttributeValue));
Assert.fail();
- } catch (ConstraintViolationException e) {
+ } catch (final ConstraintViolationException e) {
// expected this
}
try {
context.addDeniedIdPAttributeValues("one", Collections.singletonList(cStringAttributeValue));
Assert.fail();
- } catch (IllegalArgumentException e) {
+ } catch (final AttributeFilterException e) {
// expected this
}
}
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 deb6d1afa..75fc9abcd 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
@@ -100,7 +100,7 @@ public class AttributeFilterImpl extends AbstractServiceableComponent<AttributeF
throws AttributeFilterException {
checkComponentActive();
- Constraint.isNotNull(filterContext, "Attribute filter context can not be null");
+ Constraint.isNotNull(filterContext, "Attribute filter context cannot be null");
final boolean timerStarted = startTimer(filterContext);
try {
@@ -117,8 +117,9 @@ public class AttributeFilterImpl extends AbstractServiceableComponent<AttributeF
policy.apply(filterContext);
}
- for (Entry<String, IdPAttribute> entry : filterContext.getPrefilteredIdPAttributes().entrySet()) {
- final Collection<IdPAttributeValue> filteredAttributeValues = getFilteredValues(entry.getKey(), filterContext);
+ for (final Entry<String, IdPAttribute> entry : filterContext.getPrefilteredIdPAttributes().entrySet()) {
+ final Collection<IdPAttributeValue> filteredAttributeValues =
+ getFilteredValues(entry.getKey(), filterContext);
if (null != filteredAttributeValues && !filteredAttributeValues.isEmpty()) {
final IdPAttribute filteredAttribute;
try {
@@ -152,15 +153,15 @@ public class AttributeFilterImpl extends AbstractServiceableComponent<AttributeF
*/
@Nullable protected Collection<IdPAttributeValue> getFilteredValues(@Nonnull @NotEmpty final String attributeId,
@Nonnull final AttributeFilterContext filterContext) {
- Constraint.isNotNull(attributeId, "attributeId can not be null");
- Constraint.isNotNull(filterContext, "filterContext can not be null");
+ Constraint.isNotNull(attributeId, "attributeId cannot be null");
+ Constraint.isNotNull(filterContext, "filterContext cannot be null");
final AttributeFilterWorkContext filterWorkContext =
- filterContext.getSubcontext(AttributeFilterWorkContext.class, false);
- Constraint.isNotNull(filterWorkContext, "Attribute filter work context can not be null");
-
- final Collection<IdPAttributeValue> filteredAttributeValues = filterWorkContext.
- getPermittedIdPAttributeValues().get(attributeId);
+ filterContext.getSubcontext(AttributeFilterWorkContext.class);
+
+ final Collection<IdPAttributeValue> filteredAttributeValues =
+ Constraint.isNotNull(filterWorkContext, "AttributeFilterWorkContext cannot be null"
+ ).getPermittedIdPAttributeValues().get(attributeId);
if (filteredAttributeValues == null || filteredAttributeValues.isEmpty()) {
log.debug("Attribute filtering engine '{}': no policy permitted release of attribute {} values", getId(),
@@ -168,6 +169,8 @@ public class AttributeFilterImpl extends AbstractServiceableComponent<AttributeF
return null;
}
+ assert filterWorkContext != null;
+
if (filterWorkContext.getDeniedAttributeValues().containsKey(attributeId)) {
filteredAttributeValues.removeAll(filterWorkContext.getDeniedAttributeValues().get(attributeId));
}
diff --git a/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/impl/AbstractMatcher.java b/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/impl/AbstractMatcher.java
index 3647efaa1..6d71deb48 100644
--- a/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/impl/AbstractMatcher.java
+++ b/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/impl/AbstractMatcher.java
@@ -22,12 +22,14 @@ import java.util.LinkedHashSet;
import java.util.Set;
import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
import net.shibboleth.idp.attribute.IdPAttribute;
import net.shibboleth.idp.attribute.IdPAttributeValue;
import net.shibboleth.idp.attribute.filter.Matcher;
import net.shibboleth.idp.attribute.filter.context.AttributeFilterContext;
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;
@@ -41,10 +43,10 @@ import org.slf4j.LoggerFactory;
public abstract class AbstractMatcher extends AbstractIdentifiableInitializableComponent implements Matcher {
/** Class logger. */
- private final Logger log = LoggerFactory.getLogger(AbstractMatcher.class);
+ @Nonnull private final Logger log = LoggerFactory.getLogger(AbstractMatcher.class);
/** The String used to prefix log message. */
- private String logPrefix;
+ @Nullable private String logPrefix;
/** {@inheritDoc} */
@Override protected void doInitialize() throws ComponentInitializationException {
@@ -85,7 +87,7 @@ public abstract class AbstractMatcher extends AbstractIdentifiableInitializableC
*
* @return "Attribute Filter '<filterID>' :"
*/
- protected String getLogPrefix() {
+ @Nonnull @NotEmpty protected String getLogPrefix() {
// local cache of cached entry to allow unsynchronised clearing.
String prefix = logPrefix;
if (null == prefix) {
@@ -98,4 +100,4 @@ public abstract class AbstractMatcher extends AbstractIdentifiableInitializableC
return prefix;
}
-}
+}
\ No newline at end of file
diff --git a/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/impl/AttributeScopeStringMatcher.java b/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/impl/AttributeScopeStringMatcher.java
index 625edca51..cffaa6970 100644
--- a/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/impl/AttributeScopeStringMatcher.java
+++ b/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/impl/AttributeScopeStringMatcher.java
@@ -56,4 +56,4 @@ public class AttributeScopeStringMatcher extends AbstractStringMatcher {
return false;
}
-}
+}
\ No newline at end of file
diff --git a/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/impl/ScriptedMatcher.java b/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/impl/ScriptedMatcher.java
index 93c102e50..eb218b605 100644
--- a/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/impl/ScriptedMatcher.java
+++ b/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/impl/ScriptedMatcher.java
@@ -253,14 +253,18 @@ public class ScriptedMatcher extends AbstractIdentifiableInitializableComponent
@Override
protected void prepareContext(@Nonnull final ScriptContext scriptContext, @Nullable final Object... input) {
- scriptContext.setAttribute("attribute", input[0], ScriptContext.ENGINE_SCOPE);
- scriptContext.setAttribute("filterContext", input[1], ScriptContext.ENGINE_SCOPE);
-
- final ProfileRequestContext prc =
- ((AttributeFilterContext) input[1]).getProfileRequestContextLookupStrategy().apply(
- (AttributeFilterContext) input[1]);
-
- scriptContext.setAttribute("profileContext", prc, ScriptContext.ENGINE_SCOPE);
+ if (input != null) {
+ scriptContext.setAttribute("attribute", input[0], ScriptContext.ENGINE_SCOPE);
+ scriptContext.setAttribute("filterContext", input[1], ScriptContext.ENGINE_SCOPE);
+
+ final ProfileRequestContext prc =
+ ((AttributeFilterContext) input[1]).getProfileRequestContextLookupStrategy().apply(
+ (AttributeFilterContext) input[1]);
+
+ scriptContext.setAttribute("profileContext", prc, ScriptContext.ENGINE_SCOPE);
+ } else {
+ log.error("{} Script invoked with null inputs", getLogPrefix());
+ }
}
}
diff --git a/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/AttributeInMetadataMatcher.java b/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/AttributeInMetadataMatcher.java
index 5eb42f256..1df2da1e1 100644
--- a/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/AttributeInMetadataMatcher.java
+++ b/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/AttributeInMetadataMatcher.java
@@ -32,6 +32,7 @@ import org.opensaml.core.xml.XMLObject;
import org.opensaml.core.xml.schema.XSAny;
import org.opensaml.core.xml.schema.XSBase64Binary;
import org.opensaml.core.xml.schema.XSBoolean;
+import org.opensaml.core.xml.schema.XSBooleanValue;
import org.opensaml.core.xml.schema.XSDateTime;
import org.opensaml.core.xml.schema.XSInteger;
import org.opensaml.core.xml.schema.XSString;
@@ -197,6 +198,7 @@ public class AttributeInMetadataMatcher extends AbstractIdentifiableInitializabl
// Look for a RequestedAttribute explicitly identified by config.
log.debug("Looking for RequestedAttribute {} (NameFormat {}) in metadata", attributeName,
attributeNameFormat);
+ assert attributeName != null;
final RequestedAttribute requestedAttribute = findInMetadata(service, attributeName, attributeNameFormat);
final String attributeToLog = attributeName != null ? attributeName : attribute.getId();
@@ -217,10 +219,10 @@ public class AttributeInMetadataMatcher extends AbstractIdentifiableInitializabl
}
// Utilize pre-mapped approach.
- final List<AttributesMapContainer> containerList =
- service.getObjectMetadata().get(AttributesMapContainer.class);
- if (null == containerList || containerList.isEmpty() || containerList.get(0).get() == null ||
- containerList.get(0).get().isEmpty()) {
+
+ final Multimap<String,IdPAttribute> requestedAttributes = getMappedRequestedAttributes(service);
+
+ if (requestedAttributes == null || requestedAttributes.isEmpty()) {
log.debug("{} No decoded attributes found when filtering", getLogPrefix());
if (matchIfMetadataSilent) {
// TODO: not sure what the right answer is here
@@ -232,15 +234,8 @@ public class AttributeInMetadataMatcher extends AbstractIdentifiableInitializabl
+ ", returning no values", getLogPrefix());
return Collections.emptySet();
}
- if (containerList.size() > 1) {
- log.error("{} More than one set of mapped attributes found when filtering, this shouldn't ever happen",
- getLogPrefix());
- }
-
- final Multimap<String,IdPAttribute> requestedAttributes = containerList.get(0).get();
-
- final Collection<? extends IdPAttribute> requestedAttributeList =
- requestedAttributes.get(attribute.getId());
+
+ final Collection<IdPAttribute> requestedAttributeList = requestedAttributes.get(attribute.getId());
if (null == requestedAttributeList) {
log.debug("{} Decoded attribute {} not found in metadata", getLogPrefix(), attribute.getId());
return Collections.emptySet();
@@ -261,7 +256,6 @@ public class AttributeInMetadataMatcher extends AbstractIdentifiableInitializabl
}
return values;
-
}
// Checkstyle: CyclomaticComplexity|ReturnCount|MethodLength ON
@@ -285,7 +279,32 @@ public class AttributeInMetadataMatcher extends AbstractIdentifiableInitializabl
metadataContext.getSubcontext(AttributeConsumingServiceContext.class);
return acsContext != null ? acsContext.getAttributeConsumingService() : null;
}
-
+
+ /**
+ * Dig into the metadata to determine whether any mapped requested attribute information exists.
+ *
+ * @param service metadata service object
+ *
+ * @return the extracted map of requested attributes or null
+ */
+ @Nullable @NonnullElements private Multimap<String,IdPAttribute> getMappedRequestedAttributes(
+ @Nonnull final AttributeConsumingService service) {
+
+ final List<AttributesMapContainer> containerList =
+ service.getObjectMetadata().get(AttributesMapContainer.class);
+ if (null == containerList || containerList.isEmpty()) {
+ return null;
+ }
+
+ if (containerList.size() > 1) {
+ log.error("{} More than one set of mapped attributes found when filtering, this shouldn't ever happen",
+ getLogPrefix());
+ }
+
+ final AttributesMapContainer container = containerList.get(0);
+ return container != null ? container.get() : null;
+ }
+
/**
* Locates a RequestedAttribute object in metadata that matches a specific Attribute Name
* and NameFormat.
@@ -318,7 +337,7 @@ public class AttributeInMetadataMatcher extends AbstractIdentifiableInitializabl
* @param requestedValues the values
* @return the result of the filter
*/
- @Nonnull private Set<IdPAttributeValue> filterValues(@Nullable final IdPAttribute attribute,
+ @Nonnull private Set<IdPAttributeValue> filterValues(@Nonnull final IdPAttribute attribute,
@Nonnull @NonnullElements final List<IdPAttributeValue> requestedValues) {
if (null == requestedValues || requestedValues.isEmpty()) {
@@ -344,7 +363,7 @@ public class AttributeInMetadataMatcher extends AbstractIdentifiableInitializabl
*/
@Nonnull @Unmodifiable @NonnullElements private Set<IdPAttributeValue> filterValues(
@Nonnull final String attributeToLog,
- @Nullable final IdPAttribute attribute,
+ @Nonnull final IdPAttribute attribute,
@Nonnull @NonnullElements final List<XMLObject> requestedValues) {
if (requestedValues.isEmpty()) {
@@ -391,9 +410,18 @@ public class AttributeInMetadataMatcher extends AbstractIdentifiableInitializabl
} else if (xmlObj instanceof XSURI) {
toMatch = ((XSURI) xmlObj).getURI();
} else if (xmlObj instanceof XSBoolean) {
- toMatch = ((XSBoolean) xmlObj).getValue().getValue() ? "1" : "0";
+ final XSBooleanValue bval = ((XSBoolean) xmlObj).getValue();
+ if (bval != null) {
+ final Boolean flag = bval.getValue();
+ if (flag != null) {
+ toMatch = flag ? "1" : "0";
+ }
+ }
} else if (xmlObj instanceof XSInteger) {
- toMatch = ((XSInteger) xmlObj).getValue().toString();
+ final Integer ival = ((XSInteger) xmlObj).getValue();
+ if (ival != null) {
+ toMatch = ival.toString();
+ }
} else if (xmlObj instanceof XSDateTime) {
final Instant dt = ((XSDateTime) xmlObj).getValue();
if (dt != null) {
@@ -420,8 +448,8 @@ public class AttributeInMetadataMatcher extends AbstractIdentifiableInitializabl
*
* @return "Attribute Filter '<filterID>' :"
*/
- @Nonnull protected String getLogPrefix() {
- // local cache of cached entry to allow unsynchronised clearing.
+ @Nonnull @NotEmpty protected String getLogPrefix() {
+ // local cache of cached entry to allow unsynchronized clearing.
String prefix = logPrefix;
if (null == prefix) {
final StringBuilder builder = new StringBuilder("Attribute Filter '").append(getId()).append("':");
@@ -433,4 +461,4 @@ public class AttributeInMetadataMatcher extends AbstractIdentifiableInitializabl
return prefix;
}
-}
+}
\ No newline at end of file
diff --git a/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/policyrule/impl/ScriptedPolicyRule.java b/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/policyrule/impl/ScriptedPolicyRule.java
index 6502eefbb..f483edb24 100644
--- a/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/policyrule/impl/ScriptedPolicyRule.java
+++ b/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/policyrule/impl/ScriptedPolicyRule.java
@@ -245,12 +245,16 @@ public class ScriptedPolicyRule extends AbstractIdentifiableInitializableCompone
@Override
protected void prepareContext(@Nonnull final ScriptContext scriptContext, @Nullable final Object... input) {
- scriptContext.setAttribute("filterContext", input[0], ScriptContext.ENGINE_SCOPE);
-
- final ProfileRequestContext prc =
- ((AttributeFilterContext) input[0]).getProfileRequestContextLookupStrategy().apply(
- (AttributeFilterContext) input[0]);
- scriptContext.setAttribute("profileContext", prc, ScriptContext.ENGINE_SCOPE);
+ if (input != null) {
+ scriptContext.setAttribute("filterContext", input[0], ScriptContext.ENGINE_SCOPE);
+
+ final ProfileRequestContext prc =
+ ((AttributeFilterContext) input[0]).getProfileRequestContextLookupStrategy().apply(
+ (AttributeFilterContext) input[0]);
+ scriptContext.setAttribute("profileContext", prc, ScriptContext.ENGINE_SCOPE);
+ } else {
+ log.error("{} Script invoked with null inputs", getLogPrefix());
+ }
}
}
diff --git a/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/policyrule/saml/impl/AbstractEntityAttributePolicyRule.java b/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/policyrule/saml/impl/AbstractEntityAttributePolicyRule.java
index 35ad3784a..a67840a12 100644
--- a/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/policyrule/saml/impl/AbstractEntityAttributePolicyRule.java
+++ b/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/policyrule/saml/impl/AbstractEntityAttributePolicyRule.java
@@ -31,6 +31,7 @@ import org.opensaml.core.xml.XMLObject;
import org.opensaml.core.xml.schema.XSAny;
import org.opensaml.core.xml.schema.XSBase64Binary;
import org.opensaml.core.xml.schema.XSBoolean;
+import org.opensaml.core.xml.schema.XSBooleanValue;
import org.opensaml.core.xml.schema.XSDateTime;
import org.opensaml.core.xml.schema.XSInteger;
import org.opensaml.core.xml.schema.XSString;
@@ -210,7 +211,7 @@ public abstract class AbstractEntityAttributePolicyRule extends AbstractPolicyRu
*
* @return entity descriptor for the entity to check or null if not found
*/
- @Nullable protected abstract EntityDescriptor getEntityMetadata(AttributeFilterContext filterContext);
+ @Nullable protected abstract EntityDescriptor getEntityMetadata(@Nonnull AttributeFilterContext filterContext);
/**
* Checks whether the given entity attribute's values match for particular implementations of this functor.
@@ -299,10 +300,8 @@ public abstract class AbstractEntityAttributePolicyRule extends AbstractPolicyRu
private void getMappedEntityAttributeValues(@Nonnull final XMLObject metadataObject,
@Nonnull @NonnullElements final Set<String> valueAccumulator) {
- final List<AttributesMapContainer> containerList =
- metadataObject.getObjectMetadata().get(AttributesMapContainer.class);
- if (null == containerList || containerList.isEmpty() || containerList.get(0).get() == null ||
- containerList.get(0).get().isEmpty()) {
+ final Multimap<String, IdPAttribute> mappedAttributes = getMappedRequestedAttributes(metadataObject);
+ if (mappedAttributes == null || mappedAttributes.isEmpty()) {
log.debug("{} No mapped entity attributes found for {}", getLogPrefix(), attrName);
return;
}
@@ -311,7 +310,6 @@ public abstract class AbstractEntityAttributePolicyRule extends AbstractPolicyRu
int count = 0;
- final Multimap<String, IdPAttribute> mappedAttributes = containerList.get(0).get();
for (final IdPAttribute attribute : mappedAttributes.get(attrName)) {
for (final IdPAttributeValue attributeValue : attribute.getValues()) {
if (attributeValue instanceof StringAttributeValue) {
@@ -326,6 +324,31 @@ public abstract class AbstractEntityAttributePolicyRule extends AbstractPolicyRu
log.debug("{} Added {} values of mapped entity attribute {} for evaluation", getLogPrefix(), count, attrName);
}
+ /**
+ * Dig into the metadata to determine whether any mapped requested attribute information exists.
+ *
+ * @param metadataObject metadata object
+ *
+ * @return the extracted map of requested attributes or null
+ */
+ @Nullable @NonnullElements private Multimap<String,IdPAttribute> getMappedRequestedAttributes(
+ @Nonnull final XMLObject metadataObject) {
+
+ final List<AttributesMapContainer> containerList =
+ metadataObject.getObjectMetadata().get(AttributesMapContainer.class);
+ if (null == containerList || containerList.isEmpty()) {
+ return null;
+ }
+
+ if (containerList.size() > 1) {
+ log.error("{} More than one set of mapped attributes found when filtering, this shouldn't ever happen",
+ getLogPrefix());
+ }
+
+ final AttributesMapContainer container = containerList.get(0);
+ return container != null ? container.get() : null;
+ }
+
/**
* Function to return an XMLObject in string form.
*
@@ -347,11 +370,20 @@ public abstract class AbstractEntityAttributePolicyRule extends AbstractPolicyRu
} else if (object instanceof XSBoolean) {
- retVal = ((XSBoolean) object).getValue().getValue() ? "1" : "0";
+ final XSBooleanValue bval = ((XSBoolean) object).getValue();
+ if (bval != null) {
+ final Boolean flag = bval.getValue();
+ if (flag != null) {
+ retVal = flag ? "1" : "0";
+ }
+ }
} else if (object instanceof XSInteger) {
- retVal = ((XSInteger) object).getValue().toString();
+ final Integer ival = ((XSInteger) object).getValue();
+ if (ival != null) {
+ retVal = ival.toString();
+ }
} else if (object instanceof XSDateTime) {
diff --git a/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/policyrule/saml/impl/AbstractRegistrationAuthorityPolicyRule.java b/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/policyrule/saml/impl/AbstractRegistrationAuthorityPolicyRule.java
index 96edeca70..5c3e12adf 100644
--- a/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/policyrule/saml/impl/AbstractRegistrationAuthorityPolicyRule.java
+++ b/shib-attribute-filter-impl/src/main/java/net/shibboleth/idp/attribute/filter/policyrule/saml/impl/AbstractRegistrationAuthorityPolicyRule.java
@@ -18,6 +18,7 @@
package net.shibboleth.idp.attribute.filter.policyrule.saml.impl;
import java.util.Collection;
+import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.Set;
@@ -53,7 +54,14 @@ public abstract class AbstractRegistrationAuthorityPolicyRule extends AbstractPo
/** What to say if no MDRPI is present. */
private boolean matchIfMetadataSilent;
-
+
+ /**
+ * Constructor.
+ */
+ public AbstractRegistrationAuthorityPolicyRule() {
+ registrars = Collections.emptySet();
+ }
+
/**
* Get the candidate registrars.
*
diff --git a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/complex/impl/BaseComplexAttributeFilterTestCase.java b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/complex/impl/BaseComplexAttributeFilterTestCase.java
index ddb238d9d..84cc9d0b9 100644
--- a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/complex/impl/BaseComplexAttributeFilterTestCase.java
+++ b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/complex/impl/BaseComplexAttributeFilterTestCase.java
@@ -19,13 +19,19 @@ package net.shibboleth.idp.attribute.filter.complex.impl;
import java.util.Map;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
import net.shibboleth.idp.attribute.IdPAttribute;
import net.shibboleth.idp.attribute.filter.AttributeFilter;
import net.shibboleth.idp.attribute.resolver.ResolutionException;
import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
import net.shibboleth.idp.attribute.resolver.dc.impl.testing.SAMLAttributeDataConnector;
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.Constraint;
import net.shibboleth.shared.logic.FunctionSupport;
import org.opensaml.core.testing.XMLObjectBaseTestCase;
@@ -36,7 +42,7 @@ import org.opensaml.saml.ext.saml2mdattr.EntityAttributes;
*/
public class BaseComplexAttributeFilterTestCase extends XMLObjectBaseTestCase {
- private static final String PATH = "/net/shibboleth/idp/filter/impl/complex/";
+ @Nonnull @NotEmpty private static final String PATH = "/net/shibboleth/idp/filter/impl/complex/";
/**
* Helper function to return attributes pulled from a file (on the classpath). The file is expected to contain a
@@ -44,17 +50,18 @@ public class BaseComplexAttributeFilterTestCase extends XMLObjectBaseTestCase {
*
* @param xmlFileName the file within the test directory.
*
- * @return the att
+ * @return the attributes
*
* @throws ComponentInitializationException ...
* @throws ResolutionException ...
*/
- protected Map<String, IdPAttribute> getIdPAttributes(String xmlFileName) throws ComponentInitializationException,
- ResolutionException {
+ @Nonnull @NonnullElements protected Map<String,IdPAttribute> getIdPAttributes(@Nonnull @NotEmpty String xmlFileName)
+ throws ComponentInitializationException, ResolutionException {
final EntityAttributes obj = (EntityAttributes) unmarshallElement(PATH + xmlFileName);
+ assert obj != null;
- SAMLAttributeDataConnector connector = new SAMLAttributeDataConnector();
+ final SAMLAttributeDataConnector connector = new SAMLAttributeDataConnector();
connector.setId(xmlFileName);
connector.setAttributesStrategy(FunctionSupport.constant(obj.getAttributes()));
@@ -62,10 +69,17 @@ public class BaseComplexAttributeFilterTestCase extends XMLObjectBaseTestCase {
final AttributeResolutionContext context = new AttributeResolutionContext();
context.getSubcontext(AttributeResolverWorkContext.class, true);
- return connector.resolve(context);
+ return Constraint.isNotNull(connector.resolve(context), "Resolved Attributes were null");
}
- protected AttributeFilter getPolicy(String xmlFileName) {
+ /**
+ * Get filter policy.
+ *
+ * @param xmlFileName the file withiin the test directory
+ *
+ * @return policy
+ */
+ @Nullable protected AttributeFilter getPolicy(@Nonnull @NotEmpty String xmlFileName) {
return null;
}
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 d0a3a35c7..95898ca53 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
@@ -23,6 +23,8 @@ import static org.testng.Assert.assertNull;
import java.util.Collections;
import java.util.Map;
+import javax.annotation.Nonnull;
+
import org.testng.annotations.Test;
import net.shibboleth.idp.attribute.IdPAttribute;
@@ -48,20 +50,15 @@ import net.shibboleth.shared.testing.MockApplicationContext;
public class TargettedAttributeValueFilterTest extends BaseComplexAttributeFilterTestCase {
/*
- * We will test this rule: xsi:type="basic:AttributeValueString" value="jsmith" attributeId="uid" ignoreCase="true"
+ * We will test this rule: xsi:type="basic:AttributeValueString" value="jsmith" attributeId="uid" ignoreCase="true".
*/
- private Matcher valueMatcher() {
+ @Nonnull private Matcher valueMatcher() throws ComponentInitializationException {
AttributeValueStringMatcher retVal = new AttributeValueStringMatcher();
retVal.setCaseSensitive(true);
retVal.setMatchString("jsmith");
retVal.setId("Test");
- try {
- retVal.initialize();
- } catch (final ComponentInitializationException e) {
- retVal = null;
- }
-
+ retVal.initialize();
return retVal;
}
@@ -101,31 +98,36 @@ public class TargettedAttributeValueFilterTest extends BaseComplexAttributeFilte
new AttributeFilterPolicy("targettedAtPermit", PolicyRequirementRule.MATCHES_ALL,
Collections.singleton(attributeValueFilterPolicy));
- final AttributeFilterImpl engine = new AttributeFilterImpl("engine", Collections.singleton(policy));
- engine.setApplicationContext(new MockApplicationContext());
+ 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();
- attributeValueFilterPolicy.initialize();
- policy.initialize();
- engine.initialize();
+ engine.setApplicationContext(new MockApplicationContext());
- 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);
+ attributeValueFilterPolicy.initialize();
+ policy.initialize();
+ engine.initialize();
- context = new AttributeFilterContext();
- context.setPrefilteredIdPAttributes(getIdPAttributes("uid-epawithjsmith.xml").values());
- engine.filterAttributes(context);
- attributes = context.getFilteredIdPAttributes();
- assertNull(attributes.get("eduPersonAffiliation"));
+ 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("epa-uid.xml").values());
- engine.filterAttributes(context);
- attributes = context.getFilteredIdPAttributes();
- assertNull(attributes.get("eduPersonAffiliation"));
+ 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"));
+ }
}
/**
@@ -169,32 +171,36 @@ public class TargettedAttributeValueFilterTest extends BaseComplexAttributeFilte
new AttributeFilterPolicy("targettedAtPermit", PolicyRequirementRule.MATCHES_ALL,
Collections.singleton(attributeValueFilterPolicy));
- final AttributeFilterImpl engine = new AttributeFilterImpl("engine", Collections.singleton(policy));
- 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();
- 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);
+ 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();
+ 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);
+ }
}
/**
@@ -229,31 +235,36 @@ public class TargettedAttributeValueFilterTest extends BaseComplexAttributeFilte
final AttributeFilterPolicy policy =
new AttributeFilterPolicy("targettedAtPermit", rule, Collections.singleton(attributeValueFilterPolicy));
- final AttributeFilterImpl engine = new AttributeFilterImpl("engine", Collections.singleton(policy));
- 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);
+ try (final AttributeFilterImpl engine = new AttributeFilterImpl("engine", Collections.singleton(policy))) {
- 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"));
+ // 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"));
+ }
}
}
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 037582e58..a0cefc683 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
@@ -23,6 +23,8 @@ import static org.testng.Assert.assertNull;
import java.util.Collections;
import java.util.Map;
+import javax.annotation.Nonnull;
+
import org.testng.annotations.Test;
import net.shibboleth.idp.attribute.IdPAttribute;
@@ -47,18 +49,14 @@ public class UntargettedAttributeValueFilterTest extends BaseComplexAttributeFil
/*
* We will test this rule: xsi:type="basic:AttributeValueString" value="jsmith" ignoreCase="true"
*/
- private Matcher valueMatcher() {
+ @Nonnull private Matcher valueMatcher() throws ComponentInitializationException {
AttributeValueStringMatcher retVal = new AttributeValueStringMatcher();
retVal.setCaseSensitive(true);
retVal.setMatchString("jsmith");
retVal.setId("valueMatcher");
- try {
- retVal.initialize();
- } catch (ComponentInitializationException e) {
- retVal = null;
- }
+ retVal.initialize();
return retVal;
}
@@ -93,31 +91,37 @@ public class UntargettedAttributeValueFilterTest extends BaseComplexAttributeFil
final AttributeFilterPolicy policy =
new AttributeFilterPolicy("targettedAtPermit", PolicyRequirementRule.MATCHES_ALL,
Collections.singleton(attributeValueFilterPolicy));
- final AttributeFilterImpl engine = new AttributeFilterImpl("engine", Collections.singleton(policy));
- 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"));
+
+ 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"));
+ }
}
/**
@@ -151,31 +155,36 @@ public class UntargettedAttributeValueFilterTest extends BaseComplexAttributeFil
final AttributeFilterPolicy policy =
new AttributeFilterPolicy("targettedAtPermit", rule, Collections.singleton(attributeValueFilterPolicy));
- final AttributeFilterImpl engine = new AttributeFilterImpl("engine", Collections.singleton(policy));
- 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();
- 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();
- attribute = attributes.get("eduPersonAffiliation");
- assertEquals(attribute.getValues().size(), 3);
-
- context = new AttributeFilterContext();
- context.setPrefilteredIdPAttributes(getIdPAttributes("epa-uid.xml").values());
- engine.filterAttributes(context);
- attributes = context.getFilteredIdPAttributes();
- assertNull(attributes.get("eduPersonAffiliation"));
+ 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();
+ 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();
+ attribute = attributes.get("eduPersonAffiliation");
+ assertEquals(attribute.getValues().size(), 3);
+
+ context = new AttributeFilterContext();
+ context.setPrefilteredIdPAttributes(getIdPAttributes("epa-uid.xml").values());
+ 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 5e4ea31d1..0161411e8 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
@@ -50,29 +50,31 @@ public class AttributeFilterImplTest {
* @throws Exception if something goes wrong
*/
@Test public void testPostConstructionState() throws Exception {
- AttributeFilter filter = new AttributeFilterImpl("engine", Collections.EMPTY_LIST);
- Assert.assertNotNull(filter.getFilterPolicies());
- Assert.assertTrue(filter.getFilterPolicies().isEmpty());
- Assert.assertEquals(filter.getId(), "engine");
+ try (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");
+ }
- try {
- new AttributeFilterImpl(" ", null);
+ try (final AttributeFilterImpl engine = new AttributeFilterImpl(" ", null)) {
Assert.fail();
- } catch (ConstraintViolationException e) {
+ } catch (final ConstraintViolationException e) {
// expected
}
- try {
- new AttributeFilterImpl("", null);
+ try (final AttributeFilterImpl engine = new AttributeFilterImpl("", null)) {
Assert.fail();
- } catch (ConstraintViolationException e) {
+ } catch (final ConstraintViolationException e) {
// expected
}
- try {
- new AttributeFilterImpl(null, null);
+ try (final AttributeFilterImpl engine = new AttributeFilterImpl(null, null)) {
Assert.fail();
- } catch (ConstraintViolationException e) {
+ } catch (final ConstraintViolationException e) {
// expected
}
}
@@ -87,35 +89,44 @@ public class AttributeFilterImplTest {
AttributeFilterPolicy policy2 = new AttributeFilterPolicy("policy2", PolicyRequirementRule.MATCHES_NONE, null);
AttributeFilterPolicy policy3 = new AttributeFilterPolicy("policy3", PolicyRequirementRule.MATCHES_NONE, null);
- AttributeFilterImpl filter = new AttributeFilterImpl("engine", Arrays.asList(policy1, policy1, policy2));
- 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());
-
- filter = new AttributeFilterImpl("engine", Arrays.asList(policy1, policy2));
- 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
+ try (final 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());
+ }
+
+ 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();
+
+ 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
+ }
}
}
@@ -125,48 +136,53 @@ public class AttributeFilterImplTest {
* @throws Exception if something goes wrong
*/
@Test public void testFilterAttributes() throws Exception {
- MockMatcher attribute1Matcher = new MockMatcher();
+ final MockMatcher attribute1Matcher = new MockMatcher();
attribute1Matcher.setMatchingAttribute("attribute1");
attribute1Matcher.setMatchingValues(null);
- AttributeRule attribute1Policy = new AttributeRule();
+ final AttributeRule attribute1Policy = new AttributeRule();
attribute1Policy.setId("attribute1Policy");
attribute1Policy.setAttributeId("attribute1");
attribute1Policy.setMatcher(attribute1Matcher);
attribute1Policy.setIsDenyRule(false);
- AttributeFilterPolicy policy =
+ final AttributeFilterPolicy policy =
new AttributeFilterPolicy("attribute1Policy", PolicyRequirementRule.MATCHES_ALL,
Collections.singletonList(attribute1Policy));
- AttributeFilterContext filterContext = new AttributeFilterContext();
+ final AttributeFilterContext filterContext = new AttributeFilterContext();
- IdPAttribute attribute1 = new IdPAttribute("attribute1");
+ final IdPAttribute attribute1 = new IdPAttribute("attribute1");
attribute1.setValues(Arrays.asList(new StringAttributeValue("one"), new StringAttributeValue("two")));
filterContext.getPrefilteredIdPAttributes().put(attribute1.getId(), attribute1);
- IdPAttribute attribute2 = new IdPAttribute("attribute2");
+ final IdPAttribute attribute2 = new IdPAttribute("attribute2");
attribute2.setValues(Arrays.asList(new StringAttributeValue("a"), new StringAttributeValue("b")));
filterContext.getPrefilteredIdPAttributes().put(attribute2.getId(), attribute2);
- 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")));
+ 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());
+ 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 {
- AttributeRule attribute1Policy = new AttributeRule();
+ final AttributeRule attribute1Policy = new AttributeRule();
attribute1Policy.setId("attribute1Policy");
attribute1Policy.setAttributeId("attribute1");
attribute1Policy.setMatcher(Matcher.MATCHES_ALL);
@@ -176,224 +192,263 @@ public class AttributeFilterImplTest {
new AttributeFilterPolicy("attribute1Policy", PolicyRequirementRule.MATCHES_ALL,
Collections.singletonList(attribute1Policy));
- AttributeFilterContext filterContext = new AttributeFilterContext();
+ final AttributeFilterContext filterContext = new AttributeFilterContext();
- IdPAttribute attribute1 = new IdPAttribute("attribute1");
+ final IdPAttribute attribute1 = new IdPAttribute("attribute1");
attribute1.setValues(Arrays.asList(new StringAttributeValue("one"), new StringAttributeValue("two")));
filterContext.getPrefilteredIdPAttributes().put(attribute1.getId(), attribute1);
attribute1Policy.initialize();
policy.initialize();
- AttributeFilterImpl filter = new AttributeFilterImpl("engine", Collections.singletonList(policy));
- filter.setApplicationContext(new MockApplicationContext());
- filter.initialize();
-
- filter.filterAttributes(filterContext);
- 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")));
+
+ 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")));
+ }
}
@Test public void testAllMatcherFails() throws Exception {
- AttributeRule attribute2Policy = new AttributeRule();
+ final AttributeRule attribute2Policy = new AttributeRule();
attribute2Policy.setId("attribute2Policy");
attribute2Policy.setAttributeId("attribute1");
- MockMatcher matcher = new MockMatcher();
+ final MockMatcher matcher = new MockMatcher();
matcher.setFailValidate(true);
attribute2Policy.setMatcher(matcher);
attribute2Policy.setIsDenyRule(false);
- AttributeFilterPolicy policy =
+ final AttributeFilterPolicy policy =
new AttributeFilterPolicy("attribute1Policy", PolicyRequirementRule.MATCHES_ALL,
Collections.singletonList(attribute2Policy));
- AttributeFilterContext filterContext = new AttributeFilterContext();
+ final AttributeFilterContext filterContext = new AttributeFilterContext();
- IdPAttribute attribute1 = new IdPAttribute("attribute1");
+ final IdPAttribute attribute1 = new IdPAttribute("attribute1");
attribute1.setValues(Arrays.asList(new StringAttributeValue("one"), new StringAttributeValue("two")));
filterContext.getPrefilteredIdPAttributes().put(attribute1.getId(), attribute1);
attribute2Policy.initialize();
policy.initialize();
- AttributeFilterImpl filter = new AttributeFilterImpl("engine", Collections.singletonList(policy));
- filter.setApplicationContext(new MockApplicationContext());
- filter.initialize();
+
+ try (final AttributeFilterImpl filter = new AttributeFilterImpl("engine", Collections.singletonList(policy))) {
- filter.filterAttributes(filterContext);
- Assert.assertTrue(filterContext.getFilteredIdPAttributes().isEmpty());
+ // 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);
+ Assert.assertTrue(filterContext.getFilteredIdPAttributes().isEmpty());
+ }
}
@Test public void testNoneMatcher() throws Exception {
- AttributeRule attribute1Policy = new AttributeRule();
+ final AttributeRule attribute1Policy = new AttributeRule();
attribute1Policy.setId("attribute1Policy");
attribute1Policy.setAttributeId("attribute1");
attribute1Policy.setMatcher(Matcher.MATCHES_NONE);
attribute1Policy.setIsDenyRule(false);
- AttributeFilterPolicy policy =
+ final AttributeFilterPolicy policy =
new AttributeFilterPolicy("attribute1Policy", PolicyRequirementRule.MATCHES_ALL,
Collections.singletonList(attribute1Policy));
- AttributeFilterContext filterContext = new AttributeFilterContext();
+ final AttributeFilterContext filterContext = new AttributeFilterContext();
- IdPAttribute attribute1 = new IdPAttribute("attribute1");
+ final IdPAttribute attribute1 = new IdPAttribute("attribute1");
attribute1.setValues(Arrays.asList(new StringAttributeValue("one"), new StringAttributeValue("two")));
filterContext.getPrefilteredIdPAttributes().put(attribute1.getId(), attribute1);
- AttributeFilterImpl filter = new AttributeFilterImpl("engine", Collections.singletonList(policy));
- filter.setApplicationContext(new MockApplicationContext());
- attribute1Policy.initialize();
- policy.initialize();
- filter.initialize();
+ try (final AttributeFilterImpl filter = new AttributeFilterImpl("engine", Collections.singletonList(policy))) {
- filter.filterAttributes(filterContext);
- Assert.assertTrue(filterContext.getFilteredIdPAttributes().isEmpty());
+ // TODO: this seems off but is needed to allow try-with-resources while also unlocking.
+ filter.pinComponent();
+
+ filter.setApplicationContext(new MockApplicationContext());
+ attribute1Policy.initialize();
+ policy.initialize();
+ filter.initialize();
+
+ filter.filterAttributes(filterContext);
+ Assert.assertTrue(filterContext.getFilteredIdPAttributes().isEmpty());
+ }
}
@Test public void testDenyFilterAttributes() throws Exception {
- MockMatcher deny = new MockMatcher();
+ final MockMatcher deny = new MockMatcher();
deny.setMatchingAttribute("attribute1");
deny.setMatchingValues(Collections.singletonList(new StringAttributeValue("one")));
- AttributeRule denyPolicy = new AttributeRule();
+ final AttributeRule denyPolicy = new AttributeRule();
denyPolicy.setId("denyPolicy");
denyPolicy.setAttributeId("attribute1");
denyPolicy.setMatcher(deny);
denyPolicy.setIsDenyRule(true);
- AttributeRule allowPolicy = new AttributeRule();
+ final AttributeRule allowPolicy = new AttributeRule();
allowPolicy.setId("allowPolicy");
allowPolicy.setAttributeId("attribute1");
allowPolicy.setMatcher(Matcher.MATCHES_ALL);
allowPolicy.setIsDenyRule(false);
- AttributeFilterPolicy policy =
+ final AttributeFilterPolicy policy =
new AttributeFilterPolicy("attribute1Policy", PolicyRequirementRule.MATCHES_ALL,
Arrays.asList(denyPolicy, allowPolicy));
- AttributeFilterContext filterContext = new AttributeFilterContext();
+ final AttributeFilterContext filterContext = new AttributeFilterContext();
- IdPAttribute attribute1 = new IdPAttribute("attribute1");
+ final IdPAttribute attribute1 = new IdPAttribute("attribute1");
attribute1.setValues(Arrays.asList(new StringAttributeValue("one"), new StringAttributeValue("two")));
filterContext.getPrefilteredIdPAttributes().put(attribute1.getId(), attribute1);
- AttributeFilterImpl filter = new AttributeFilterImpl("engine", Collections.singletonList(policy));
- filter.setApplicationContext(new MockApplicationContext());
- denyPolicy.initialize();
- allowPolicy.initialize();
- policy.initialize();
- filter.initialize();
-
- filter.filterAttributes(filterContext);
- Map<String, IdPAttribute> resultAttrs = filterContext.getFilteredIdPAttributes();
- Assert.assertEquals(resultAttrs.size(), 1);
- List<IdPAttributeValue> result = resultAttrs.get("attribute1").getValues();
- Assert.assertEquals(result.size(), 1);
- Assert.assertTrue(result.contains(new StringAttributeValue("two")));
+ 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());
+ 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 {
- AttributeRule allowPolicy = new AttributeRule();
+ final AttributeRule allowPolicy = new AttributeRule();
allowPolicy.setId("allowPolicy");
allowPolicy.setAttributeId("attribute1");
allowPolicy.setMatcher(Matcher.MATCHES_ALL);
allowPolicy.setIsDenyRule(false);
- AttributeFilterPolicy policy =
+ final AttributeFilterPolicy policy =
new AttributeFilterPolicy("attribute1Policy", PolicyRequirementRule.MATCHES_NONE,
Collections.singletonList(allowPolicy));
- AttributeFilterContext filterContext = new AttributeFilterContext();
+ final AttributeFilterContext filterContext = new AttributeFilterContext();
- IdPAttribute attribute1 = new IdPAttribute("attribute1");
+ final IdPAttribute attribute1 = new IdPAttribute("attribute1");
attribute1.setValues(Arrays.asList(new StringAttributeValue("one"), new StringAttributeValue("two")));
filterContext.getPrefilteredIdPAttributes().put(attribute1.getId(), attribute1);
- AttributeFilterImpl filter = new AttributeFilterImpl("engine", Collections.singletonList(policy));
- filter.setApplicationContext(new MockApplicationContext());
- policy.initialize();
- filter.initialize();
+ try (final AttributeFilterImpl filter = new AttributeFilterImpl("engine", Collections.singletonList(policy))) {
- filter.filterAttributes(filterContext);
- Assert.assertTrue(filterContext.getFilteredIdPAttributes().isEmpty());
+ // TODO: this seems off but is needed to allow try-with-resources while also unlocking.
+ filter.pinComponent();
+
+ filter.setApplicationContext(new MockApplicationContext());
+ policy.initialize();
+ filter.initialize();
+
+ filter.filterAttributes(filterContext);
+ Assert.assertTrue(filterContext.getFilteredIdPAttributes().isEmpty());
+ }
}
@Test public void testDenyAllFilterAttributes() throws Exception {
- AttributeRule denyPolicy = new AttributeRule();
+ final AttributeRule denyPolicy = new AttributeRule();
denyPolicy.setId("denyPolicy");
denyPolicy.setAttributeId("attribute1");
denyPolicy.setMatcher(Matcher.MATCHES_ALL);
denyPolicy.setIsDenyRule(true);
- AttributeRule allowPolicy = new AttributeRule();
+ final AttributeRule allowPolicy = new AttributeRule();
allowPolicy.setId("allowPolicy");
allowPolicy.setAttributeId("attribute1");
allowPolicy.setMatcher(Matcher.MATCHES_ALL);
allowPolicy.setIsDenyRule(false);
- AttributeFilterPolicy policy =
+ final AttributeFilterPolicy policy =
new AttributeFilterPolicy("attribute1Policy", PolicyRequirementRule.MATCHES_ALL,
Arrays.asList(denyPolicy, allowPolicy));
- AttributeFilterContext filterContext = new AttributeFilterContext();
+ final AttributeFilterContext filterContext = new AttributeFilterContext();
- IdPAttribute attribute1 = new IdPAttribute("attribute1");
+ final IdPAttribute attribute1 = new IdPAttribute("attribute1");
attribute1.setValues(Arrays.asList(new StringAttributeValue("one"), new StringAttributeValue("two")));
filterContext.getPrefilteredIdPAttributes().put(attribute1.getId(), attribute1);
- AttributeFilterImpl filter = new AttributeFilterImpl("engine", Collections.singletonList(policy));
- filter.setApplicationContext(new MockApplicationContext());
- allowPolicy.initialize();
- denyPolicy.initialize();
- policy.initialize();
- filter.initialize();
+ try (final AttributeFilterImpl filter = new AttributeFilterImpl("engine", Collections.singletonList(policy))) {
- filter.filterAttributes(filterContext);
- Map<String, IdPAttribute> resultAttrs = filterContext.getFilteredIdPAttributes();
- Assert.assertTrue(resultAttrs.isEmpty());
+ // TODO: this seems off but is needed to allow try-with-resources while also unlocking.
+ filter.pinComponent();
+
+ filter.setApplicationContext(new MockApplicationContext());
+ allowPolicy.initialize();
+ denyPolicy.initialize();
+ policy.initialize();
+ filter.initialize();
+
+ filter.filterAttributes(filterContext);
+ final Map<String, IdPAttribute> resultAttrs = filterContext.getFilteredIdPAttributes();
+ Assert.assertTrue(resultAttrs.isEmpty());
+ }
}
@Test public void testInitDestroy() throws ComponentInitializationException {
- MockMatcher matcher = new MockMatcher();
- AttributeRule filterPolicy = new AttributeRule();
+ final MockMatcher matcher = new MockMatcher();
+ final AttributeRule filterPolicy = new AttributeRule();
filterPolicy.setId("filterPolicy");
filterPolicy.setAttributeId("attribute1");
filterPolicy.setMatcher(matcher);
filterPolicy.setIsDenyRule(false);
- MockPolicyRequirementRule policyRule = new MockPolicyRequirementRule();
- AttributeFilterPolicy policy = new AttributeFilterPolicy("policy", policyRule, Collections.singletonList(filterPolicy));
+ final MockPolicyRequirementRule policyRule = new MockPolicyRequirementRule();
+ final AttributeFilterPolicy policy = new AttributeFilterPolicy("policy", policyRule, Collections.singletonList(filterPolicy));
Assert.assertFalse(policyRule.isInitialized());
Assert.assertFalse(policyRule.isDestroyed());
Assert.assertFalse(matcher.isInitialized());
Assert.assertFalse(matcher.isDestroyed());
- AttributeFilterImpl filter = new AttributeFilterImpl("engine", Collections.singletonList(policy));
- filter.setApplicationContext(new MockApplicationContext());
+ try (final AttributeFilterImpl filter = new AttributeFilterImpl("engine", Collections.singletonList(policy))) {
- policy.initialize();
- matcher.initialize();
- policyRule.initialize();
- filter.initialize();
+ // TODO: this seems off but is needed to allow try-with-resources while also unlocking.
+ filter.pinComponent();
- Assert.assertTrue(policyRule.isInitialized());
- Assert.assertFalse(policyRule.isDestroyed());
- Assert.assertTrue(matcher.isInitialized());
- Assert.assertFalse(matcher.isDestroyed());
-
- filter.destroy();
- policyRule.destroy();
- policy.destroy();
- matcher.destroy();
- Assert.assertTrue(policyRule.isInitialized());
- Assert.assertTrue(policyRule.isDestroyed());
- Assert.assertTrue(matcher.isInitialized());
- Assert.assertTrue(matcher.isDestroyed());
+ 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());
+ }
}
}
diff --git a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/impl/AbstractRegexpStringMatcherTest.java b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/impl/AbstractRegexpStringMatcherTest.java
index 25093c433..7f452ab92 100644
--- a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/impl/AbstractRegexpStringMatcherTest.java
+++ b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/impl/AbstractRegexpStringMatcherTest.java
@@ -61,4 +61,4 @@ public class AbstractRegexpStringMatcherTest {
}
-}
+}
\ No newline at end of file
diff --git a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/impl/DataSources.java b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/impl/DataSources.java
index 81e174da9..17806f8fa 100644
--- a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/impl/DataSources.java
+++ b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/impl/DataSources.java
@@ -25,6 +25,7 @@ import net.shibboleth.idp.attribute.ScopedStringAttributeValue;
import net.shibboleth.idp.attribute.StringAttributeValue;
import net.shibboleth.idp.attribute.filter.context.AttributeFilterContext;
import net.shibboleth.idp.attribute.resolver.testing.TestSources;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
import org.opensaml.messaging.context.navigate.ParentContextLookup;
import org.opensaml.profile.context.ProfileRequestContext;
@@ -35,43 +36,44 @@ import org.opensaml.profile.context.ProfileRequestContext;
@SuppressWarnings("javadoc")
public abstract class DataSources {
- public final static String TEST_STRING = "nibbleahappywarthog";
+ @Nonnull @NotEmpty public final static String TEST_STRING = "nibbleahappywarthog";
- public final static String TEST_STRING_UPPER = TEST_STRING.toUpperCase();
+ @Nonnull @NotEmpty public final static String TEST_STRING_UPPER = TEST_STRING.toUpperCase();
- public final static String NON_MATCH_STRING = "ThisIsADifferentString";
+ @Nonnull @NotEmpty public final static String NON_MATCH_STRING = "ThisIsADifferentString";
- public final static String TEST_REGEX = "^n.*g";
+ @Nonnull @NotEmpty public final static String TEST_REGEX = "^n.*g";
- public final static StringAttributeValue STRING_VALUE = new StringAttributeValue(TEST_STRING);
+ @Nonnull public final static StringAttributeValue STRING_VALUE = new StringAttributeValue(TEST_STRING);
- public final static StringAttributeValue STRING_VALUE_UPPER = new StringAttributeValue(TEST_STRING.toUpperCase());
+ @Nonnull public final static StringAttributeValue STRING_VALUE_UPPER = new StringAttributeValue(TEST_STRING.toUpperCase());
- public final static StringAttributeValue NON_MATCH_STRING_VALUE = new StringAttributeValue(NON_MATCH_STRING);
+ @Nonnull public final static StringAttributeValue NON_MATCH_STRING_VALUE = new StringAttributeValue(NON_MATCH_STRING);
- public final static ScopedStringAttributeValue SCOPED_VALUE_VALUE_MATCH = new ScopedStringAttributeValue(
+ @Nonnull public final static ScopedStringAttributeValue SCOPED_VALUE_VALUE_MATCH = new ScopedStringAttributeValue(
TEST_STRING, NON_MATCH_STRING);
- public final static ScopedStringAttributeValue SCOPED_VALUE_SCOPE_MATCH = new ScopedStringAttributeValue(
+ @Nonnull public final static ScopedStringAttributeValue SCOPED_VALUE_SCOPE_MATCH = new ScopedStringAttributeValue(
NON_MATCH_STRING, TEST_STRING);
- public final static ByteAttributeValue BYTE_ATTRIBUTE_VALUE = new ByteAttributeValue(TEST_STRING.getBytes());
+ @Nonnull public final static ByteAttributeValue BYTE_ATTRIBUTE_VALUE = new ByteAttributeValue(TEST_STRING.getBytes());
- public final static IdPAttributeValue OTHER_VALUE = new IdPAttributeValue() {
+ @Nonnull public final static IdPAttributeValue OTHER_VALUE = new IdPAttributeValue() {
@Override @Nonnull public Object getNativeValue() {
return TEST_STRING;
}
- public String getDisplayValue() {
+ @Nonnull public String getDisplayValue() {
return TEST_STRING;
}
};
- public static AttributeFilterContext populatedFilterContext(String principal, String issuerID, String recipientId) {
+ @Nonnull public static AttributeFilterContext populatedFilterContext(String principal, String issuerID, String recipientId) {
final ProfileRequestContext parent = new ProfileRequestContext();
parent.addSubcontext(TestSources.createResolutionContext(principal, issuerID, recipientId));
- AttributeFilterContext retVal = parent.getSubcontext(AttributeFilterContext.class, true);
+ final AttributeFilterContext retVal = parent.getSubcontext(AttributeFilterContext.class, true);
+ assert retVal != null;
retVal.setPrincipal(principal);
retVal.setAttributeIssuerID(issuerID);
retVal.setAttributeRecipientID(recipientId);
@@ -80,11 +82,11 @@ public abstract class DataSources {
return retVal;
}
- public static AttributeFilterContext unPopulatedFilterContext() {
+ @Nonnull public static AttributeFilterContext unPopulatedFilterContext() {
final ProfileRequestContext parent = new ProfileRequestContext();
final AttributeFilterContext afc = parent.getSubcontext(AttributeFilterContext.class, true);
-
+ assert afc != null;
afc.setProfileRequestContextLookupStrategy(new ParentContextLookup<>(ProfileRequestContext.class));
return afc;
diff --git a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/impl/ScriptedMatcherTest.java b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/impl/ScriptedMatcherTest.java
index f34cc596a..68e7abcda 100644
--- a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/impl/ScriptedMatcherTest.java
+++ b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/impl/ScriptedMatcherTest.java
@@ -28,6 +28,9 @@ import static org.testng.Assert.fail;
import java.util.Collections;
import java.util.Set;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
@@ -160,6 +163,7 @@ public class ScriptedMatcherTest extends AbstractMatcherPolicyRuleTest {
final Set<IdPAttributeValue> result = matcher.getMatchingValues(attribute, filterContext);
assertNotNull(result);
+ assert result != null;
assertEquals(result.size(), 1);
assertTrue(result.contains(value1) || result.contains(value2) || result.contains(value3));
}
@@ -176,7 +180,7 @@ public class ScriptedMatcherTest extends AbstractMatcherPolicyRuleTest {
matcher.initialize();
final Set<IdPAttributeValue> result = matcher.getMatchingValues(attribute, filterContext);
- assertNotNull(result);
+ assert result != null;
assertEquals(result.size(), 1);
assertTrue(result.contains(value1) || result.contains(value2) || result.contains(value3));
}
@@ -207,7 +211,7 @@ public class ScriptedMatcherTest extends AbstractMatcherPolicyRuleTest {
matcher.initialize();
final Set<IdPAttributeValue> result = matcher.getMatchingValues(attribute, filterContext);
- assertNotNull(result);
+ assert result != null;
assertEquals(result.size(), 1);
assertTrue(result.contains(value1) || result.contains(value2) || result.contains(value3));
}
@@ -277,7 +281,7 @@ public class ScriptedMatcherTest extends AbstractMatcherPolicyRuleTest {
}
- static public ScriptedMatcher newScriptedMatcher(final EvaluableScript script) {
+ @Nonnull static public ScriptedMatcher newScriptedMatcher(@Nonnull final EvaluableScript script) {
final ScriptedMatcher what = new ScriptedMatcher();
what.setScript(script);
return what;
diff --git a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/AndMatcherTest.java b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/AndMatcherTest.java
index 898bbb76a..342a9327c 100644
--- a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/AndMatcherTest.java
+++ b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/AndMatcherTest.java
@@ -90,6 +90,7 @@ public class AndMatcherTest extends AbstractMatcherPolicyRuleTest {
matcher.initialize();
final Set<IdPAttributeValue> result = matcher.getMatchingValues(attribute, filterContext);
+ assert result != null;
assertEquals(result.size(), 2);
assertTrue(result.contains(value2));
assertTrue(result.contains(value1));
@@ -113,7 +114,7 @@ public class AndMatcherTest extends AbstractMatcherPolicyRuleTest {
matcher.initialize();
final Set<IdPAttributeValue> result = matcher.getMatchingValues(attribute, filterContext);
- assertNotNull(result);
+ assert result != null;
assertEquals(result.size(), 1);
assertTrue(result.contains(value2));
@@ -157,7 +158,10 @@ public class AndMatcherTest extends AbstractMatcherPolicyRuleTest {
matcher.setId("Test");
matcher.initialize();
- assertTrue(matcher.getMatchingValues(attribute, filterContext).isEmpty());
+
+ final Set<IdPAttributeValue> result = matcher.getMatchingValues(attribute, filterContext);
+ assert result != null;
+ assertTrue(result.isEmpty());
}
static public AndMatcher newAndMatcher(final @Nonnull @NonnullElements List<Matcher> what) {
diff --git a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/NotMatcherTest.java b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/NotMatcherTest.java
index e38f065e8..2461d71f8 100644
--- a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/NotMatcherTest.java
+++ b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/NotMatcherTest.java
@@ -19,12 +19,7 @@ package net.shibboleth.idp.attribute.filter.matcher.logic.impl;
import static com.google.common.base.Predicates.equalTo;
import static com.google.common.base.Predicates.or;
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertFalse;
-import static org.testng.Assert.assertNotNull;
-import static org.testng.Assert.assertNull;
-import static org.testng.Assert.assertTrue;
-import static org.testng.Assert.fail;
+import static org.testng.Assert.*;
import java.util.Arrays;
import java.util.Set;
@@ -117,7 +112,7 @@ public class NotMatcherTest extends AbstractMatcherPolicyRuleTest {
matcher.initialize();
Set<IdPAttributeValue> result = matcher.getMatchingValues(attribute, filterContext);
- assertNotNull(result);
+ assert result != null;
assertEquals(result.size(), 1);
assertTrue(result.contains(value3));
matcher.destroy();
@@ -140,7 +135,7 @@ public class NotMatcherTest extends AbstractMatcherPolicyRuleTest {
orMatcher.initialize();
result = matcher.getMatchingValues(attribute, filterContext);
- assertNotNull(result);
+ assert result != null;
assertEquals(result.size(), 0);
}
@@ -159,4 +154,4 @@ public class NotMatcherTest extends AbstractMatcherPolicyRuleTest {
return rule;
}
-}
+}
\ No newline at end of file
diff --git a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/OrMatcherTest.java b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/OrMatcherTest.java
index d78386309..71ac08616 100644
--- a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/OrMatcherTest.java
+++ b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/logic/impl/OrMatcherTest.java
@@ -31,6 +31,8 @@ import java.util.List;
import java.util.Set;
import java.util.function.Predicate;
+import javax.annotation.Nonnull;
+
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
@@ -91,6 +93,7 @@ public class OrMatcherTest extends AbstractMatcherPolicyRuleTest {
matcher.initialize();
final Set<IdPAttributeValue> result = matcher.getMatchingValues(attribute, filterContext);
+ assert result != null;
assertEquals(result.size(), 2);
assertTrue(result.contains(value2));
assertTrue(result.contains(value1));
@@ -115,7 +118,7 @@ public class OrMatcherTest extends AbstractMatcherPolicyRuleTest {
matcher.initialize();
final Set<IdPAttributeValue> result = matcher.getMatchingValues(attribute, filterContext);
- assertNotNull(result);
+ assert result != null;
assertEquals(result.size(), 2);
assertTrue(result.contains(value2) && result.contains(value1));
@@ -146,7 +149,7 @@ public class OrMatcherTest extends AbstractMatcherPolicyRuleTest {
matcher.initialize();
final Set<IdPAttributeValue> result = matcher.getMatchingValues(attribute, filterContext);
- assertNotNull(result);
+ assert result != null;
assertEquals(result.size(), 2);
assertTrue(result.contains(value2) && result.contains(value1));
@@ -164,7 +167,7 @@ public class OrMatcherTest extends AbstractMatcherPolicyRuleTest {
matcher.initialize();
final Set<IdPAttributeValue> result = matcher.getMatchingValues(attribute, filterContext);
- assertNotNull(result);
+ assert result != null;
assertTrue(result.isEmpty());
}
@@ -185,7 +188,7 @@ public class OrMatcherTest extends AbstractMatcherPolicyRuleTest {
matcher.initialize();
}
- static public OrMatcher newOrMatcher(final List<Matcher> what) {
+ @Nonnull static public OrMatcher newOrMatcher(final List<Matcher> what) {
final OrMatcher matcher = new OrMatcher();
matcher.setSubsidiaries(what);
return matcher;
diff --git a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/AttributeInMetadataMatcherTest.java b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/AttributeInMetadataMatcherTest.java
index 9613a6987..5eb89f105 100644
--- a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/AttributeInMetadataMatcherTest.java
+++ b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/AttributeInMetadataMatcherTest.java
@@ -25,10 +25,14 @@ import java.util.Collections;
import java.util.List;
import java.util.Set;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
import org.opensaml.core.testing.OpenSAMLInitBaseTestCase;
import org.opensaml.core.xml.XMLObjectBuilder;
import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
import org.opensaml.core.xml.schema.XSString;
+import org.opensaml.messaging.context.BaseContext;
import org.opensaml.messaging.context.navigate.ChildContextLookup;
import org.opensaml.saml.common.SAMLObjectBuilder;
import org.opensaml.saml.common.messaging.context.AttributeConsumingServiceContext;
@@ -70,13 +74,13 @@ public class AttributeInMetadataMatcherTest extends OpenSAMLInitBaseTestCase {
valueBuilder = XMLObjectProviderRegistrySupport.getBuilderFactory().<XSString>getBuilderOrThrow(XSString.TYPE_NAME);
}
- private IdPAttribute makeAttribute(String id, List<IdPAttributeValue> values) {
+ @Nonnull private IdPAttribute makeAttribute(@Nonnull String id, @Nullable List<IdPAttributeValue> values) {
final IdPAttribute attr = new IdPAttribute(id);
attr.setValues(values);
return attr;
}
- private AttributeInMetadataMatcher makeMatcher(String id, boolean matchIfMetadataSilent, boolean onlyIfRequired,
+ private AttributeInMetadataMatcher makeMatcher(@Nonnull String id, boolean matchIfMetadataSilent, boolean onlyIfRequired,
String name, String nameFormat)
throws ComponentInitializationException {
AttributeInMetadataMatcher matcher = new AttributeInMetadataMatcher();
@@ -92,15 +96,19 @@ public class AttributeInMetadataMatcherTest extends OpenSAMLInitBaseTestCase {
private void setRequestedAttributesInContext(final AttributeFilterContext context,
final Collection<RequestedAttribute> attributes) {
final SAMLMetadataContext samlMetadataContext = context.getSubcontext(SAMLMetadataContext.class, true);
+ assert samlMetadataContext != null;
final AttributeConsumingServiceContext acsCtx =
samlMetadataContext.getSubcontext(AttributeConsumingServiceContext.class, true);
- acsCtx.setAttributeConsumingService(acsBuilder.buildObject());
- acsCtx.getAttributeConsumingService().getRequestedAttributes().addAll(attributes);
+ assert acsCtx != null;
+ final AttributeConsumingService acs =
+ acsCtx.setAttributeConsumingService(acsBuilder.buildObject()).getAttributeConsumingService();
+ assert acs != null;
+ acs.getRequestedAttributes().addAll(attributes);
context.setRequesterMetadataContextLookupStrategy(
new ChildContextLookup<AttributeFilterContext,SAMLMetadataContext>(SAMLMetadataContext.class));
}
- private AttributeFilterContext makeContext(RequestedAttribute attribute) {
+ @Nonnull private AttributeFilterContext makeContext(@Nullable RequestedAttribute attribute) {
final AttributeFilterContext context = new AttributeFilterContext();
if (attribute != null) {
setRequestedAttributesInContext(context, Collections.singletonList(attribute));
@@ -229,13 +237,17 @@ public class AttributeInMetadataMatcherTest extends OpenSAMLInitBaseTestCase {
makeAttribute("attr", Arrays.asList(DataSources.STRING_VALUE, DataSources.NON_MATCH_STRING_VALUE));
final AttributeFilterContext context = makeContext(null);
- setRequestedAttributesInContext(context, Collections.EMPTY_SET);
+ setRequestedAttributesInContext(context, Collections.emptySet());
- final AttributeConsumingService acs = context.getRequesterMetadataContext().
- getSubcontext(AttributeConsumingServiceContext.class).getAttributeConsumingService();
+ final BaseContext b1 = context.getRequesterMetadataContext();
+ assert b1 != null;
+ final AttributeConsumingServiceContext b2 = b1.getSubcontext(AttributeConsumingServiceContext.class);
+ assert b2 != null;
+ final AttributeConsumingService acs = b2.getAttributeConsumingService();
- Multimap<String,IdPAttribute> value = HashMultimap.create();
+ final Multimap<String,IdPAttribute> value = HashMultimap.create();
value.put("attr", attr);
+ assert acs != null;
acs.getObjectMetadata().put(new AttributesMapContainer(value));
diff --git a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/MappedAttributeInMetadataMatcherTest.java b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/MappedAttributeInMetadataMatcherTest.java
index 971ceb34b..81bd8e653 100644
--- a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/MappedAttributeInMetadataMatcherTest.java
+++ b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/MappedAttributeInMetadataMatcherTest.java
@@ -26,6 +26,9 @@ import java.util.Collections;
import java.util.List;
import java.util.Set;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
import org.opensaml.core.testing.OpenSAMLInitBaseTestCase;
import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport;
import org.opensaml.messaging.context.navigate.ChildContextLookup;
@@ -61,15 +64,15 @@ public class MappedAttributeInMetadataMatcherTest extends OpenSAMLInitBaseTestCa
AttributeConsumingService.DEFAULT_ELEMENT_NAME);
}
- private IdPAttribute makeAttribute(String id, List<IdPAttributeValue> values) {
+ @Nonnull private IdPAttribute makeAttribute(@Nonnull final String id, @Nullable final List<IdPAttributeValue> values) {
IdPAttribute attr = new IdPAttribute(id);
attr.setValues(values);
return attr;
}
- private AttributeInMetadataMatcher makeMatcher(String id, boolean matchIfMetadataSilent, boolean onlyIfRequired)
+ @Nonnull private AttributeInMetadataMatcher makeMatcher(@Nonnull final String id, boolean matchIfMetadataSilent, boolean onlyIfRequired)
throws ComponentInitializationException {
- AttributeInMetadataMatcher matcher = new AttributeInMetadataMatcher();
+ final AttributeInMetadataMatcher matcher = new AttributeInMetadataMatcher();
matcher.setMatchIfMetadataSilent(matchIfMetadataSilent);
matcher.setOnlyIfRequired(onlyIfRequired);
matcher.setId(id);
@@ -77,19 +80,23 @@ public class MappedAttributeInMetadataMatcherTest extends OpenSAMLInitBaseTestCa
return matcher;
}
- private void setRequestedAttributesInContext(final AttributeFilterContext context,
- final Multimap<String, IdPAttribute> multimap) {
+ private void setRequestedAttributesInContext(@Nonnull final AttributeFilterContext context,
+ @Nonnull final Multimap<String, IdPAttribute> multimap) {
final AttributesMapContainer container = new AttributesMapContainer(multimap);
final SAMLMetadataContext samlMetadataContext = context.getSubcontext(SAMLMetadataContext.class, true);
+ assert samlMetadataContext != null;
final AttributeConsumingServiceContext acsCtx =
samlMetadataContext.getSubcontext(AttributeConsumingServiceContext.class, true);
- acsCtx.setAttributeConsumingService(acsBuilder.buildObject());
- acsCtx.getAttributeConsumingService().getObjectMetadata().put(container);
+ assert acsCtx != null;
+ final AttributeConsumingService acs = acsCtx.setAttributeConsumingService(acsBuilder.buildObject()).getAttributeConsumingService();
+ assert acs != null;
+ acs.getObjectMetadata().put(container);
context.setRequesterMetadataContextLookupStrategy(new ChildContextLookup<AttributeFilterContext, SAMLMetadataContext>(
SAMLMetadataContext.class));
}
- private AttributeFilterContext makeContext(String attributeId, IdPRequestedAttribute attribute) {
+ @Nonnull private AttributeFilterContext makeContext(@Nullable final String attributeId,
+ @Nullable final IdPRequestedAttribute attribute) {
final AttributeFilterContext context = new AttributeFilterContext();
@@ -103,7 +110,7 @@ public class MappedAttributeInMetadataMatcherTest extends OpenSAMLInitBaseTestCa
return context;
}
- private AttributeFilterContext makeContext(IdPRequestedAttribute attribute) {
+ @Nonnull private AttributeFilterContext makeContext(@Nullable final IdPRequestedAttribute attribute) {
if (null == attribute) {
return makeContext(null, null);
@@ -194,8 +201,8 @@ public class MappedAttributeInMetadataMatcherTest extends OpenSAMLInitBaseTestCa
final IdPAttribute attr =
makeAttribute("attr", Arrays.asList(DataSources.STRING_VALUE, DataSources.NON_MATCH_STRING_VALUE));
- AttributeFilterContext context = makeContext("attr", null);
- Set<IdPAttributeValue> result = makeMatcher("test", false, true).getMatchingValues(attr, context);
+ final AttributeFilterContext context = makeContext("attr", null);
+ final Set<IdPAttributeValue> result = makeMatcher("test", false, true).getMatchingValues(attr, context);
assertTrue(result.isEmpty());
}
@@ -204,11 +211,11 @@ public class MappedAttributeInMetadataMatcherTest extends OpenSAMLInitBaseTestCa
final IdPAttribute attr =
makeAttribute("attr", Arrays.asList(DataSources.STRING_VALUE, DataSources.NON_MATCH_STRING_VALUE));
- IdPRequestedAttribute req1 = new IdPRequestedAttribute("attr");
+ final IdPRequestedAttribute req1 = new IdPRequestedAttribute("attr");
req1.setRequired(true);
req1.setValues(Collections.singletonList(DataSources.STRING_VALUE));
- IdPRequestedAttribute req2 = new IdPRequestedAttribute("attr");
+ final IdPRequestedAttribute req2 = new IdPRequestedAttribute("attr");
req2.setRequired(true);
req2.setValues(Collections.singletonList(DataSources.NON_MATCH_STRING_VALUE));
diff --git a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/ScopeMatchesShibMDScopeTests.java b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/ScopeMatchesShibMDScopeTests.java
index 42dddb9a8..73dbbfeb9 100644
--- a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/ScopeMatchesShibMDScopeTests.java
+++ b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/matcher/saml/impl/ScopeMatchesShibMDScopeTests.java
@@ -24,6 +24,8 @@ import java.io.IOException;
import java.util.List;
import java.util.Set;
+import javax.annotation.Nonnull;
+
import org.opensaml.core.criterion.EntityIdCriterion;
import org.opensaml.core.testing.XMLObjectBaseTestCase;
import org.opensaml.saml.common.messaging.context.SAMLMetadataContext;
@@ -68,7 +70,7 @@ public class ScopeMatchesShibMDScopeTests extends XMLObjectBaseTestCase {
valueMatcher.setId("valueMatcher");
valueMatcher.initialize();
- NodeProcessingMetadataFilter filter = new NodeProcessingMetadataFilter();
+ final NodeProcessingMetadataFilter filter = new NodeProcessingMetadataFilter();
filter.setNodeProcessors(List.of(new ScopesNodeProcessor()));
filter.initialize();
@@ -81,7 +83,7 @@ public class ScopeMatchesShibMDScopeTests extends XMLObjectBaseTestCase {
resolver.initialize();
}
- private AttributeFilterContext filterContextFor(final EntityDescriptor entity) {
+ @Nonnull private AttributeFilterContext filterContextFor(@Nonnull final EntityDescriptor entity) {
final SAMLMetadataContext metadataContext = new SAMLMetadataContext();
metadataContext.setEntityDescriptor(entity);
metadataContext.setRoleDescriptor(entity.getRoleDescriptors().get(0));
@@ -96,9 +98,9 @@ public class ScopeMatchesShibMDScopeTests extends XMLObjectBaseTestCase {
}
@Test public void aa() throws ResolverException {
- IdPAttribute testAttribute = new IdPAttribute("test");
- IdPAttributeValue resultValue1 = new ScopedStringAttributeValue("value", "aa.aa");
- IdPAttributeValue resultValue2 = new StringAttributeValue("aa");
+ final IdPAttribute testAttribute = new IdPAttribute("test");
+ final IdPAttributeValue resultValue1 = new ScopedStringAttributeValue("value", "aa.aa");
+ final IdPAttributeValue resultValue2 = new StringAttributeValue("aa");
testAttribute.setValues(List.of(
new ScopedStringAttributeValue("value", "scope"),
@@ -108,6 +110,7 @@ public class ScopeMatchesShibMDScopeTests extends XMLObjectBaseTestCase {
resultValue2));
final EntityDescriptor entity = resolver.resolveSingle(new CriteriaSet(new EntityIdCriterion(aaEntityID)));
+ assert entity != null;
Set<IdPAttributeValue> result = scopeMatcher.getMatchingValues(testAttribute, filterContextFor(entity));
assertEquals(result.size(), 1);
assertTrue(result.contains(resultValue1));
@@ -127,7 +130,8 @@ public class ScopeMatchesShibMDScopeTests extends XMLObjectBaseTestCase {
));
final EntityDescriptor entity = resolver.resolveSingle(new CriteriaSet(new EntityIdCriterion(noneEntityID)));
- Set<IdPAttributeValue> result = scopeMatcher.getMatchingValues(testAttribute, filterContextFor(entity));
+ assert entity != null;
+ final Set<IdPAttributeValue> result = scopeMatcher.getMatchingValues(testAttribute, filterContextFor(entity));
assertTrue(result.isEmpty());
assertTrue(valueMatcher.getMatchingValues(testAttribute, filterContextFor(entity)).isEmpty());
@@ -146,6 +150,7 @@ public class ScopeMatchesShibMDScopeTests extends XMLObjectBaseTestCase {
testAttribute.setValues(list);
final EntityDescriptor entity = resolver.resolveSingle(new CriteriaSet(new EntityIdCriterion(bothEntityID)));
+ assert entity != null;
Set<IdPAttributeValue> result = scopeMatcher.getMatchingValues(testAttribute, filterContextFor(entity));
assertEquals(result.size(), 3);
for (int i = 0; i < 3; i++) {
@@ -169,6 +174,7 @@ public class ScopeMatchesShibMDScopeTests extends XMLObjectBaseTestCase {
resultValue2));
final EntityDescriptor entity = resolver.resolveSingle(new CriteriaSet(new EntityIdCriterion(entityEntityID)));
+ assert entity != null;
Set<IdPAttributeValue> result = scopeMatcher.getMatchingValues(testAttribute, filterContextFor(entity));
assertEquals(result.size(), 1);
assertTrue(result.contains(resultValue1));
diff --git a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/filtercontext/impl/PredicatePolicyRuleTest.java b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/filtercontext/impl/PredicatePolicyRuleTest.java
index d985f6d3c..67e0fcdfe 100644
--- a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/filtercontext/impl/PredicatePolicyRuleTest.java
+++ b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/filtercontext/impl/PredicatePolicyRuleTest.java
@@ -59,6 +59,7 @@ public class PredicatePolicyRuleTest {
final ProfileRequestContext pc = new ProfileRequestContext();
final AttributeFilterContext afc = pc.getSubcontext(AttributeFilterContext.class, true);
+ assert afc != null;
afc.setProfileRequestContextLookupStrategy(new ParentContextLookup<>(ProfileRequestContext.class));
assertEquals(rule.matches(afc), Tristate.FALSE);
@@ -72,6 +73,7 @@ public class PredicatePolicyRuleTest {
final ProfileRequestContext pc = new ProfileRequestContext();
final AttributeFilterContext afc = pc.getSubcontext(AttributeFilterContext.class, true);
+ assert afc != null;
assertEquals(rule.matches(afc), Tristate.FAIL);
}
diff --git a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/filtercontext/impl/ProfilePolicyRuleTest.java b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/filtercontext/impl/ProfilePolicyRuleTest.java
index e35103270..267908837 100644
--- a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/filtercontext/impl/ProfilePolicyRuleTest.java
+++ b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/filtercontext/impl/ProfilePolicyRuleTest.java
@@ -71,11 +71,13 @@ public class ProfilePolicyRuleTest {
final ProfilePolicyRule matcher = getMatcher(true);
final AttributeFilterContext afc = DataSources.populatedFilterContext(null, null, null);
+ final ProfileRequestContext prc = (ProfileRequestContext) afc.getParent();
+ assert prc != null;
- ((ProfileRequestContext) afc.getParent()).setProfileId("https://shibboleth.net/Profile");
+ prc.setProfileId("https://shibboleth.net/Profile");
assertEquals(matcher.matches(afc), Tristate.FALSE);
- ((ProfileRequestContext) afc.getParent()).setProfileId("https://shibboleth.net/profile");
+ prc.setProfileId("https://shibboleth.net/profile");
assertEquals(matcher.matches(afc), Tristate.TRUE);
}
@@ -84,11 +86,13 @@ public class ProfilePolicyRuleTest {
final ProfilePolicyRule matcher = getMatcher(false);
final AttributeFilterContext afc = DataSources.populatedFilterContext(null, null, null);
+ final ProfileRequestContext prc = (ProfileRequestContext) afc.getParent();
+ assert prc != null;
- ((ProfileRequestContext) afc.getParent()).setProfileId("https://shibboleth.net/Profile");
+ prc.setProfileId("https://shibboleth.net/Profile");
assertEquals(matcher.matches(afc), Tristate.TRUE);
- ((ProfileRequestContext) afc.getParent()).setProfileId("https://shibboleth.net/profile");
+ prc.setProfileId("https://shibboleth.net/profile");
assertEquals(matcher.matches(afc), Tristate.TRUE);
}
diff --git a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/filtercontext/impl/ProxiedRequesterPolicyRuleTest.java b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/filtercontext/impl/ProxiedRequesterPolicyRuleTest.java
index 87807d040..8c3efe40b 100644
--- a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/filtercontext/impl/ProxiedRequesterPolicyRuleTest.java
+++ b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/filtercontext/impl/ProxiedRequesterPolicyRuleTest.java
@@ -22,6 +22,8 @@ import static org.testng.Assert.fail;
import java.util.Arrays;
+import javax.annotation.Nonnull;
+
import org.opensaml.messaging.context.navigate.ChildContextLookup;
import org.opensaml.profile.context.ProxiedRequesterContext;
import org.testng.annotations.Test;
@@ -38,7 +40,8 @@ import net.shibboleth.shared.component.UninitializedComponentException;
@SuppressWarnings("javadoc")
public class ProxiedRequesterPolicyRuleTest {
- private ProxiedRequesterPolicyRule getMatcher(final boolean caseSensitive) throws ComponentInitializationException {
+ @Nonnull private ProxiedRequesterPolicyRule getMatcher(final boolean caseSensitive)
+ throws ComponentInitializationException {
final ProxiedRequesterPolicyRule matcher = new ProxiedRequesterPolicyRule();
matcher.setMatchString("requester");
matcher.setCaseSensitive(caseSensitive);
@@ -79,11 +82,15 @@ public class ProxiedRequesterPolicyRuleTest {
final AttributeFilterContext ctx = DataSources.populatedFilterContext(null, null, "wibble");
ctx.setProxiedRequesterContextLookupStrategy(
new ChildContextLookup<AttributeFilterContext,ProxiedRequesterContext>(ProxiedRequesterContext.class));
- ctx.getSubcontext(ProxiedRequesterContext.class, true).getRequesters().addAll(Arrays.asList("foo", "bar"));
+
+ final ProxiedRequesterContext proxyCtx = ctx.getSubcontext(ProxiedRequesterContext.class, true);
+ assert proxyCtx != null;
+
+ proxyCtx.getRequesters().addAll(Arrays.asList("foo", "bar"));
assertEquals(matcher.matches(ctx), Tristate.FALSE);
- ctx.getSubcontext(ProxiedRequesterContext.class).getRequesters().add("requester");
+ proxyCtx.getRequesters().add("requester");
assertEquals(matcher.matches(ctx), Tristate.TRUE);
}
@@ -94,12 +101,16 @@ public class ProxiedRequesterPolicyRuleTest {
final AttributeFilterContext ctx = DataSources.populatedFilterContext(null, null, "wibble");
ctx.setProxiedRequesterContextLookupStrategy(
new ChildContextLookup<AttributeFilterContext,ProxiedRequesterContext>(ProxiedRequesterContext.class));
- ctx.getSubcontext(ProxiedRequesterContext.class, true).getRequesters().addAll(Arrays.asList("foo", "bar"));
+
+ final ProxiedRequesterContext proxyCtx = ctx.getSubcontext(ProxiedRequesterContext.class, true);
+ assert proxyCtx != null;
+
+ proxyCtx.getRequesters().addAll(Arrays.asList("foo", "bar"));
assertEquals(matcher.matches(ctx), Tristate.FALSE);
- ctx.getSubcontext(ProxiedRequesterContext.class).getRequesters().add("REQUESTER");
+ proxyCtx.getRequesters().add("REQUESTER");
assertEquals(matcher.matches(ctx), Tristate.TRUE);
}
-}
+}
\ No newline at end of file
diff --git a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/filtercontext/impl/ProxiedRequesterRegexpPolicyRuleTest.java b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/filtercontext/impl/ProxiedRequesterRegexpPolicyRuleTest.java
index 7fcdd5b06..f25daa016 100644
--- a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/filtercontext/impl/ProxiedRequesterRegexpPolicyRuleTest.java
+++ b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/filtercontext/impl/ProxiedRequesterRegexpPolicyRuleTest.java
@@ -72,12 +72,16 @@ public class ProxiedRequesterRegexpPolicyRuleTest {
final AttributeFilterContext ctx = DataSources.populatedFilterContext(null, null, "wibble");
ctx.setProxiedRequesterContextLookupStrategy(
new ChildContextLookup<AttributeFilterContext,ProxiedRequesterContext>(ProxiedRequesterContext.class));
- ctx.getSubcontext(ProxiedRequesterContext.class, true).getRequesters().addAll(Arrays.asList("foo", "bar"));
+
+ final ProxiedRequesterContext proxyCtx = ctx.getSubcontext(ProxiedRequesterContext.class, true);
+ assert proxyCtx != null;
+
+ proxyCtx.getRequesters().addAll(Arrays.asList("foo", "bar"));
assertEquals(matcher.matches(ctx), Tristate.FALSE);
- ctx.getSubcontext(ProxiedRequesterContext.class).getRequesters().add("requester");
+ proxyCtx.getRequesters().add("requester");
assertEquals(matcher.matches(ctx), Tristate.TRUE);
}
-}
+}
\ No newline at end of file
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 85726d989..bcf44df09 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
@@ -20,6 +20,8 @@ package net.shibboleth.idp.attribute.filter.policyrule.saml.impl;
import java.util.Arrays;
import java.util.Collections;
+import javax.annotation.Nonnull;
+
import net.shibboleth.idp.attribute.filter.context.AttributeFilterContext;
import net.shibboleth.idp.attribute.transcoding.BasicNamingFunction;
import net.shibboleth.idp.attribute.transcoding.impl.AttributeTranscoderRegistryImpl;
@@ -94,9 +96,10 @@ public class BaseMetadataTests extends XMLObjectBaseTestCase {
static protected AttributeFilterContext reqMetadataContext(EntityDescriptor sp, String principal) {
- AttributeFilterContext filterContext = new AttributeFilterContext();
- SAMLMetadataContext metadataContext = filterContext.getSubcontext(SAMLMetadataContext.class, true);
-
+ final AttributeFilterContext filterContext = new AttributeFilterContext();
+ final SAMLMetadataContext metadataContext = filterContext.getSubcontext(SAMLMetadataContext.class, true);
+ assert metadataContext != null;
+
metadataContext.setEntityDescriptor(sp);
if (sp != null) {
metadataContext.setRoleDescriptor(sp.getSPSSODescriptor("urn:oasis:names:tc:SAML:2.0:protocol"));
@@ -108,11 +111,12 @@ public class BaseMetadataTests extends XMLObjectBaseTestCase {
return filterContext;
}
- static protected AttributeFilterContext issMetadataContext(EntityDescriptor idp, String principal) {
-
- AttributeFilterContext filterContext = new AttributeFilterContext();
- SAMLMetadataContext metadataContext = filterContext.getSubcontext(SAMLMetadataContext.class, true);
+ @Nonnull static protected AttributeFilterContext issMetadataContext(EntityDescriptor idp, String principal) {
+ final AttributeFilterContext filterContext = new AttributeFilterContext();
+ final SAMLMetadataContext metadataContext = filterContext.getSubcontext(SAMLMetadataContext.class, true);
+ assert metadataContext != null;
+
metadataContext.setEntityDescriptor(idp);
if (idp != null) {
metadataContext.setRoleDescriptor(idp.getIDPSSODescriptor("urn:oasis:names:tc:SAML:2.0:protocol"));
diff --git a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/saml/impl/IssuerEntityAttributeExactPolicyRuleTest.java b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/saml/impl/IssuerEntityAttributeExactPolicyRuleTest.java
index b927d816c..2a17d75a6 100644
--- a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/saml/impl/IssuerEntityAttributeExactPolicyRuleTest.java
+++ b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/policyrule/saml/impl/IssuerEntityAttributeExactPolicyRuleTest.java
@@ -19,6 +19,9 @@ package net.shibboleth.idp.attribute.filter.policyrule.saml.impl;
import static org.testng.Assert.assertEquals;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
import org.testng.annotations.Test;
import net.shibboleth.idp.attribute.filter.PolicyRequirementRule.Tristate;
@@ -35,8 +38,9 @@ public class IssuerEntityAttributeExactPolicyRuleTest extends BaseMetadataTests
return getMatcher("urn:example.org:policies", "urn:example.org:policy:1234", null, false);
}
- private IssuerEntityAttributeExactPolicyRule getMatcher(String attributeName, String attributeValue,
- String attributeNameFormat, boolean ignoreUnmapped) throws ComponentInitializationException {
+ @Nonnull private IssuerEntityAttributeExactPolicyRule getMatcher(@Nonnull final String attributeName,
+ @Nonnull final String attributeValue, @Nullable final String attributeNameFormat, boolean ignoreUnmapped)
+ throws ComponentInitializationException {
IssuerEntityAttributeExactPolicyRule matcher = new IssuerEntityAttributeExactPolicyRule();
matcher.setId("matcher");
matcher.setAttributeName(attributeName);
diff --git a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/tests/AttributeFilterPolicyTest.java b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/tests/AttributeFilterPolicyTest.java
index 07a2131a8..b7d2db615 100644
--- a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/tests/AttributeFilterPolicyTest.java
+++ b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/tests/AttributeFilterPolicyTest.java
@@ -83,28 +83,28 @@ public class AttributeFilterPolicyTest {
try {
new AttributeFilterPolicy(null, policyMatcher, Arrays.asList(valuePolicy));
Assert.fail();
- } catch (ConstraintViolationException e) {
+ } catch (final ConstraintViolationException e) {
// expected
}
try {
new AttributeFilterPolicy("", policyMatcher, Arrays.asList(valuePolicy));
Assert.fail();
- } catch (ConstraintViolationException e) {
+ } catch (final ConstraintViolationException e) {
// expected
}
try {
new AttributeFilterPolicy(" ", policyMatcher, Arrays.asList(valuePolicy));
Assert.fail();
- } catch (ConstraintViolationException e) {
+ } catch (final ConstraintViolationException e) {
// expected
}
try {
new AttributeFilterPolicy("engine", null, Arrays.asList(valuePolicy));
Assert.fail();
- } catch (ConstraintViolationException e) {
+ } catch (final ConstraintViolationException e) {
// expected
}
}
@@ -137,7 +137,7 @@ public class AttributeFilterPolicyTest {
boolean thrown = false;
try {
policy.initialize();
- } catch (DestroyedComponentException e) {
+ } catch (final DestroyedComponentException e) {
thrown = true;
}
Assert.assertTrue(thrown, "Destroyed");
@@ -209,8 +209,9 @@ public class AttributeFilterPolicyTest {
AttributeFilterContext ctx = apply(Tristate.TRUE);
AttributeFilterWorkContext workCtx = ctx.getSubcontext(AttributeFilterWorkContext.class, false);
+ assert workCtx != null;
- Collection<?> values = workCtx.getPermittedIdPAttributeValues().get(ATTR_NAME);
+ final Collection<?> values = workCtx.getPermittedIdPAttributeValues().get(ATTR_NAME);
Assert.assertEquals(values.size(), 2);
Assert.assertTrue(values.containsAll(Arrays.asList(new StringAttributeValue("one"), new StringAttributeValue(
@@ -220,21 +221,25 @@ public class AttributeFilterPolicyTest {
ctx = apply(Tristate.FALSE);
workCtx = ctx.getSubcontext(AttributeFilterWorkContext.class, false);
+ assert workCtx != null;
Assert.assertNull(workCtx.getPermittedIdPAttributeValues().get(ATTR_NAME));
ctx = apply(Tristate.FAIL);
workCtx = ctx.getSubcontext(AttributeFilterWorkContext.class, false);
+ assert workCtx != null;
Assert.assertNull(workCtx.getPermittedIdPAttributeValues().get(ATTR_NAME));
}
@Test public void testApplyToEmpty() throws ComponentInitializationException, AttributeFilterException {
- AttributeFilterPolicy policy = new AttributeFilterPolicy(ID, policyMatcher, Arrays.asList(valuePolicy));
+ final AttributeFilterPolicy policy = new AttributeFilterPolicy(ID, policyMatcher, Arrays.asList(valuePolicy));
//
// Empty attribute
//
- AttributeFilterContext ctx = new AttributeFilterContext();
- AttributeFilterWorkContext workCtx = ctx.getSubcontext(AttributeFilterWorkContext.class, true);
- IdPAttribute attribute = new IdPAttribute(ATTR_NAME);
+ final AttributeFilterContext ctx = new AttributeFilterContext();
+ final AttributeFilterWorkContext workCtx = ctx.getSubcontext(AttributeFilterWorkContext.class, true);
+ assert workCtx != null;
+
+ final IdPAttribute attribute = new IdPAttribute(ATTR_NAME);
attribute.setValues(Collections.emptyList());
ctx.setPrefilteredIdPAttributes(Arrays.asList(attribute));
policy.initialize();
diff --git a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/tests/AttributeValueFilterPolicyTest.java b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/tests/AttributeValueFilterPolicyTest.java
index cbebbdb7c..f90099feb 100644
--- a/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/tests/AttributeValueFilterPolicyTest.java
+++ b/shib-attribute-filter-impl/src/test/java/net/shibboleth/idp/attribute/filter/tests/AttributeValueFilterPolicyTest.java
@@ -23,6 +23,7 @@ import java.util.Collection;
import net.shibboleth.idp.attribute.IdPAttribute;
import net.shibboleth.idp.attribute.IdPAttributeValue;
import net.shibboleth.idp.attribute.StringAttributeValue;
+import net.shibboleth.idp.attribute.filter.AttributeFilterException;
import net.shibboleth.idp.attribute.filter.AttributeRule;
import net.shibboleth.idp.attribute.filter.Matcher;
import net.shibboleth.idp.attribute.filter.context.AttributeFilterContext;
@@ -72,7 +73,7 @@ public class AttributeValueFilterPolicyTest {
boolean thrown = false;
try {
policy.initialize();
- } catch (DestroyedComponentException e) {
+ } catch (final DestroyedComponentException e) {
thrown = true;
}
Assert.assertTrue(thrown, "initialize after destroy");
@@ -85,7 +86,7 @@ public class AttributeValueFilterPolicyTest {
boolean thrown = false;
try {
policy.initialize();
- } catch (ComponentInitializationException e) {
+ } catch (final ComponentInitializationException e) {
thrown = true;
}
Assert.assertTrue(thrown, "AttributeId can never initialized be null");
@@ -94,7 +95,7 @@ public class AttributeValueFilterPolicyTest {
try {
policy.setAttributeId(null);
policy.initialize();
- } catch (ComponentInitializationException e) {
+ } catch (final ComponentInitializationException e) {
thrown = true;
}
Assert.assertTrue(thrown, "null Attribute Id");
@@ -103,7 +104,7 @@ public class AttributeValueFilterPolicyTest {
try {
policy.setAttributeId("");
policy.initialize();
- } catch (ComponentInitializationException e) {
+ } catch (final ComponentInitializationException e) {
thrown = true;
}
Assert.assertTrue(thrown, "empty Attribute Id");
@@ -120,7 +121,7 @@ public class AttributeValueFilterPolicyTest {
thrown = false;
try {
policy.setAttributeId("foo");
- } catch (UnmodifiableComponentException e) {
+ } catch (final UnmodifiableComponentException e) {
thrown = true;
}
Assert.assertTrue(thrown, "SetAttributeId after init");
@@ -130,7 +131,7 @@ public class AttributeValueFilterPolicyTest {
thrown = false;
try {
policy.getAttributeId();
- } catch (DestroyedComponentException e) {
+ } catch (final DestroyedComponentException e) {
thrown = true;
}
Assert.assertTrue(thrown, "GetAttributeId after destroy");
@@ -140,7 +141,7 @@ public class AttributeValueFilterPolicyTest {
thrown = false;
try {
policy.setAttributeId("foo");
- } catch (DestroyedComponentException e) {
+ } catch (final DestroyedComponentException e) {
thrown = true;
}
Assert.assertTrue(thrown, "SetAttributeId after destroy");
@@ -164,7 +165,7 @@ public class AttributeValueFilterPolicyTest {
boolean thrown = false;
try {
policy.setMatcher(Matcher.MATCHES_NONE);
- } catch (UnmodifiableComponentException e) {
+ } catch (final UnmodifiableComponentException e) {
thrown = true;
}
Assert.assertTrue(thrown, "AttributeValueMatcher - set after initialized");
@@ -196,7 +197,7 @@ public class AttributeValueFilterPolicyTest {
}
- @Test public void testApply() throws ComponentInitializationException {
+ @Test public void testApply() throws ComponentInitializationException, AttributeFilterException {
MockMatcher matcher = new MockMatcher();
final StringAttributeValue aStringAttributeValue = new StringAttributeValue("a");
@@ -220,7 +221,7 @@ public class AttributeValueFilterPolicyTest {
boolean thrown = false;
try {
policy.apply(null, new AttributeFilterContext());
- } catch (ConstraintViolationException e) {
+ } catch (final ConstraintViolationException e) {
thrown = true;
}
Assert.assertTrue(thrown, "Null attribute");
@@ -228,7 +229,7 @@ public class AttributeValueFilterPolicyTest {
thrown = false;
try {
policy.apply(new IdPAttribute(ATTR_NAME), null);
- } catch (ConstraintViolationException e) {
+ } catch (final ConstraintViolationException e) {
thrown = true;
}
Assert.assertTrue(thrown, "Null context");
@@ -236,9 +237,9 @@ public class AttributeValueFilterPolicyTest {
AttributeFilterContext context = new AttributeFilterContext();
context.setPrefilteredIdPAttributes(Arrays.asList(attribute1));
AttributeFilterWorkContext workCtx = context.getSubcontext(AttributeFilterWorkContext.class, true);
-
+ assert workCtx != null;
+
policy.apply(attribute1, context);
-
Collection<IdPAttributeValue> result = workCtx.getPermittedIdPAttributeValues().get(ATTR_NAME);
Assert.assertEquals(result.size(), 2);
Assert.assertTrue(result.contains(aStringAttributeValue));
@@ -254,11 +255,13 @@ public class AttributeValueFilterPolicyTest {
context = new AttributeFilterContext();
workCtx = context.getSubcontext(AttributeFilterWorkContext.class, true);
+ assert workCtx != null;
context.setPrefilteredIdPAttributes(Arrays.asList(attribute1));
policy.apply(attribute1, context);
result = workCtx.getDeniedAttributeValues().get(ATTR_NAME);
+ assert workCtx != null;
Assert.assertEquals(result.size(), 2);
Assert.assertTrue(result.contains(aStringAttributeValue));
Assert.assertTrue(result.contains(cStringAttributeValue));
diff --git a/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/filter/testing/MockMatcher.java b/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/filter/testing/MockMatcher.java
index 790c31e27..970acbaf8 100644
--- a/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/filter/testing/MockMatcher.java
+++ b/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/filter/testing/MockMatcher.java
@@ -23,6 +23,8 @@ import java.util.LinkedHashSet;
import java.util.Objects;
import java.util.Set;
+import javax.annotation.Nonnull;
+
import net.shibboleth.idp.attribute.IdPAttribute;
import net.shibboleth.idp.attribute.IdPAttributeValue;
import net.shibboleth.idp.attribute.filter.Matcher;
@@ -76,7 +78,8 @@ public class MockMatcher extends AbstractIdentifiedInitializableComponent implem
/** {@inheritDoc} */
@Override
- public Set<IdPAttributeValue> getMatchingValues(IdPAttribute attribute, AttributeFilterContext filterContext) {
+ public Set<IdPAttributeValue> getMatchingValues(@Nonnull final IdPAttribute attribute,
+ @Nonnull final AttributeFilterContext filterContext) {
if (fails) {
return null;
}
diff --git a/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/testing/SAMLAttributeDataConnector.java b/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/testing/SAMLAttributeDataConnector.java
index 782e74bfc..a8778ff57 100644
--- a/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/testing/SAMLAttributeDataConnector.java
+++ b/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/dc/impl/testing/SAMLAttributeDataConnector.java
@@ -114,8 +114,9 @@ public class SAMLAttributeDataConnector extends AbstractDataConnector {
* @param inputString string to encode
* @return encoded attribute value
*/
- private IdPAttributeValue encodeString(XSString inputString) {
- String value = inputString.getValue();
+ private IdPAttributeValue encodeString(@Nonnull final XSString inputString) {
+ final String value = inputString.getValue();
+ assert(value != null);
int separator = value.indexOf('@');
if (separator < 0) {
@@ -130,7 +131,7 @@ public class SAMLAttributeDataConnector extends AbstractDataConnector {
* @param attributeValues the input values
* @return a list of values, Possibly empty.
*/
- @Nullable protected @Nonnull List<IdPAttributeValue> encodeValues(final List<XMLObject> attributeValues) {
+ @Nullable protected List<IdPAttributeValue> encodeValues(final List<XMLObject> attributeValues) {
final ArrayList<IdPAttributeValue> result = new ArrayList<>(attributeValues.size());
for (XMLObject object : attributeValues) {
@@ -155,8 +156,9 @@ public class SAMLAttributeDataConnector extends AbstractDataConnector {
final Map<String, IdPAttribute> retVal = new HashMap<>(samlAttributes.size());
- for (Attribute samlAttribute : samlAttributes) {
+ for (final Attribute samlAttribute : samlAttributes) {
final String attributeName = samlAttribute.getName();
+ assert attributeName != null;
log.debug("Connector '{}': found attribute named '{}'", getId(), attributeName);
final List<IdPAttributeValue> values = encodeValues(samlAttribute.getAttributeValues());
diff --git a/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/MockAttributeDefinition.java b/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/MockAttributeDefinition.java
index 2cbeb79f3..deed246e7 100644
--- a/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/MockAttributeDefinition.java
+++ b/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/MockAttributeDefinition.java
@@ -26,6 +26,7 @@ import net.shibboleth.idp.attribute.resolver.AbstractAttributeDefinition;
import net.shibboleth.idp.attribute.resolver.ResolutionException;
import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
import net.shibboleth.shared.component.ComponentInitializationException;
/** An attribute definition that simply returns a static value. */
@@ -39,10 +40,10 @@ public class MockAttributeDefinition extends AbstractAttributeDefinition {
private int initializeCount;
/** Static value returned by this definition. */
- private IdPAttribute staticValue;
+ @Nullable private IdPAttribute staticValue;
/** Exception thrown by resolution. */
- private ResolutionException resolutionException;
+ @Nullable private ResolutionException resolutionException;
/**
* Constructor.
@@ -52,7 +53,8 @@ public class MockAttributeDefinition extends AbstractAttributeDefinition {
*
* @throws ComponentInitializationException ...
*/
- public MockAttributeDefinition(final String id, final IdPAttribute value) throws ComponentInitializationException {
+ public MockAttributeDefinition(@Nonnull @NotEmpty final String id, @Nullable final IdPAttribute value)
+ throws ComponentInitializationException {
setId(id);
staticValue = value;
}
@@ -63,7 +65,7 @@ public class MockAttributeDefinition extends AbstractAttributeDefinition {
* @param id id of the data connector
* @param exception exception thrown by resolution
*/
- public MockAttributeDefinition(final String id, final ResolutionException exception) {
+ public MockAttributeDefinition(@Nonnull @NotEmpty final String id, @Nullable final ResolutionException exception) {
setId(id);
resolutionException = exception;
}
diff --git a/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/MockDataConnector.java b/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/MockDataConnector.java
index 6756f5ea4..93e16c8d2 100644
--- a/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/MockDataConnector.java
+++ b/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/MockDataConnector.java
@@ -32,6 +32,8 @@ import net.shibboleth.idp.attribute.resolver.ResolverAttributeDefinitionDependen
import net.shibboleth.idp.attribute.resolver.ResolverDataConnectorDependency;
import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
import net.shibboleth.shared.component.ComponentInitializationException;
/** A data connector that just returns a static collection of attributes. */
@@ -45,10 +47,10 @@ public class MockDataConnector extends AbstractDataConnector {
private int initializeCount;
/** Static collection of values returned by this connector. */
- private final Map<String, IdPAttribute> values;
+ @Nullable @NonnullElements private final Map<String, IdPAttribute> values;
/** Exception thrown by resolution. */
- private ResolutionException resolutionException;
+ @Nullable private ResolutionException resolutionException;
/**
* Constructor.
@@ -58,7 +60,9 @@ public class MockDataConnector extends AbstractDataConnector {
*
* @throws ComponentInitializationException ...
*/
- public MockDataConnector(String id, Map<String, IdPAttribute> connectorValues) throws ComponentInitializationException {
+ public MockDataConnector(@Nonnull @NotEmpty String id,
+ @Nullable @NonnullElements Map<String, IdPAttribute> connectorValues)
+ throws ComponentInitializationException {
setId(id);
values = connectorValues;
}
@@ -72,10 +76,10 @@ public class MockDataConnector extends AbstractDataConnector {
* @param dcDepends The DC dependencies
* @throws ComponentInitializationException if initialization failed
*/
- public MockDataConnector(String id,
- Map<String, IdPAttribute> connectorValues,
- Set<ResolverAttributeDefinitionDependency> attrDepends,
- Set<ResolverDataConnectorDependency> dcDepends
+ public MockDataConnector(@Nonnull @NotEmpty String id,
+ @Nullable @NonnullElements Map<String, IdPAttribute> connectorValues,
+ @Nullable @NonnullElements Set<ResolverAttributeDefinitionDependency> attrDepends,
+ @Nullable @NonnullElements Set<ResolverDataConnectorDependency> dcDepends
) throws ComponentInitializationException {
setAttributeDependencies(attrDepends == null? Collections.emptySet() : attrDepends);
setDataConnectorDependencies(dcDepends == null? Collections.emptySet() : dcDepends);
@@ -89,7 +93,7 @@ public class MockDataConnector extends AbstractDataConnector {
*
* @param fail <code>true</code> to return a {@link ResolutionException}, otherwise <code>null</code>
*/
- public void setFailure(boolean fail) {
+ public void setFailure(final boolean fail) {
if (fail) {
resolutionException = new ResolutionException();
} else {
diff --git a/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/MockStaticAttributeDefinition.java b/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/MockStaticAttributeDefinition.java
index fd2245cf4..ef3c004af 100644
--- a/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/MockStaticAttributeDefinition.java
+++ b/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/MockStaticAttributeDefinition.java
@@ -40,19 +40,17 @@ public class MockStaticAttributeDefinition extends AbstractAttributeDefinition {
@Nonnull private final Logger log = LoggerFactory.getLogger(MockStaticAttributeDefinition.class);
/** Static value returned by this definition. */
- private IdPAttribute value;
+ @Nullable private IdPAttribute value;
/**
* Set the attribute value we are returning.
*
* @param newAttribute what to set.
*/
- public void setValue(@Nullable IdPAttribute newAttribute) {
+ public void setValue(@Nullable final IdPAttribute newAttribute) {
checkSetterPreconditions();
- if (null != newAttribute) {
- value = newAttribute;
- }
+ value = newAttribute;
}
/**
@@ -60,7 +58,7 @@ public class MockStaticAttributeDefinition extends AbstractAttributeDefinition {
*
* @return the attribute.
*/
- @Nonnull public IdPAttribute getValue() {
+ @Nullable public IdPAttribute getValue() {
return value;
}
diff --git a/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/MockStaticDataConnector.java b/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/MockStaticDataConnector.java
index a9524651a..d675597c6 100644
--- a/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/MockStaticDataConnector.java
+++ b/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/MockStaticDataConnector.java
@@ -33,6 +33,7 @@ import net.shibboleth.idp.attribute.resolver.AbstractDataConnector;
import net.shibboleth.idp.attribute.resolver.ResolutionException;
import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
import net.shibboleth.shared.component.ComponentInitializationException;
/** An attribute definition that simply returns a static value. Used for testing only. This is
@@ -44,14 +45,14 @@ public class MockStaticDataConnector extends AbstractDataConnector {
@Nonnull private final Logger log = LoggerFactory.getLogger(MockStaticDataConnector.class);
/** Static collection of values returned by this connector. */
- private Map<String, IdPAttribute> attributes;
+ @Nullable @NonnullElements private Map<String, IdPAttribute> attributes;
/**
* Get the static values returned by this connector.
*
* @return static values returned by this connector
*/
- @Nonnull public Map<String, IdPAttribute> getAttributes() {
+ @Nullable @NonnullElements public Map<String, IdPAttribute> getAttributes() {
return attributes;
}
@@ -60,7 +61,7 @@ public class MockStaticDataConnector extends AbstractDataConnector {
*
* @param newValues static values returned by this connector
*/
- public void setValues(@Nullable Collection<IdPAttribute> newValues) {
+ public void setValues(@Nullable @NonnullElements Collection<IdPAttribute> newValues) {
checkSetterPreconditions();
if (null == newValues) {
@@ -68,8 +69,8 @@ public class MockStaticDataConnector extends AbstractDataConnector {
return;
}
- Map<String, IdPAttribute> map = new HashMap<>(newValues.size());
- for (IdPAttribute attr:newValues) {
+ final Map<String, IdPAttribute> map = new HashMap<>(newValues.size());
+ for (final IdPAttribute attr : newValues) {
if (null == attr) {
continue;
}
diff --git a/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/ResolverTestSupport.java b/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/ResolverTestSupport.java
index 6dbdd789e..50d6e815d 100644
--- a/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/ResolverTestSupport.java
+++ b/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/ResolverTestSupport.java
@@ -21,6 +21,9 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
import net.shibboleth.idp.attribute.IdPAttribute;
import net.shibboleth.idp.attribute.IdPAttributeValue;
import net.shibboleth.idp.attribute.StringAttributeValue;
@@ -30,35 +33,36 @@ import net.shibboleth.idp.attribute.resolver.ResolutionException;
import net.shibboleth.idp.attribute.resolver.ResolverPlugin;
import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
+import net.shibboleth.shared.annotation.constraint.NotEmpty;
import net.shibboleth.shared.component.ComponentInitializationException;
/** Support class for attribute resolvers testing. */
public class ResolverTestSupport {
/** eduPersonAfiliation. */
- public static final String EPA_ATTRIB_ID = "urn:oid:1.3.6.1.4.1.5923.1.1.1.1";
+ @Nonnull @NotEmpty public static final String EPA_ATTRIB_ID = "urn:oid:1.3.6.1.4.1.5923.1.1.1.1";
/** Two affiliations. */
- public static final String[] EPA1_VALUES = new String[] {"student", "member"};
+ @Nonnull @NotEmpty public static final String[] EPA1_VALUES = new String[] {"student", "member"};
/** Another two affiliations. */
- public static final String[] EPA2_VALUES = new String[] {"staff", "member"};
+ @Nonnull @NotEmpty public static final String[] EPA2_VALUES = new String[] {"staff", "member"};
/** Three affiliations. */
- public static final String[] EPA3_VALUES = new String[] {"student", "part-time-student", "library-walk-in"};
+ @Nonnull @NotEmpty public static final String[] EPA3_VALUES = new String[] {"student", "part-time-student", "library-walk-in"};
/** eduPersonEntitlement. */
- public static final String EPE_ATTRIB_ID = "urn:oid:1.3.6.1.4.1.5923.1.1.1.7";
+ @Nonnull @NotEmpty public static final String EPE_ATTRIB_ID = "urn:oid:1.3.6.1.4.1.5923.1.1.1.7";
/** Two entitlement URIs. */
- public static final String[] EPE1_VALUES = new String[] {"http://example.org/entitlement1",
+ @Nonnull @NotEmpty public static final String[] EPE1_VALUES = new String[] {"http://example.org/entitlement1",
"http://example.org/entitlement2"};
/** An entitlement URN. */
- public static final String[] EPE2_VALUES = new String[] {"urn:example.org:entitlement1"};
+ @Nonnull @NotEmpty public static final String[] EPE2_VALUES = new String[] {"urn:example.org:entitlement1"};
/** A different entitlement URN. */
- public static final String[] EPE3_VALUES = new String[] {"urn:example.org:entitlement2"};
+ @Nonnull @NotEmpty public static final String[] EPE3_VALUES = new String[] {"urn:example.org:entitlement2"};
/** work method to build a {@link AttributeResolutionContext}
* @param plugins what to pupulate
@@ -69,6 +73,8 @@ public class ResolverTestSupport {
final AttributeResolverWorkContext workContext =
resolutionContext.getSubcontext(AttributeResolverWorkContext.class, true);
+ assert workContext != null;
+
MockStaticAttributeDefinition definition;
MockStaticDataConnector connector;
try {
@@ -84,7 +90,7 @@ public class ResolverTestSupport {
workContext.recordDataConnectorResolution(connector, connector.resolve(resolutionContext));
}
}
- } catch (ResolutionException e) {
+ } catch (final ResolutionException e) {
// this can't happen here
e.printStackTrace();
}
@@ -97,7 +103,7 @@ public class ResolverTestSupport {
* @param values its values (as strings)
* @return the Attribute
*/
- public static IdPAttribute buildAttribute(final String attributeId, final String... values) {
+ @Nonnull public static IdPAttribute buildAttribute(@Nonnull @NotEmpty final String attributeId, @Nonnull final String... values) {
final IdPAttribute attribute = new IdPAttribute(attributeId);
List<IdPAttributeValue> valueList = new ArrayList<>();
@@ -114,7 +120,8 @@ public class ResolverTestSupport {
* @param values the values
* @return the definition
*/
- public static MockStaticAttributeDefinition buildAttributeDefinition(final String attributeId, final String... values) {
+ @Nullable public static MockStaticAttributeDefinition buildAttributeDefinition(@Nonnull @NotEmpty final String attributeId,
+ @Nonnull final String... values) {
final IdPAttribute attribute = buildAttribute(attributeId, values);
try {
@@ -123,7 +130,7 @@ public class ResolverTestSupport {
definition.setValue(attribute);
definition.initialize();
return definition;
- } catch (ComponentInitializationException e) {
+ } catch (final ComponentInitializationException e) {
// this can't happen here
e.printStackTrace();
return null;
@@ -135,7 +142,8 @@ public class ResolverTestSupport {
* @param attributes what to return
* @return the definition
*/
- public static MockStaticDataConnector buildDataConnector(final String connectorId, final IdPAttribute... attributes) {
+ @Nullable public static MockStaticDataConnector buildDataConnector(@Nonnull @NotEmpty final String connectorId,
+ @Nonnull final IdPAttribute... attributes) {
try {
final MockStaticDataConnector connector = new MockStaticDataConnector();
@@ -144,10 +152,11 @@ public class ResolverTestSupport {
connector.initialize();
return connector;
- } catch (ComponentInitializationException e) {
+ } catch (final ComponentInitializationException e) {
// this can't happen here
e.printStackTrace();
return null;
}
}
-}
+
+}
\ No newline at end of file
diff --git a/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/TestSources.java b/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/TestSources.java
index 8d1e479e6..f859eb5b6 100644
--- a/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/TestSources.java
+++ b/shib-attribute-testing/src/main/java/net/shibboleth/idp/attribute/resolver/testing/TestSources.java
@@ -225,9 +225,10 @@ public final class TestSources {
*/
@Nonnull public static AttributeResolutionContext createResolutionContext(String principal, String issuerID,
String recipientId) {
- ProfileRequestContext parent = new ProfileRequestContext();
- AttributeResolutionContext retVal = parent.getSubcontext(AttributeResolutionContext.class, true);
-
+ final ProfileRequestContext parent = new ProfileRequestContext();
+ final AttributeResolutionContext retVal = parent.getSubcontext(AttributeResolutionContext.class, true);
+ assert retVal != null;
+
retVal.setAttributeIssuerID(issuerID);
retVal.setAttributeRecipientID(recipientId);
retVal.setPrincipal(principal);
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the commits
mailing list