[java-identity-provider] branch main updated: IDP-2069 Null handling

Rod Widdowson rdw at steadingsoftware.com
Sat Feb 25 15:47:57 UTC 2023


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

rdw pushed a commit to branch main
in repository java-identity-provider.

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

The following commit(s) were added to refs/heads/main by this push:
     new 6a53af144 IDP-2069 Null handling
6a53af144 is described below

commit 6a53af1444273f2b8fc607709a41f1e69ecc73d9
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Sat Feb 25 15:37:53 2023 +0000

    IDP-2069 Null handling
    
    https://shibboleth.atlassian.net/browse/IDP-2069
    
    Cleanup idp-authn-impl tests. Phew!
---
 .../context/impl/AuthenticationContextTest.java    |   9 +-
 .../impl/BaseAttributeDefinitionParserTest.java    |  43 ++---
 ...ontextDerivedAttributeDefinitionParserTest.java |  34 +++-
 .../context/impl/SubjectDataConnectorTest.java     |  25 ++-
 .../SubjectDerivedAttributeValuesFunctionTest.java |  28 ++-
 .../ExtractDuoAuthenticationFromHeadersTest.java   |   1 -
 ...ttributeSourcedSubjectCanonicalizationTest.java |  56 +++---
 .../DefaultAuthenticationResultSerializerTest.java |  68 ++++----
 .../idp/authn/impl/ExtractRemoteUserTest.java      |  26 +--
 .../authn/impl/ExtractUserAgentAddressTest.java    |  18 +-
 .../authn/impl/ExtractUserAgentIdentifierTest.java |   5 +-
 .../ExtractUsernamePasswordFromBasicAuthTest.java  |  22 +--
 ...ExtractUsernamePasswordFromFormRequestTest.java |  18 +-
 .../ExtractX509CertificateFromRequestTest.java     |  10 +-
 .../authn/impl/FilterFlowsByForceAuthnTest.java    |   3 +
 .../impl/FilterFlowsByNonBrowserSupportTest.java   |   3 +
 .../FinalizeMultiFactorAuthenticationTest.java     |  15 +-
 .../impl/HTPasswdCredentialValidatorTest.java      |  94 ++++++----
 .../InitializeRequestedPrincipalContextTest.java   |  27 ++-
 .../authn/impl/JAASCredentialValidatorTest.java    | 100 +++++++----
 .../authn/impl/LDAPCredentialValidatorTest.java    | 191 +++++++++++++--------
 .../impl/PopulateAuthenticationContextTest.java    |   6 +-
 ...pulateMultiFactorAuthenticationContextTest.java |  15 +-
 ...PopulateSubjectCanonicalizationContextTest.java |   4 +-
 .../impl/PreserveAuthenticationFlowStateTest.java  |  29 +++-
 ...RelyingPartyMapJAASLoginConfigStrategyTest.java |  10 +-
 .../authn/impl/SelectAuthenticationFlowTest.java   |  66 +++++--
 .../SelectSubjectCanonicalizationFlowTest.java     |  21 ++-
 .../impl/SimpleSubjectCanonicalizationTest.java    |  18 +-
 .../StorageBackedAccountLockoutManagerTest.java    |  11 +-
 .../idp/authn/impl/ValidateCredentialsTest.java    |  90 ++++++----
 .../impl/ValidateExternalAuthenticationTest.java   |  59 ++++---
 .../idp/authn/impl/ValidateFunctionResultTest.java |  34 ++--
 .../idp/authn/impl/ValidateRemoteUserTest.java     |  28 ++-
 .../authn/impl/ValidateUserAgentAddressTest.java   |  23 ++-
 .../impl/X500SubjectCanonicalizationTest.java      |  38 ++--
 .../X509CertificateCredentialValidatorTest.java    |  34 ++--
 .../testing/BaseAuthenticationContextTest.java     |  14 ++
 .../impl/X500PrincipalSerializerTest.java          |   2 +-
 .../proxy/impl/ExtractDiscoveryResponseTest.java   |  14 +-
 .../InitializeProxyProfileRequestContextTest.java  |   7 +-
 .../impl/AttributeRevocationConditionTest.java     |   8 +-
 .../impl/RevocationCacheConditionTest.java         |   3 +
 .../spnego/impl/KerberosRealmSettingsTest.java     |   4 +-
 .../spnego/impl/SPNEGOAuthnControllerTest.java     |  14 +-
 .../spnego/impl/SPNEGOAutoLoginManagerTest.java    |   4 +-
 46 files changed, 870 insertions(+), 482 deletions(-)

diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/context/impl/AuthenticationContextTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/context/impl/AuthenticationContextTest.java
index dea85d5f0..020d8cb05 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/context/impl/AuthenticationContextTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/context/impl/AuthenticationContextTest.java
@@ -127,7 +127,8 @@ public class AuthenticationContextTest {
         Thread.sleep(50);
 
         ctx.setCompletionInstant();
-        Assert.assertTrue(ctx.getCompletionInstant().isAfter(now));
+        final Instant completion = ctx.getCompletionInstant();
+        assert completion != null && completion.isAfter(now);
     }
     
     /**
@@ -141,7 +142,7 @@ public class AuthenticationContextTest {
         
         ctx.addRequestedPrincipalContext("foo", new TestPrincipal("bar"), false);
         RequestedPrincipalContext rpCtx = ctx.getSubcontext(RequestedPrincipalContext.class);
-        Assert.assertNotNull(rpCtx);
+        assert rpCtx!=null;
         Assert.assertEquals(rpCtx.getOperator(), "foo");
         Assert.assertEquals(rpCtx.getRequestedPrincipals(), Collections.singletonList(new TestPrincipal("bar")));
         
@@ -149,13 +150,13 @@ public class AuthenticationContextTest {
         
         ctx.addRequestedPrincipalContext("fob", TestPrincipal.class.getName(), "baz", true);
         rpCtx = ctx.getSubcontext(RequestedPrincipalContext.class);
-        Assert.assertNotNull(rpCtx);
+        assert rpCtx!=null;
         Assert.assertEquals(rpCtx.getOperator(), "fob");
         Assert.assertEquals(rpCtx.getRequestedPrincipals(), Collections.singletonList(new TestPrincipal("baz")));
 
         ctx.addRequestedPrincipalContext("fog", TestPrincipal.class.getName(), Arrays.asList("baf", "bag"), true);
         rpCtx = ctx.getSubcontext(RequestedPrincipalContext.class);
-        Assert.assertNotNull(rpCtx);
+        assert rpCtx!=null;
         Assert.assertEquals(rpCtx.getOperator(), "fog");
         Assert.assertEquals(rpCtx.getRequestedPrincipals().size(), 2);
     }
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/context/impl/BaseAttributeDefinitionParserTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/context/impl/BaseAttributeDefinitionParserTest.java
index 659ae2a7a..3b40e18a7 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/context/impl/BaseAttributeDefinitionParserTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/context/impl/BaseAttributeDefinitionParserTest.java
@@ -22,6 +22,9 @@ import static org.testng.Assert.assertEquals;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
+import java.util.Map;
+
+import javax.annotation.Nonnull;
 
 import org.opensaml.core.testing.OpenSAMLInitBaseTestCase;
 import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
@@ -31,12 +34,10 @@ import org.springframework.context.support.GenericApplicationContext;
 import org.testng.annotations.AfterMethod;
 
 import net.shibboleth.idp.attribute.resolver.AttributeDefinition;
-import net.shibboleth.idp.attribute.resolver.AttributeResolver;
 import net.shibboleth.idp.attribute.resolver.DataConnector;
 import net.shibboleth.idp.attribute.resolver.impl.AttributeResolverImpl;
 import net.shibboleth.idp.attribute.resolver.spring.ad.BaseAttributeDefinitionParser;
 import net.shibboleth.idp.attribute.resolver.spring.ad.impl.SimpleAttributeDefinitionParser;
-import net.shibboleth.idp.attribute.resolver.spring.impl.AttributeResolverServiceStrategy;
 import net.shibboleth.shared.component.ComponentInitializationException;
 import net.shibboleth.shared.spring.config.IdentifiableBeanPostProcessor;
 import net.shibboleth.shared.spring.config.StringToDurationConverter;
@@ -44,7 +45,6 @@ import net.shibboleth.shared.spring.config.StringToIPRangeConverter;
 import net.shibboleth.shared.spring.config.StringToResourceConverter;
 import net.shibboleth.shared.spring.context.FilesystemGenericApplicationContext;
 import net.shibboleth.shared.spring.custom.SchemaTypeAwareXMLBeanDefinitionReader;
-import net.shibboleth.shared.spring.service.impl.SpringServiceableComponent;
 
 /**
  * Base class for tests for {@link SimpleAttributeDefinitionParser} and by extension {@link BaseAttributeDefinitionParser}.
@@ -95,7 +95,7 @@ public abstract class BaseAttributeDefinitionParserTest extends OpenSAMLInitBase
         loadFile(fileName, context, false);
     }
 
-    protected <Type> Type getBean(final String fileName, final Class<Type> claz, final GenericApplicationContext context,
+    @Nonnull protected <Type> Type getBean(final String fileName, final Class<Type> claz, final GenericApplicationContext context,
             final boolean supressValid) {
 
         final ConversionServiceFactoryBean service = new ConversionServiceFactoryBean();
@@ -113,33 +113,34 @@ public abstract class BaseAttributeDefinitionParserTest extends OpenSAMLInitBase
 
         final Collection<Type> beans = context.getBeansOfType(claz).values();
         assertEquals(beans.size(), 1);
-
-        return beans.iterator().next();
+        final Type result = beans.iterator().next();
+        assert result != null;
+        return result;
     }
 
-    protected <Type> Type getBean(final String fileName, final Class<Type> claz, final GenericApplicationContext context) {
+    @Nonnull protected <Type> Type getBean(final String fileName, final Class<Type> claz, final GenericApplicationContext context) {
         return getBean(fileName, claz, context, false);
     }
 
-    protected <Type extends AttributeDefinition> Type getAttributeDefn(final String fileName, final Class<Type> claz,
+    @Nonnull protected <Type extends AttributeDefinition> Type getAttributeDefn(final String fileName, final Class<Type> claz,
             final GenericApplicationContext context) {
 
         return getBean(ATTRIBUTE_FILE_PATH + fileName, claz, context);
     }
 
-    private <Type extends AttributeDefinition> Type getAttributeDefn(final String fileName, final Class<Type> claz,
+    @Nonnull private <Type extends AttributeDefinition> Type getAttributeDefn(final String fileName, final Class<Type> claz,
             final GenericApplicationContext context, final boolean supressValidation) {
 
         return getBean(ATTRIBUTE_FILE_PATH + fileName, claz, context, supressValidation);
     }
 
-    protected <Type extends AttributeDefinition> Type getAttributeDefn(final String fileName, final String beanFileName,
+    @Nonnull protected <Type extends AttributeDefinition> Type getAttributeDefn(final String fileName, final String beanFileName,
             final Class<Type> claz) {
         return getAttributeDefn(fileName, beanFileName, claz, false);
 
     }
 
-    private <Type extends AttributeDefinition> Type getAttributeDefn(final String fileName, final String beanFileName,
+    @Nonnull private <Type extends AttributeDefinition> Type getAttributeDefn(final String fileName, final String beanFileName,
             final Class<Type> claz, final boolean supressValidation) {
 
         final GenericApplicationContext context = new GenericApplicationContext();
@@ -161,12 +162,12 @@ public abstract class BaseAttributeDefinitionParserTest extends OpenSAMLInitBase
         return getAttributeDefn(fileName, claz, context, supressValidation);
     }
 
-    protected <Type extends AttributeDefinition> Type getAttributeDefn(final String fileName, final Class<Type> claz) {
+    @Nonnull protected <Type extends AttributeDefinition> Type getAttributeDefn(final String fileName, final Class<Type> claz) {
         return getAttributeDefn(fileName, claz, false);
 
     }
 
-    protected <Type extends AttributeDefinition> Type getAttributeDefn(final String fileName, final Class<Type> claz,
+    @Nonnull protected <Type extends AttributeDefinition> Type getAttributeDefn(final String fileName, final Class<Type> claz,
             final boolean supressValid) {
 
         final GenericApplicationContext context = new FilesystemGenericApplicationContext();
@@ -176,11 +177,11 @@ public abstract class BaseAttributeDefinitionParserTest extends OpenSAMLInitBase
         return getAttributeDefn(fileName, claz, context, supressValid);
     }
 
-    protected <Type extends DataConnector> Type getDataConnector(final String fileName, final Class<Type> claz) {
+    @Nonnull protected <Type extends DataConnector> Type getDataConnector(final String fileName, final Class<Type> claz) {
         return getDataConnector(fileName, claz, false);
     }
     
-    private <Type extends DataConnector> Type
+    @Nonnull private <Type extends DataConnector> Type
             getDataConnector(final String fileName, final Class<Type> claz, final boolean supressValid) {
 
         final GenericApplicationContext context = new GenericApplicationContext();
@@ -191,12 +192,14 @@ public abstract class BaseAttributeDefinitionParserTest extends OpenSAMLInitBase
         return getBean(DATACONNECTOR_FILE_PATH + fileName, claz, context, supressValid);
     }
 
-    static public AttributeResolverImpl getResolver(final ApplicationContext appContext) throws ComponentInitializationException {
-        final Collection<AttributeDefinition> definitions =
-                appContext.getBeansOfType(AttributeDefinition.class).values();
+    @Nonnull static public AttributeResolverImpl getResolver(final ApplicationContext appContext) throws ComponentInitializationException {
+        final Map<String, AttributeDefinition> attributesMap = appContext.getBeansOfType(AttributeDefinition.class);
+        final Collection<AttributeDefinition> definitions = attributesMap.values();
+        final Map<String, DataConnector> dataConnectorsMap = appContext.getBeansOfType(DataConnector.class);
+        final Collection<DataConnector> connectors = dataConnectorsMap.values();
+        assert connectors != null && definitions != null; 
 
-        final Collection<DataConnector> connectors = appContext.getBeansOfType(DataConnector.class).values();
-        final AttributeResolverImpl resolver = new AttributeResolverImpl();
+        @Nonnull final AttributeResolverImpl resolver = new AttributeResolverImpl();
         resolver.setAttributeDefinitions(definitions);
         resolver.setDataConnectors(connectors);
         resolver.setId("testResolver");
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/context/impl/ContextDerivedAttributeDefinitionParserTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/context/impl/ContextDerivedAttributeDefinitionParserTest.java
index fc063e502..f42a49f3c 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/context/impl/ContextDerivedAttributeDefinitionParserTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/context/impl/ContextDerivedAttributeDefinitionParserTest.java
@@ -24,8 +24,10 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
+import javax.annotation.Nonnull;
 import javax.security.auth.Subject;
 
+import org.opensaml.messaging.context.BaseContext;
 import org.springframework.beans.factory.BeanDefinitionStoreException;
 import org.testng.annotations.Test;
 
@@ -52,9 +54,9 @@ import net.shibboleth.idp.saml.authn.principal.AuthenticationMethodPrincipal;
 public class ContextDerivedAttributeDefinitionParserTest extends BaseAttributeDefinitionParserTest {
 
     /** Simple result. */
-    private static final String SIMPLE_VALUE = "simple";
+    @Nonnull private static final String SIMPLE_VALUE = "simple";
 
-    private AttributeResolutionContext getCtx(final String attributeName, boolean c14n) {
+    @Nonnull private AttributeResolutionContext getCtx(@Nonnull final String attributeName, boolean c14n) {
         final List<IdPAttributeValue> list = new ArrayList<>(2);
         list.add(new StringAttributeValue(SIMPLE_VALUE));
         list.add(new StringAttributeValue(SIMPLE_VALUE + "2"));
@@ -68,10 +70,12 @@ public class ContextDerivedAttributeDefinitionParserTest extends BaseAttributeDe
         subject.getPrincipals().add(new IdPAttributePrincipal(attr));
         subject.getPrincipals().add(new AuthenticationMethodPrincipal(SIMPLE_VALUE + "2"));
 
+        final BaseContext parent = ctx.getParent();
+        assert parent != null;
         if (c14n) {
-            ctx.getParent().getSubcontext(SubjectCanonicalizationContext.class, true).setSubject(subject);
+            parent.getOrCreateSubcontext(SubjectCanonicalizationContext.class).setSubject(subject);
         } else {
-            final SubjectContext sc = ctx.getParent().getSubcontext(SubjectContext.class, true);
+            final SubjectContext sc = parent.getOrCreateSubcontext(SubjectContext.class);
             final Map<String, AuthenticationResult> authnResults = sc.getAuthenticationResults();
             authnResults.put("one", new AuthenticationResult("1", subject));
         }
@@ -83,7 +87,9 @@ public class ContextDerivedAttributeDefinitionParserTest extends BaseAttributeDe
         final AttributeDefinition attrDef =
                 getAttributeDefn("subjectDerived.xml", ContextDerivedAttributeDefinition.class);
 
-        final List<IdPAttributeValue> foo = attrDef.resolve(getCtx("Whatever", false)).getValues();
+        final IdPAttribute attr = attrDef.resolve(getCtx("Whatever", false));
+        assert attr != null;
+        final List<IdPAttributeValue> foo = attr.getValues();
 
         assertEquals(2, foo.size());
         assertTrue(foo.contains(new StringAttributeValue(SIMPLE_VALUE)));
@@ -95,7 +101,9 @@ public class ContextDerivedAttributeDefinitionParserTest extends BaseAttributeDe
         final AttributeDefinition attrDef =
                 getAttributeDefn("subjectDerivedViaC14N.xml", ContextDerivedAttributeDefinition.class);
 
-        final List<IdPAttributeValue> foo = attrDef.resolve(getCtx("Whatever", true)).getValues();
+        final IdPAttribute attr = attrDef.resolve(getCtx("Whatever", true));
+        assert attr != null;
+        final List<IdPAttributeValue> foo = attr.getValues();
 
         assertEquals(2, foo.size());
         assertTrue(foo.contains(new StringAttributeValue(SIMPLE_VALUE)));
@@ -107,7 +115,10 @@ public class ContextDerivedAttributeDefinitionParserTest extends BaseAttributeDe
         final AttributeDefinition attrDef = getAttributeDefn("subjectDerivedComplex.xml", "contextDerivedBeans.xml",
                 ContextDerivedAttributeDefinition.class);
 
-        final List<IdPAttributeValue> foo = attrDef.resolve(getCtx("BeanWhatever", false)).getValues();
+        assert attrDef != null;
+        final IdPAttribute attr = attrDef.resolve(getCtx("BeanWhatever", false));
+        assert attr != null;
+        final List<IdPAttributeValue> foo = attr.getValues();
 
         assertEquals(2, foo.size());
         assertTrue(foo.contains(new StringAttributeValue(SIMPLE_VALUE)));
@@ -118,7 +129,10 @@ public class ContextDerivedAttributeDefinitionParserTest extends BaseAttributeDe
         final AttributeDefinition attrDef = getAttributeDefn("contextDerived.xml", "contextDerivedBeans.xml",
                 ContextDerivedAttributeDefinition.class);
 
-        final List<IdPAttributeValue> foo = attrDef.resolve(getCtx("BeanWhatever", false)).getValues();
+        assert attrDef != null;
+        final IdPAttribute attr = attrDef.resolve(getCtx("BeanWhatever", false));
+        assert attr != null;
+        final List<IdPAttributeValue> foo = attr.getValues();
 
         assertEquals(2, foo.size());
         assertTrue(foo.contains(new StringAttributeValue(SIMPLE_VALUE)));
@@ -128,7 +142,9 @@ public class ContextDerivedAttributeDefinitionParserTest extends BaseAttributeDe
     @Test public void warn() throws ResolutionException {
         final AttributeDefinition attrDef =
                 getAttributeDefn("subjectDerivedWarn.xml", ContextDerivedAttributeDefinition.class);
-        final List<IdPAttributeValue> foo = attrDef.resolve(getCtx("Whatever", false)).getValues();
+        final IdPAttribute attr = attrDef.resolve(getCtx("Whatever", false));
+        assert attr != null;
+        final List<IdPAttributeValue> foo = attr.getValues();
 
         assertEquals(2, foo.size());
         assertTrue(foo.contains(new StringAttributeValue(SIMPLE_VALUE)));
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/context/impl/SubjectDataConnectorTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/context/impl/SubjectDataConnectorTest.java
index 00027d31f..d36066052 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/context/impl/SubjectDataConnectorTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/context/impl/SubjectDataConnectorTest.java
@@ -23,8 +23,10 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
+import javax.annotation.Nonnull;
 import javax.security.auth.Subject;
 
+import org.opensaml.messaging.context.BaseContext;
 import org.testng.annotations.Test;
 
 import net.shibboleth.idp.attribute.IdPAttribute;
@@ -46,7 +48,7 @@ import net.shibboleth.shared.component.ComponentInitializationException;
 public class SubjectDataConnectorTest {
 
     /** Simple result. */
-    private static final String SIMPLE_VALUE = "simple";
+    @Nonnull private static final String SIMPLE_VALUE = "simple";
     
     @Test public void simpleValue() throws ComponentInitializationException, ResolutionException {
         final List<IdPAttributeValue> list = new ArrayList<>(2);
@@ -68,7 +70,9 @@ public class SubjectDataConnectorTest {
         final AttributeResolutionContext ctx =
                 TestSources.createResolutionContext(TestSources.PRINCIPAL_ID, TestSources.IDP_ENTITY_ID,
                         TestSources.SP_ENTITY_ID);
-        final SubjectContext sc = ctx.getParent().getSubcontext(SubjectContext.class, true);
+        final BaseContext parent = ctx.getParent();
+        assert parent != null;
+        final SubjectContext sc = parent.getOrCreateSubcontext(SubjectContext.class);
         final Map<String, AuthenticationResult> authnResults = sc.getAuthenticationResults();
         final Subject subject = new Subject();
         subject.getPrincipals().add(new IdPAttributePrincipal(attr));
@@ -77,8 +81,7 @@ public class SubjectDataConnectorTest {
         
         
         final Map<String,IdPAttribute> results = defn.resolve(ctx);
-        
-        assertEquals(1, results.size());
+        assert results != null && results.size() == 1;
         
         final IdPAttribute copy = results.get("wibble");
         
@@ -108,7 +111,9 @@ public class SubjectDataConnectorTest {
         final AttributeResolutionContext ctx =
                 TestSources.createResolutionContext(TestSources.PRINCIPAL_ID, TestSources.IDP_ENTITY_ID,
                         TestSources.SP_ENTITY_ID);
-        final SubjectCanonicalizationContext sc = ctx.getParent().getSubcontext(SubjectCanonicalizationContext.class, true);
+        final BaseContext parent = ctx.getParent();
+        assert parent != null;
+        final SubjectCanonicalizationContext sc = parent.getOrCreateSubcontext(SubjectCanonicalizationContext.class);
         final Subject subject = new Subject();
         subject.getPrincipals().add(new IdPAttributePrincipal(attr));
         subject.getPrincipals().add(new AuthenticationMethodPrincipal(SIMPLE_VALUE + "2"));
@@ -117,7 +122,7 @@ public class SubjectDataConnectorTest {
         
         final Map<String,IdPAttribute> results = defn.resolve(ctx);
         
-        assertEquals(1, results.size());
+        assert results != null && results.size() == 1;
         
         final IdPAttribute copy = results.get("wibble");
         
@@ -142,7 +147,9 @@ public class SubjectDataConnectorTest {
         final AttributeResolutionContext ctx =
                 TestSources.createResolutionContext(TestSources.PRINCIPAL_ID, TestSources.IDP_ENTITY_ID,
                         TestSources.SP_ENTITY_ID);
-        final SubjectContext sc = ctx.getParent().getSubcontext(SubjectContext.class, true);
+        final BaseContext parent = ctx.getParent();
+        assert parent != null;
+        final SubjectContext sc = parent.getOrCreateSubcontext(SubjectContext.class);
         final Map<String, AuthenticationResult> authnResults = sc.getAuthenticationResults();
         final Subject subject = new Subject();
         subject.getPrincipals().add(new AuthenticationMethodPrincipal(SIMPLE_VALUE + "2"));
@@ -169,7 +176,9 @@ public class SubjectDataConnectorTest {
         final AttributeResolutionContext ctx =
                 TestSources.createResolutionContext(TestSources.PRINCIPAL_ID, TestSources.IDP_ENTITY_ID,
                         TestSources.SP_ENTITY_ID);
-        final SubjectContext sc = ctx.getParent().getSubcontext(SubjectContext.class, true);
+        final BaseContext parent = ctx.getParent();
+        assert parent != null;
+        final SubjectContext sc = parent.getOrCreateSubcontext(SubjectContext.class);
         final Map<String, AuthenticationResult> authnResults = sc.getAuthenticationResults();
         final Subject subject = new Subject();
         subject.getPrincipals().add(new AuthenticationMethodPrincipal(SIMPLE_VALUE + "2"));
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/context/impl/SubjectDerivedAttributeValuesFunctionTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/context/impl/SubjectDerivedAttributeValuesFunctionTest.java
index bc1956f2d..2d737e544 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/context/impl/SubjectDerivedAttributeValuesFunctionTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/context/impl/SubjectDerivedAttributeValuesFunctionTest.java
@@ -26,8 +26,10 @@ import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 
+import javax.annotation.Nonnull;
 import javax.security.auth.Subject;
 
+import org.opensaml.messaging.context.BaseContext;
 import org.testng.annotations.Test;
 
 import net.shibboleth.idp.attribute.IdPAttribute;
@@ -52,6 +54,11 @@ public class SubjectDerivedAttributeValuesFunctionTest {
     /** Simple result. */
     private static final String SIMPLE_VALUE = "simple";
     
+    @Nonnull private List<IdPAttributeValue> doResolve(@Nonnull final ContextDerivedAttributeDefinition defn, @Nonnull final AttributeResolutionContext ctx) throws ResolutionException {
+        final IdPAttribute attr = defn.resolve(ctx);
+        assert attr!=null;
+        return attr.getValues();
+    }
 
     @Test public void noSubjectContext() throws ComponentInitializationException, ResolutionException {
 
@@ -100,7 +107,9 @@ public class SubjectDerivedAttributeValuesFunctionTest {
         final AttributeResolutionContext ctx =
                 TestSources.createResolutionContext(TestSources.PRINCIPAL_ID, TestSources.IDP_ENTITY_ID,
                         TestSources.SP_ENTITY_ID);
-        final SubjectContext sc = ctx.getParent().getSubcontext(SubjectContext.class, true);
+        final BaseContext parent = ctx.getParent();
+        assert parent != null;
+        final SubjectContext sc = parent.getOrCreateSubcontext(SubjectContext.class);
         final Map<String, AuthenticationResult> authnResults = sc.getAuthenticationResults();
         final Subject subject = new Subject();
         subject.getPrincipals().add(new IdPAttributePrincipal(attr));
@@ -108,7 +117,7 @@ public class SubjectDerivedAttributeValuesFunctionTest {
         authnResults.put("one", new AuthenticationResult("1", subject));
         
         
-      final List<IdPAttributeValue> foo = defn.resolve(ctx).getValues();
+      final List<IdPAttributeValue> foo = doResolve(defn, ctx);
         
         assertEquals(2, foo.size());
         assertTrue(foo.contains(new StringAttributeValue(SIMPLE_VALUE)));
@@ -145,7 +154,7 @@ public class SubjectDerivedAttributeValuesFunctionTest {
                 TestSources.createResolutionContext(TestSources.PRINCIPAL_ID, TestSources.IDP_ENTITY_ID,
                         TestSources.SP_ENTITY_ID);        
         
-        final List<IdPAttributeValue> foo = defn.resolve(ctx).getValues();
+        final List<IdPAttributeValue> foo =  doResolve(defn, ctx);
         
         assertEquals(2, foo.size());
         assertTrue(foo.contains(new StringAttributeValue(SIMPLE_VALUE)));
@@ -180,10 +189,13 @@ public class SubjectDerivedAttributeValuesFunctionTest {
 
         final AttributeResolutionContext ctx =
                 TestSources.createResolutionContext(TestSources.PRINCIPAL_ID, TestSources.IDP_ENTITY_ID,
-                        TestSources.SP_ENTITY_ID);        
-        ctx.getParent().getSubcontext(SubjectCanonicalizationContext.class, true).setSubject(subject);
+                        TestSources.SP_ENTITY_ID);
+        final BaseContext parent = ctx.getParent();
+        assert parent != null;
+        final SubjectCanonicalizationContext sc = parent.getOrCreateSubcontext(SubjectCanonicalizationContext.class);
+        sc.setSubject(subject);
         
-        final List<IdPAttributeValue> foo = defn.resolve(ctx).getValues();
+        final List<IdPAttributeValue> foo =  doResolve(defn, ctx);
         
         assertEquals(2, foo.size());
         assertTrue(foo.contains(new StringAttributeValue(SIMPLE_VALUE)));
@@ -212,7 +224,9 @@ public class SubjectDerivedAttributeValuesFunctionTest {
         final AttributeResolutionContext ctx =
                 TestSources.createResolutionContext(TestSources.PRINCIPAL_ID, TestSources.IDP_ENTITY_ID,
                         TestSources.SP_ENTITY_ID);
-        final SubjectContext sc = ctx.getParent().getSubcontext(SubjectContext.class, true);
+        final BaseContext parent = ctx.getParent();
+        assert parent != null;
+        final SubjectContext sc = parent.getOrCreateSubcontext(SubjectContext.class);
         final Map<String, AuthenticationResult> authnResults = sc.getAuthenticationResults();
         final Subject subject = new Subject();
         subject.getPrincipals().add(new IdPAttributePrincipal(attr));
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/duo/impl/ExtractDuoAuthenticationFromHeadersTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/duo/impl/ExtractDuoAuthenticationFromHeadersTest.java
index 6b7dfc2b9..b61a810fe 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/duo/impl/ExtractDuoAuthenticationFromHeadersTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/duo/impl/ExtractDuoAuthenticationFromHeadersTest.java
@@ -24,7 +24,6 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import jakarta.servlet.http.HttpServletRequest;
 import net.shibboleth.idp.authn.AuthnEventIds;
 import net.shibboleth.idp.authn.context.AuthenticationContext;
 import net.shibboleth.idp.authn.duo.DuoAuthAPI;
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/AttributeSourcedSubjectCanonicalizationTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/AttributeSourcedSubjectCanonicalizationTest.java
index 71df1e281..4438180b3 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/AttributeSourcedSubjectCanonicalizationTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/AttributeSourcedSubjectCanonicalizationTest.java
@@ -18,7 +18,6 @@
 package net.shibboleth.idp.authn.impl;
 
 import java.util.Collections;
-import java.util.List;
 
 import javax.security.auth.Subject;
 
@@ -36,6 +35,7 @@ import net.shibboleth.idp.authn.context.SubjectCanonicalizationContext;
 import net.shibboleth.idp.authn.impl.testing.BaseAuthenticationContextTest;
 import net.shibboleth.idp.authn.principal.IdPAttributePrincipal;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
+import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.component.ComponentInitializationException;
 
 /** {@link AttributeSourcedSubjectCanonicalization} unit test. */
@@ -48,7 +48,7 @@ public class AttributeSourcedSubjectCanonicalizationTest extends BaseAuthenticat
         super.setUp();
         
         action = new AttributeSourcedSubjectCanonicalization();
-        action.setAttributeSourceIds(List.of("attr1", "attr2"));
+        action.setAttributeSourceIds(CollectionSupport.listOf("attr1", "attr2"));
     }
     
     @Test(expectedExceptions=ComponentInitializationException.class)
@@ -69,12 +69,13 @@ public class AttributeSourcedSubjectCanonicalizationTest extends BaseAuthenticat
         action.initialize();
 
         Subject subject = new Subject();
-        prc.getSubcontext(SubjectCanonicalizationContext.class, true).setSubject(subject);
+        prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class).setSubject(subject);
         
         final Event event = action.execute(src);
         
         ActionTestingSupport.assertEvent(event, AuthnEventIds.INVALID_SUBJECT);
-        Assert.assertNotNull(prc.getSubcontext(SubjectCanonicalizationContext.class, false).getException());
+        SubjectCanonicalizationContext scc = prc.getSubcontext(SubjectCanonicalizationContext.class, false);
+        assert scc != null && scc.getException()!=null;
     }
 
     @Test public void testNoSubjectSourcedAttributes() throws ComponentInitializationException {
@@ -82,12 +83,13 @@ public class AttributeSourcedSubjectCanonicalizationTest extends BaseAuthenticat
         action.initialize();
         
         Subject subject = new Subject();
-        prc.getSubcontext(SubjectCanonicalizationContext.class, true).setSubject(subject);
+        prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class).setSubject(subject);
         
         final Event event = action.execute(src);
         
         ActionTestingSupport.assertEvent(event, AuthnEventIds.INVALID_SUBJECT);
-        Assert.assertNotNull(prc.getSubcontext(SubjectCanonicalizationContext.class, false).getException());
+        SubjectCanonicalizationContext scc = prc.getSubcontext(SubjectCanonicalizationContext.class, false);
+        assert scc != null && scc.getException()!=null;
     }
 
     @Test public void testSuccess() throws ComponentInitializationException {
@@ -96,10 +98,10 @@ public class AttributeSourcedSubjectCanonicalizationTest extends BaseAuthenticat
         final IdPAttribute inputAttribute = new IdPAttribute("attr2");
         inputAttribute.setValues(Collections.singletonList(new StringAttributeValue("foo")));
         
-        final SubjectCanonicalizationContext sc = prc.getSubcontext(SubjectCanonicalizationContext.class, true);
+        final SubjectCanonicalizationContext sc = prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class);
         sc.setSubject(new Subject());
         
-        sc.getSubcontext(AttributeContext.class, true).setIdPAttributes(Collections.singleton(inputAttribute));
+        sc.getOrCreateSubcontext(AttributeContext.class).setIdPAttributes(Collections.singleton(inputAttribute));
         
         final Event event = action.execute(src);
         
@@ -113,9 +115,10 @@ public class AttributeSourcedSubjectCanonicalizationTest extends BaseAuthenticat
         
         final IdPAttribute inputAttribute = new IdPAttribute("attr2");
         inputAttribute.setValues(Collections.singletonList(new StringAttributeValue("foo")));
-        final SubjectCanonicalizationContext sc = prc.getSubcontext(SubjectCanonicalizationContext.class, true);
-        sc.setSubject(new Subject());
-        sc.getSubject().getPrincipals().add(new IdPAttributePrincipal(inputAttribute));
+        final SubjectCanonicalizationContext sc = prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class);
+        final Subject subject = new Subject();
+        sc.setSubject(subject);
+        subject.getPrincipals().add(new IdPAttributePrincipal(inputAttribute));
 
         final Event event = action.execute(src);
         
@@ -129,9 +132,10 @@ public class AttributeSourcedSubjectCanonicalizationTest extends BaseAuthenticat
         
         final IdPAttribute inputAttribute = new IdPAttribute("attr2");
         inputAttribute.setValues(Collections.singletonList(new ScopedStringAttributeValue("foo", "scope")));
-        final SubjectCanonicalizationContext sc = prc.getSubcontext(SubjectCanonicalizationContext.class, true);
-        sc.setSubject(new Subject());
-        sc.getSubject().getPrincipals().add(new IdPAttributePrincipal(inputAttribute));
+        final SubjectCanonicalizationContext sc = prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class);
+        final Subject subject = new Subject();
+        sc.setSubject(subject);
+        subject.getPrincipals().add(new IdPAttributePrincipal(inputAttribute));
 
         final Event event = action.execute(src);
         
@@ -149,20 +153,21 @@ public class AttributeSourcedSubjectCanonicalizationTest extends BaseAuthenticat
         final IdPAttribute attr2bar = new IdPAttribute("attr2");
         attr2bar.setValues(Collections.singletonList(new StringAttributeValue("bar")));
 
-        final SubjectCanonicalizationContext sc = prc.getSubcontext(SubjectCanonicalizationContext.class, true);
-        sc.setSubject(new Subject());
-        sc.getSubject().getPrincipals().add(new IdPAttributePrincipal(attr2));
+        final SubjectCanonicalizationContext sc = prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class);
+        final Subject subject = new Subject();
+        sc.setSubject(subject);
+        subject.getPrincipals().add(new IdPAttributePrincipal(attr2));
         
-        sc.getSubcontext(AttributeContext.class, true).setIdPAttributes(Collections.singleton(attr2bar));
+        sc.getOrCreateSubcontext(AttributeContext.class).setIdPAttributes(Collections.singleton(attr2bar));
         
         Event event = action.execute(src);
         
         ActionTestingSupport.assertProceedEvent(event);
         Assert.assertEquals(sc.getPrincipalName(), "foo");
 
-        sc.getSubject().getPrincipals().clear();
-        sc.getSubject().getPrincipals().add(new IdPAttributePrincipal(attr2bar));
-        sc.getSubcontext(AttributeContext.class, true).setIdPAttributes(Collections.singleton(attr2));
+        subject.getPrincipals().clear();
+        subject.getPrincipals().add(new IdPAttributePrincipal(attr2bar));
+        sc.getOrCreateSubcontext(AttributeContext.class).setIdPAttributes(Collections.singleton(attr2));
 
         event = action.execute(src);
         
@@ -180,11 +185,12 @@ public class AttributeSourcedSubjectCanonicalizationTest extends BaseAuthenticat
         final IdPAttribute attr1 = new IdPAttribute("attr1");
         attr1.setValues(Collections.singletonList(new StringAttributeValue("foo")));
 
-        final SubjectCanonicalizationContext sc = prc.getSubcontext(SubjectCanonicalizationContext.class, true);
-        sc.setSubject(new Subject());
-        sc.getSubject().getPrincipals().add(new IdPAttributePrincipal(attr2));
+        final SubjectCanonicalizationContext sc = prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class);
+        final Subject subject = new Subject();
+        sc.setSubject(subject);
+        subject.getPrincipals().add(new IdPAttributePrincipal(attr2));
         
-        sc.getSubcontext(AttributeContext.class, true).setIdPAttributes(Collections.singleton(attr1));
+        sc.getOrCreateSubcontext(AttributeContext.class).setIdPAttributes(Collections.singleton(attr1));
         
         final Event event = action.execute(src);
         
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/DefaultAuthenticationResultSerializerTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/DefaultAuthenticationResultSerializerTest.java
index 08c700c16..473e66f66 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/DefaultAuthenticationResultSerializerTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/DefaultAuthenticationResultSerializerTest.java
@@ -17,18 +17,30 @@
 
 package net.shibboleth.idp.authn.impl;
 
-import static org.testng.Assert.*;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.fail;
 
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.net.URISyntaxException;
 import java.time.Instant;
-import java.util.Collections;
 import java.util.List;
 
+import javax.annotation.Nonnull;
 import javax.security.auth.Subject;
 
+import org.ldaptive.LdapAttribute;
+import org.ldaptive.LdapEntry;
+import org.ldaptive.jaas.LdapPrincipal;
+import org.opensaml.profile.context.ProfileRequestContext;
+import org.opensaml.profile.testing.RequestContextBuilder;
+import org.opensaml.security.x509.X509Support;
+import org.springframework.core.io.ClassPathResource;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
 import net.shibboleth.idp.attribute.ByteAttributeValue;
 import net.shibboleth.idp.attribute.EmptyAttributeValue;
 import net.shibboleth.idp.attribute.IdPAttribute;
@@ -51,23 +63,13 @@ import net.shibboleth.idp.authn.principal.impl.IdPAttributePrincipalSerializer;
 import net.shibboleth.idp.authn.principal.impl.LDAPPrincipalSerializer;
 import net.shibboleth.idp.authn.principal.impl.ProxyAuthenticationPrincipalSerializer;
 import net.shibboleth.idp.authn.testing.TestPrincipal;
+import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.component.ComponentInitializationException;
+import net.shibboleth.shared.logic.PredicateSupport;
 import net.shibboleth.shared.security.DataSealer;
 import net.shibboleth.shared.security.impl.BasicKeystoreKeyStrategy;
 import net.shibboleth.shared.spring.resource.ResourceHelper;
 
-import org.ldaptive.LdapAttribute;
-import org.ldaptive.LdapEntry;
-import org.ldaptive.jaas.LdapPrincipal;
-import org.opensaml.profile.context.ProfileRequestContext;
-import org.opensaml.profile.testing.RequestContextBuilder;
-import org.opensaml.security.x509.X509Support;
-import org.springframework.core.io.ClassPathResource;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import com.google.common.base.Predicates;
-
 /** {@link DefaultAuthenticationResultSerializer} unit test. */
 public class DefaultAuthenticationResultSerializerTest {
 
@@ -172,11 +174,13 @@ public class DefaultAuthenticationResultSerializerTest {
         
         final GenericPrincipalSerializer generic = new GenericPrincipalSerializer();
         generic.initialize();
+        assert manager!= null;
         serializer = new DefaultAuthenticationResultSerializer(manager, generic);
         flowDescriptor = new AuthenticationFlowDescriptor();
         flowDescriptor.setId("test");
+        assert serializer != null;
         flowDescriptor.setResultSerializer(serializer);
-        flowDescriptor.setReuseCondition(Predicates.alwaysTrue());
+        flowDescriptor.setReuseCondition(PredicateSupport.alwaysTrue());
     }
 
     @Test public void testInvalid() throws Exception {
@@ -219,7 +223,7 @@ public class DefaultAuthenticationResultSerializerTest {
         result.getAdditionalData().put("frobnitz", "zorkmid");
         result.getSubject().getPrincipals().add(new UsernamePrincipal("bob"));
         
-        final ProfileRequestContext prc = getProfileRequestContext(Collections.singletonList(flowDescriptor));
+        final ProfileRequestContext prc = getProfileRequestContext(CollectionSupport.singletonList(flowDescriptor));
         assertTrue(result.getReuseCondition().test(prc));
         
         flowDescriptor.serialize(result);
@@ -253,7 +257,7 @@ public class DefaultAuthenticationResultSerializerTest {
         final String s2 = fileToString(DATAPATH + "complexAuthenticationResult.json");
         assertEquals(s, s2);
 
-        final ProfileRequestContext prc = getProfileRequestContext(Collections.singletonList(flowDescriptor));
+        final ProfileRequestContext prc = getProfileRequestContext(CollectionSupport.singletonList(flowDescriptor));
         assertTrue(result.getReuseCondition().test(prc));
 
         final AuthenticationResult result2 = flowDescriptor.deserialize(1, CONTEXT, KEY, s2,
@@ -279,7 +283,7 @@ public class DefaultAuthenticationResultSerializerTest {
         result.getSubject().getPublicCredentials().add(X509Support.decodeCertificate(entityCertBase64));
         result.getSubject().getPrivateCredentials().add(new PasswordPrincipal("bar"));
 
-        final ProfileRequestContext prc = getProfileRequestContext(Collections.singletonList(flowDescriptor));
+        final ProfileRequestContext prc = getProfileRequestContext(CollectionSupport.singletonList(flowDescriptor));
         assertTrue(result.getReuseCondition().test(prc));
 
         final String s = flowDescriptor.serialize(result);
@@ -299,7 +303,7 @@ public class DefaultAuthenticationResultSerializerTest {
 
     @Test public void testSymbolic() throws Exception {
         final GenericPrincipalSerializer generic = new GenericPrincipalSerializer();
-        generic.setSymbolics(Collections.singletonMap(TestPrincipal.class.getName(), 1));
+        generic.setSymbolics(CollectionSupport.singletonMap(TestPrincipal.class.getName(), 1));
         generic.initialize();
         serializer = new DefaultAuthenticationResultSerializer(manager, generic);
         serializer.initialize();
@@ -311,7 +315,7 @@ public class DefaultAuthenticationResultSerializerTest {
         result.getSubject().getPrincipals().add(new TestPrincipal("foo"));
         result.getSubject().getPrincipals().add(new TestPrincipal("bar"));
         
-        final ProfileRequestContext prc = getProfileRequestContext(Collections.singletonList(flowDescriptor));
+        final ProfileRequestContext prc = getProfileRequestContext(CollectionSupport.singletonList(flowDescriptor));
         assertTrue(result.getReuseCondition().test(prc));
 
         final String s = flowDescriptor.serialize(result);
@@ -350,7 +354,7 @@ public class DefaultAuthenticationResultSerializerTest {
                 new LdapAttribute("mail", "bob at shibboleth.net"));
         result.getSubject().getPrincipals().add(new LdapPrincipal("bob", LdapEntry.sort(entry)));
 
-        final ProfileRequestContext prc = getProfileRequestContext(Collections.singletonList(flowDescriptor));
+        final ProfileRequestContext prc = getProfileRequestContext(CollectionSupport.singletonList(flowDescriptor));
         assertTrue(result.getReuseCondition().test(prc));
 
         final String s = flowDescriptor.serialize(result);
@@ -385,7 +389,7 @@ public class DefaultAuthenticationResultSerializerTest {
         
         result.getSubject().getPrincipals().add(prin);
 
-        final ProfileRequestContext prc = getProfileRequestContext(Collections.singletonList(flowDescriptor));
+        final ProfileRequestContext prc = getProfileRequestContext(CollectionSupport.singletonList(flowDescriptor));
         assertTrue(result.getReuseCondition().test(prc));
         
         final String s = flowDescriptor.serialize(result);
@@ -419,12 +423,12 @@ public class DefaultAuthenticationResultSerializerTest {
         flowDescriptor.initialize();
         
         final AuthenticationResult result = createResult(flowDescriptor, new Subject());
-        final ProxyAuthenticationPrincipal prin = new ProxyAuthenticationPrincipal(List.of("foo","bar","baz"));
+        final ProxyAuthenticationPrincipal prin = new ProxyAuthenticationPrincipal(CollectionSupport.listOf("foo","bar","baz"));
         prin.setProxyCount(10);
         prin.getAudiences().add("zorkmid");
         result.getSubject().getPrincipals().add(prin);
 
-        final ProfileRequestContext prc = getProfileRequestContext(Collections.singletonList(flowDescriptor));
+        final ProfileRequestContext prc = getProfileRequestContext(CollectionSupport.singletonList(flowDescriptor));
         assertTrue(result.getReuseCondition().test(prc));
 
         final String s = flowDescriptor.serialize(result);
@@ -459,6 +463,7 @@ public class DefaultAuthenticationResultSerializerTest {
         
         final AuthenticationFlowDescriptor nestedDescriptor = new AuthenticationFlowDescriptor();
         nestedDescriptor.setId("nested");
+        assert serializer != null;
         nestedDescriptor.setResultSerializer(serializer);
         nestedDescriptor.initialize();
         
@@ -468,7 +473,8 @@ public class DefaultAuthenticationResultSerializerTest {
         
         result.getSubject().getPrincipals().add(new AuthenticationResultPrincipal(nested));
 
-        final ProfileRequestContext prc = getProfileRequestContext(List.of(flowDescriptor, nestedDescriptor));
+        assert flowDescriptor != null;
+        final ProfileRequestContext prc = getProfileRequestContext(CollectionSupport.listOf(flowDescriptor, nestedDescriptor));
         assertTrue(result.getReuseCondition().test(prc));
 
         final String s = flowDescriptor.serialize(result);
@@ -496,23 +502,23 @@ public class DefaultAuthenticationResultSerializerTest {
         assertTrue(nested2.getReuseCondition().test(prc));
     }
 
-    private AuthenticationResult createResult(AuthenticationFlowDescriptor flow, Subject subject) {
+    @Nonnull private AuthenticationResult createResult(@Nonnull AuthenticationFlowDescriptor flow, @Nonnull Subject subject) {
         final AuthenticationResult result = flow.newAuthenticationResult(subject);
         result.setAuthenticationInstant(INSTANT);
         result.setLastActivityInstant(Instant.ofEpochMilli(ACTIVITY));
         return result;
     }
     
-    private ProfileRequestContext getProfileRequestContext(final List<AuthenticationFlowDescriptor> flows) {
+    @Nonnull private ProfileRequestContext getProfileRequestContext(@Nonnull final List<AuthenticationFlowDescriptor> flows) {
         final ProfileRequestContext prc = new RequestContextBuilder().buildProfileRequestContext();
-        final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class, true);
+        final AuthenticationContext ac = prc.getOrCreateSubcontext(AuthenticationContext.class);
         for (final AuthenticationFlowDescriptor flow : flows) {
             ac.getAvailableFlows().put(flow.getId(), flow);
         }
         return prc;
     }
     
-    private String fileToString(String pathname) throws URISyntaxException, IOException {
+    @Nonnull private String fileToString(String pathname) throws URISyntaxException, IOException {
         try (final FileInputStream stream = new FileInputStream(
                 new File(DefaultAuthenticationResultSerializerTest.class.getResource(pathname).toURI()))) {
             int avail = stream.available();
@@ -531,7 +537,9 @@ public class DefaultAuthenticationResultSerializerTest {
               }
               avail = stream.available();
             } while (avail > 0 && numRead >= 0);
-            return new String(data, 0, pos, "UTF-8").trim();
+            final String str = new String(data, 0, pos, "UTF-8").trim();
+            assert str != null;
+            return str;
         }
     }
 }
\ No newline at end of file
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ExtractRemoteUserTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ExtractRemoteUserTest.java
index 10e9e59ad..94e27efbb 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ExtractRemoteUserTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ExtractRemoteUserTest.java
@@ -74,32 +74,34 @@ public class ExtractRemoteUserTest extends BaseAuthenticationContextTest {
     }
 
     @Test public void testRemoteUser() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).setRemoteUser("foo");
+        getMockHttpServletRequest(action).setRemoteUser("foo");
         action.initialize();
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
         AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class, false);
-        UsernameContext unCtx = authCtx.getSubcontext(UsernameContext.class, false);
-        Assert.assertNotNull(unCtx, "No UsernameContext attached");
+        assert authCtx != null;
+        final UsernameContext unCtx = authCtx.getSubcontext(UsernameContext.class, false);
+        assert unCtx != null;
         Assert.assertEquals(unCtx.getUsername(), "foo");
     }
 
     @Test public void testAttribute() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).setAttribute("Username", "foo");
+        getMockHttpServletRequest(action).setAttribute("Username", "foo");
         action.setCheckAttributes(Arrays.asList("Username"));
         action.initialize();
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
         AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class, false);
-        UsernameContext unCtx = authCtx.getSubcontext(UsernameContext.class, false);
-        Assert.assertNotNull(unCtx, "No UsernameContext attached");
+        assert authCtx != null;
+        final UsernameContext unCtx = authCtx.getSubcontext(UsernameContext.class, false);
+        assert unCtx != null;
         Assert.assertEquals(unCtx.getUsername(), "foo");
     }
 
     @Test public void testHeader() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addHeader("X-Username", "foo");
+        getMockHttpServletRequest(action).addHeader("X-Username", "foo");
         action.setCheckAttributes(Arrays.asList("Username"));
         action.setCheckHeaders(Arrays.asList("X-Username"));
         action.initialize();
@@ -107,13 +109,14 @@ public class ExtractRemoteUserTest extends BaseAuthenticationContextTest {
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
         AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class, false);
+        assert authCtx != null;
         UsernameContext unCtx = authCtx.getSubcontext(UsernameContext.class, false);
-        Assert.assertNotNull(unCtx, "No UsernameContext attached");
+        assert unCtx != null;
         Assert.assertEquals(unCtx.getUsername(), "foo");
     }
 
     @Test public void testTransforms() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).setRemoteUser(" Foo at osu.edu ");
+        getMockHttpServletRequest(action).setRemoteUser(" Foo at osu.edu ");
         action.setTrim(true);
         action.setTransforms(Arrays.asList(new Pair<>("^(.+)@osu\\.edu$", "$1")));
         action.setLowercase(true);
@@ -122,8 +125,9 @@ public class ExtractRemoteUserTest extends BaseAuthenticationContextTest {
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
         AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class, false);
-        UsernameContext unCtx = authCtx.getSubcontext(UsernameContext.class, false);
-        Assert.assertNotNull(unCtx, "No UsernameContext attached");
+        assert authCtx != null;
+        final UsernameContext unCtx = authCtx.getSubcontext(UsernameContext.class, false);
+        assert unCtx != null;
         Assert.assertEquals(unCtx.getUsername(), "foo");
     }
 }
\ No newline at end of file
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ExtractUserAgentAddressTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ExtractUserAgentAddressTest.java
index e3270f079..e990d9c02 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ExtractUserAgentAddressTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ExtractUserAgentAddressTest.java
@@ -18,6 +18,8 @@
 package net.shibboleth.idp.authn.impl;
 
 
+import java.net.InetAddress;
+
 import org.springframework.mock.web.MockHttpServletRequest;
 import org.springframework.webflow.execution.Event;
 import org.testng.Assert;
@@ -35,7 +37,9 @@ import net.shibboleth.shared.testing.ConstantSupplier;
 /** {@link ExtractUserAgentAddress} unit test. */
 public class ExtractUserAgentAddressTest extends BaseAuthenticationContextTest {
     
-    private ExtractUserAgentAddress action; 
+    private ExtractUserAgentAddress action;
+    
+    public Object nullObj;
     
     @BeforeMethod public void setUp() throws ComponentInitializationException {
         super.setUp();
@@ -46,8 +50,9 @@ public class ExtractUserAgentAddressTest extends BaseAuthenticationContextTest {
         action.initialize();
     }
     
+    @SuppressWarnings("null")
     @Test public void testMissingAddress() {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).setRemoteAddr(null);
+        getMockHttpServletRequest(action).setRemoteAddr((String) nullObj);
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertEvent(event, AuthnEventIds.NO_CREDENTIALS);
@@ -57,13 +62,16 @@ public class ExtractUserAgentAddressTest extends BaseAuthenticationContextTest {
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
         AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class, false);
+        assert authCtx!=null;
         UserAgentContext uaCtx = authCtx.getSubcontext(UserAgentContext.class, false);
-        Assert.assertNotNull(uaCtx, "No UserAgentContext attached");
-        Assert.assertEquals(uaCtx.getAddress().getHostAddress(), MockHttpServletRequest.DEFAULT_REMOTE_ADDR);
+        assert uaCtx!=null;
+        InetAddress addr = uaCtx.getAddress();
+        assert addr !=null;
+        Assert.assertEquals(addr.getHostAddress(), MockHttpServletRequest.DEFAULT_REMOTE_ADDR);
     }
 
     @Test public void testInvalidAddress() {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).setRemoteAddr("zorkmids");
+        getMockHttpServletRequest(action).setRemoteAddr("zorkmids");
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertEvent(event, AuthnEventIds.NO_CREDENTIALS);
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ExtractUserAgentIdentifierTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ExtractUserAgentIdentifierTest.java
index 63a4fa563..e978e1605 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ExtractUserAgentIdentifierTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ExtractUserAgentIdentifierTest.java
@@ -61,13 +61,14 @@ public class ExtractUserAgentIdentifierTest extends BaseAuthenticationContextTes
     }
 
     @Test public void testValidHeader() {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addHeader("User-Agent", "foo bar baz");
+        getMockHttpServletRequest(action).addHeader("User-Agent", "foo bar baz");
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
         AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class, false);
+        assert authCtx != null;
         UserAgentContext uaCtx = authCtx.getSubcontext(UserAgentContext.class, false);
-        Assert.assertNotNull(uaCtx, "No UserAgentContext attached");
+        assert uaCtx != null;
         Assert.assertEquals(uaCtx.getIdentifier(), "foo bar baz");
     }
 }
\ No newline at end of file
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ExtractUsernamePasswordFromBasicAuthTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ExtractUsernamePasswordFromBasicAuthTest.java
index 9945295f8..7fdba5403 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ExtractUsernamePasswordFromBasicAuthTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ExtractUsernamePasswordFromBasicAuthTest.java
@@ -63,21 +63,21 @@ public class ExtractUsernamePasswordFromBasicAuthTest extends BaseAuthentication
     }
 
     @Test public void testMissingIdentity2() {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addHeader(HttpHeaders.AUTHORIZATION, "foo");
+        getMockHttpServletRequest(action).addHeader(HttpHeaders.AUTHORIZATION, "foo");
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertEvent(event, AuthnEventIds.NO_CREDENTIALS);
     }
 
     @Test public void testInvalid() {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addHeader(HttpHeaders.AUTHORIZATION, "Basic foo:bar");
+        getMockHttpServletRequest(action).addHeader(HttpHeaders.AUTHORIZATION, "Basic foo:bar");
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertEvent(event, AuthnEventIds.INVALID_CREDENTIALS);
     }
 
     @Test public void testInvalid2() {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addHeader(HttpHeaders.AUTHORIZATION, "Basic Zm9vOg==");
+        getMockHttpServletRequest(action).addHeader(HttpHeaders.AUTHORIZATION, "Basic Zm9vOg==");
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertEvent(event, AuthnEventIds.INVALID_CREDENTIALS);
@@ -85,31 +85,33 @@ public class ExtractUsernamePasswordFromBasicAuthTest extends BaseAuthentication
     
     /* Test invalid base64 trailing bits. */
     @Test public void testInvalidBase64() {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addHeader(HttpHeaders.AUTHORIZATION, "Basic AB==");
+        getMockHttpServletRequest(action).addHeader(HttpHeaders.AUTHORIZATION, "Basic AB==");
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertEvent(event, AuthnEventIds.INVALID_CREDENTIALS);
     }
     
     @Test public void testValid() {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addHeader(HttpHeaders.AUTHORIZATION, "Basic Zm9vOmJhcg==");
+        getMockHttpServletRequest(action).addHeader(HttpHeaders.AUTHORIZATION, "Basic Zm9vOmJhcg==");
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
         AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class, false);
-        UsernamePasswordContext upCtx = authCtx.getSubcontext(UsernamePasswordContext.class, false);
-        Assert.assertNotNull(upCtx, "No UsernamePasswordContext attached");
+        assert authCtx != null;
+        final UsernamePasswordContext upCtx = authCtx.getSubcontext(UsernamePasswordContext.class, false);
+        assert upCtx != null;
         Assert.assertEquals(upCtx.getUsername(), "foo");
         Assert.assertEquals(upCtx.getPassword(), "bar");
     }
 
     @Test public void idp1968() {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addHeader(HttpHeaders.AUTHORIZATION, "Basic Zm9vOuKYr++4j2Jhcg==");
+        getMockHttpServletRequest(action).addHeader(HttpHeaders.AUTHORIZATION, "Basic Zm9vOuKYr++4j2Jhcg==");
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
         AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class, false);
-        UsernamePasswordContext upCtx = authCtx.getSubcontext(UsernamePasswordContext.class, false);
-        Assert.assertNotNull(upCtx, "No UsernamePasswordContext attached");
+        assert authCtx != null;
+        final UsernamePasswordContext upCtx = authCtx.getSubcontext(UsernamePasswordContext.class, false);
+        assert upCtx != null;
         Assert.assertEquals(upCtx.getUsername(), "foo");
         Assert.assertEquals(upCtx.getPassword(), "☯️bar");
     }
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ExtractUsernamePasswordFromFormRequestTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ExtractUsernamePasswordFromFormRequestTest.java
index 7439033cb..935b95fb2 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ExtractUsernamePasswordFromFormRequestTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ExtractUsernamePasswordFromFormRequestTest.java
@@ -64,37 +64,39 @@ public class ExtractUsernamePasswordFromFormRequestTest extends BaseAuthenticati
     }
 
     @Test public void testMissingIdentity2() {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("j_username", "foo");
+        getMockHttpServletRequest(action).addParameter("j_username", "foo");
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertEvent(event, AuthnEventIds.NO_CREDENTIALS);
     }
 
     @Test public void testValid() {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("j_username", "foo");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("j_password", "bar");
+        getMockHttpServletRequest(action).addParameter("j_username", "foo");
+        getMockHttpServletRequest(action).addParameter("j_password", "bar");
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
         AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class, false);
+        assert authCtx != null;
         Assert.assertTrue(authCtx.isResultCacheable());
         UsernamePasswordContext upCtx = authCtx.getSubcontext(UsernamePasswordContext.class, false);
-        Assert.assertNotNull(upCtx, "No UsernamePasswordContext attached");
+        assert upCtx!= null;
         Assert.assertEquals(upCtx.getUsername(), "foo");
         Assert.assertEquals(upCtx.getPassword(), "bar");
     }
 
     @Test public void testSSOBypass() {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("j_username", "foo");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("j_password", "bar");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("donotcache", "1");
+        getMockHttpServletRequest(action).addParameter("j_username", "foo");
+        getMockHttpServletRequest(action).addParameter("j_password", "bar");
+        getMockHttpServletRequest(action).addParameter("donotcache", "1");
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
         AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class, false);
+        assert authCtx != null;
         Assert.assertFalse(authCtx.isResultCacheable());
         UsernamePasswordContext upCtx = authCtx.getSubcontext(UsernamePasswordContext.class, false);
-        Assert.assertNotNull(upCtx, "No UsernamePasswordContext attached");
+        assert upCtx != null;
         Assert.assertEquals(upCtx.getUsername(), "foo");
         Assert.assertEquals(upCtx.getPassword(), "bar");
     }
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ExtractX509CertificateFromRequestTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ExtractX509CertificateFromRequestTest.java
index 3c1792933..10b09b88b 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ExtractX509CertificateFromRequestTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ExtractX509CertificateFromRequestTest.java
@@ -115,13 +115,14 @@ public class ExtractX509CertificateFromRequestTest extends BaseAuthenticationCon
         
         final X509Certificate[] certs = new X509Certificate[]{entityCert, otherCert1};
         
-        ((MockHttpServletRequest) action.getHttpServletRequest()).setAttribute("jakarta.servlet.request.X509Certificate", certs);
+        getMockHttpServletRequest(action).setAttribute("jakarta.servlet.request.X509Certificate", certs);
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
+        assert authCtx != null;
         final CertificateContext certCtx = authCtx.getSubcontext(CertificateContext.class);
-        Assert.assertNotNull(certCtx, "No CertificateContext attached");
+        assert certCtx!= null;
         
         Assert.assertSame(certCtx.getCertificate(), entityCert);
         Assert.assertSame(certCtx.getIntermediates().iterator().next(), otherCert1);
@@ -134,13 +135,14 @@ public class ExtractX509CertificateFromRequestTest extends BaseAuthenticationCon
         
         final X509Certificate[] certs = new X509Certificate[]{entityCert, otherCert1};
         
-        ((MockHttpServletRequest) action.getHttpServletRequest()).setAttribute("jakarta.servlet.request.X509Certificate", certs);
+        getMockHttpServletRequest(action).setAttribute("jakarta.servlet.request.X509Certificate", certs);
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
+        assert authCtx != null;
         final CertificateContext certCtx = authCtx.getSubcontext(CertificateContext.class);
-        Assert.assertNotNull(certCtx, "No CertificateContext attached");
+        assert certCtx!= null;
         
         Assert.assertSame(certCtx.getCertificate(), entityCert);
         Assert.assertSame(certCtx.getIntermediates().iterator().next(), otherCert1);
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/FilterFlowsByForceAuthnTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/FilterFlowsByForceAuthnTest.java
index 8da09f33e..70bea6b9d 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/FilterFlowsByForceAuthnTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/FilterFlowsByForceAuthnTest.java
@@ -44,6 +44,7 @@ public class FilterFlowsByForceAuthnTest extends BaseAuthenticationContextTest {
     
     @Test public void testNonForced() {
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
+        assert authCtx != null;
         authCtx.setForceAuthn(false);
         
         final Event event = action.execute(src);
@@ -53,6 +54,7 @@ public class FilterFlowsByForceAuthnTest extends BaseAuthenticationContextTest {
 
     @Test public void testNoFiltering() {
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
+        assert authCtx != null;
         authCtx.setForceAuthn(true);
         for (final AuthenticationFlowDescriptor fd : authCtx.getPotentialFlows().values()) {
             fd.setForcedAuthenticationSupported(true);
@@ -65,6 +67,7 @@ public class FilterFlowsByForceAuthnTest extends BaseAuthenticationContextTest {
 
     @Test public void testPartialFiltering() {
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
+        assert authCtx != null;
         authCtx.setMaxAge(Duration.ofHours(1));
         authCtx.getPotentialFlows().get("test2").setForcedAuthenticationSupported(true);
         
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/FilterFlowsByNonBrowserSupportTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/FilterFlowsByNonBrowserSupportTest.java
index bccfdaf22..3d129868f 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/FilterFlowsByNonBrowserSupportTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/FilterFlowsByNonBrowserSupportTest.java
@@ -41,6 +41,7 @@ public class FilterFlowsByNonBrowserSupportTest extends BaseAuthenticationContex
     
     @Test public void testBrowserProfile() {
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
+        assert authCtx != null;
         prc.setBrowserProfile(true);
         
         final Event event = action.execute(src);
@@ -50,6 +51,7 @@ public class FilterFlowsByNonBrowserSupportTest extends BaseAuthenticationContex
 
     @Test public void testNoFiltering() {
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
+        assert authCtx != null;
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
@@ -58,6 +60,7 @@ public class FilterFlowsByNonBrowserSupportTest extends BaseAuthenticationContex
 
     @Test public void testPartialFiltering() {
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
+        assert authCtx != null;
         authCtx.getPotentialFlows().get("test1").setNonBrowserSupported(false);
         
         final Event event = action.execute(src);
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/FinalizeMultiFactorAuthenticationTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/FinalizeMultiFactorAuthenticationTest.java
index bc19518bc..6abde37a0 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/FinalizeMultiFactorAuthenticationTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/FinalizeMultiFactorAuthenticationTest.java
@@ -57,6 +57,7 @@ public class FinalizeMultiFactorAuthenticationTest extends BaseMultiFactorAuthen
      * @throws ComponentInitializationException ...
      */
     @Test public void testNoContext() throws ComponentInitializationException {
+        assert mfa != null;
         ac.removeSubcontext(mfa);
         action.initialize();
         final Event event = action.execute(src);
@@ -86,7 +87,7 @@ public class FinalizeMultiFactorAuthenticationTest extends BaseMultiFactorAuthen
         ActionTestingSupport.assertProceedEvent(event);
         
         final AuthenticationResult result = ac.getAuthenticationResult();
-        Assert.assertNotNull(result);
+        assert result!=null;
         Assert.assertEquals(result.getAuthenticationFlowId(), "authn/MFA");
         final Subject merged = result.getSubject();
         Assert.assertEquals(merged.getPrincipals().size(), 3);
@@ -96,8 +97,9 @@ public class FinalizeMultiFactorAuthenticationTest extends BaseMultiFactorAuthen
         Assert.assertTrue(merged.getPrincipals(TestPrincipal.class).contains(new TestPrincipal("bar")));
         Assert.assertFalse(merged.getPrincipals(TestPrincipal.class).contains(new TestPrincipal("baz")));
         
-        Assert.assertNotNull(prc.getSubcontext(SubjectCanonicalizationContext.class));
-        Assert.assertSame(merged, prc.getSubcontext(SubjectCanonicalizationContext.class).getSubject());
+        final SubjectCanonicalizationContext scc = prc.getSubcontext(SubjectCanonicalizationContext.class);
+        assert scc != null;
+        Assert.assertSame(merged, scc.getSubject());
     }
 
     /**
@@ -116,7 +118,7 @@ public class FinalizeMultiFactorAuthenticationTest extends BaseMultiFactorAuthen
         ActionTestingSupport.assertProceedEvent(event);
 
         final AuthenticationResult result = ac.getAuthenticationResult();
-        Assert.assertNotNull(result);
+        assert result != null;
         Assert.assertEquals(result.getAuthenticationFlowId(), "authn/MFA");
         final Subject merged = result.getSubject();
         Assert.assertEquals(merged.getPrincipals().size(), 5);
@@ -127,7 +129,8 @@ public class FinalizeMultiFactorAuthenticationTest extends BaseMultiFactorAuthen
         Assert.assertTrue(merged.getPrincipals(TestPrincipal.class).contains(new TestPrincipal("bar")));
         Assert.assertFalse(merged.getPrincipals(TestPrincipal.class).contains(new TestPrincipal("baz")));
         
-        Assert.assertNotNull(prc.getSubcontext(SubjectCanonicalizationContext.class));
-        Assert.assertSame(merged, prc.getSubcontext(SubjectCanonicalizationContext.class).getSubject());
+        final SubjectCanonicalizationContext scc = prc.getSubcontext(SubjectCanonicalizationContext.class);
+        assert scc != null;
+        Assert.assertSame(merged, scc.getSubject());
     }
 }
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/HTPasswdCredentialValidatorTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/HTPasswdCredentialValidatorTest.java
index 5b9a6e31c..2ff8df1c2 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/HTPasswdCredentialValidatorTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/HTPasswdCredentialValidatorTest.java
@@ -34,6 +34,7 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
+import net.shibboleth.idp.authn.AuthenticationResult;
 import net.shibboleth.idp.authn.AuthnEventIds;
 import net.shibboleth.idp.authn.context.AuthenticationContext;
 import net.shibboleth.idp.authn.context.AuthenticationErrorContext;
@@ -84,7 +85,9 @@ public class HTPasswdCredentialValidatorTest extends BaseAuthenticationContextTe
     }
 
     @Test public void testMissingUser() throws ComponentInitializationException {
-        prc.getSubcontext(AuthenticationContext.class).setAttemptedFlow(authenticationFlows.get(0));
+        final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
+        ac.setAttemptedFlow(authenticationFlows.get(0));
         
         validator.initialize();
         action.initialize();
@@ -95,6 +98,7 @@ public class HTPasswdCredentialValidatorTest extends BaseAuthenticationContextTe
 
     @Test public void testMissingUser2() throws ComponentInitializationException {
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         ac.getSubcontext(UsernamePasswordContext.class, true);
         
@@ -106,13 +110,14 @@ public class HTPasswdCredentialValidatorTest extends BaseAuthenticationContextTe
     }
     
     @Test public void testUnsupported() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "foo");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "bar");
+        getMockHttpServletRequest(action).addParameter("username", "foo");
+        getMockHttpServletRequest(action).addParameter("password", "bar");
 
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         
-        final RequestedPrincipalContext rpc = ac.getSubcontext(RequestedPrincipalContext.class, true);
+        final RequestedPrincipalContext rpc = ac.getOrCreateSubcontext(RequestedPrincipalContext.class);
         rpc.getPrincipalEvalPredicateFactoryRegistry().register(
                 TestPrincipal.class, "exact", new ExactPrincipalEvalPredicateFactory());
         rpc.setOperator("exact");
@@ -130,10 +135,11 @@ public class HTPasswdCredentialValidatorTest extends BaseAuthenticationContextTe
     }
     
     @Test public void testUnmatchedUser() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "foo");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "bar");
+        getMockHttpServletRequest(action).addParameter("username", "foo");
+        getMockHttpServletRequest(action).addParameter("password", "bar");
 
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         ac.getSubcontext(UsernamePasswordContext.class, true);
         
@@ -149,10 +155,11 @@ public class HTPasswdCredentialValidatorTest extends BaseAuthenticationContextTe
     }
 
     @Test public void testBadUsername() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "foo");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "bar");
+        getMockHttpServletRequest(action).addParameter("username", "foo");
+        getMockHttpServletRequest(action).addParameter("password", "bar");
 
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         
         validator.initialize();
@@ -164,16 +171,18 @@ public class HTPasswdCredentialValidatorTest extends BaseAuthenticationContextTe
         final Event event = action.execute(src);
         ActionTestingSupport.assertEvent(event, AuthnEventIds.UNKNOWN_USERNAME);
         AuthenticationErrorContext errorCtx = ac.getSubcontext(AuthenticationErrorContext.class);
+        assert errorCtx!= null;
         Assert.assertTrue(errorCtx.getExceptions().get(0) instanceof LoginException);
         Assert.assertTrue(errorCtx.isClassifiedError(AuthnEventIds.UNKNOWN_USERNAME));
         Assert.assertFalse(errorCtx.isClassifiedError("InvalidPassword"));
     }
 
     @Test public void testBadPassword() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "PETER_THE_PRINCIPAL");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "bar");
+        getMockHttpServletRequest(action).addParameter("username", "PETER_THE_PRINCIPAL");
+        getMockHttpServletRequest(action).addParameter("password", "bar");
 
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         
         validator.initialize();
@@ -185,16 +194,18 @@ public class HTPasswdCredentialValidatorTest extends BaseAuthenticationContextTe
         final Event event = action.execute(src);
         ActionTestingSupport.assertEvent(event, "InvalidPassword");
         AuthenticationErrorContext errorCtx = ac.getSubcontext(AuthenticationErrorContext.class);
+        assert errorCtx != null;
         Assert.assertTrue(errorCtx.getExceptions().get(0) instanceof LoginException);
         Assert.assertFalse(errorCtx.isClassifiedError("UnknownUsername"));
         Assert.assertTrue(errorCtx.isClassifiedError("InvalidPassword"));
     }
 
     @Test public void testAuthorizedMD5() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "PETER_THE_PRINCIPAL");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "changeit");
+        getMockHttpServletRequest(action).addParameter("username", "PETER_THE_PRINCIPAL");
+        getMockHttpServletRequest(action).addParameter("password", "changeit");
 
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
 
         validator.initialize();
@@ -206,16 +217,18 @@ public class HTPasswdCredentialValidatorTest extends BaseAuthenticationContextTe
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
         
-        Assert.assertNotNull(ac.getAuthenticationResult());
-        Assert.assertEquals(ac.getAuthenticationResult().getSubject().getPrincipals(UsernamePrincipal.class).iterator()
+        final AuthenticationResult result = ac.getAuthenticationResult();
+        assert result != null;
+        Assert.assertEquals(result.getSubject().getPrincipals(UsernamePrincipal.class).iterator()
                 .next().getName(), "PETER_THE_PRINCIPAL");
     }
 
     @Test public void testAuthorizedMD5WithFile() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "PETER_THE_PRINCIPAL");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "changeit");
+        getMockHttpServletRequest(action).addParameter("username", "PETER_THE_PRINCIPAL");
+        getMockHttpServletRequest(action).addParameter("password", "changeit");
 
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
 
         validator.setResource(new FileSystemResource(DATA_PATH + "htpasswd.txt"));
@@ -228,16 +241,18 @@ public class HTPasswdCredentialValidatorTest extends BaseAuthenticationContextTe
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
         
-        Assert.assertNotNull(ac.getAuthenticationResult());
-        Assert.assertEquals(ac.getAuthenticationResult().getSubject().getPrincipals(UsernamePrincipal.class).iterator()
+        final AuthenticationResult result = ac.getAuthenticationResult();
+        assert result != null;
+        Assert.assertEquals(result.getSubject().getPrincipals(UsernamePrincipal.class).iterator()
                 .next().getName(), "PETER_THE_PRINCIPAL");
     }
 
     @Test public void testAuthorizedSHA() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "PETER_THE_PRINCIPAL2");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "changeit");
+        getMockHttpServletRequest(action).addParameter("username", "PETER_THE_PRINCIPAL2");
+        getMockHttpServletRequest(action).addParameter("password", "changeit");
 
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
 
         validator.initialize();
@@ -249,16 +264,18 @@ public class HTPasswdCredentialValidatorTest extends BaseAuthenticationContextTe
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
         
-        Assert.assertNotNull(ac.getAuthenticationResult());
-        Assert.assertEquals(ac.getAuthenticationResult().getSubject().getPrincipals(UsernamePrincipal.class).iterator()
+        final AuthenticationResult result = ac.getAuthenticationResult();
+        assert result != null;
+        Assert.assertEquals(result.getSubject().getPrincipals(UsernamePrincipal.class).iterator()
                 .next().getName(), "PETER_THE_PRINCIPAL2");
     }
 
     @Test public void testAuthorizedCrypt() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "PETER_THE_PRINCIPAL3");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "changeit");
+        getMockHttpServletRequest(action).addParameter("username", "PETER_THE_PRINCIPAL3");
+        getMockHttpServletRequest(action).addParameter("password", "changeit");
 
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
 
         validator.initialize();
@@ -270,16 +287,18 @@ public class HTPasswdCredentialValidatorTest extends BaseAuthenticationContextTe
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
         
-        Assert.assertNotNull(ac.getAuthenticationResult());
-        Assert.assertEquals(ac.getAuthenticationResult().getSubject().getPrincipals(UsernamePrincipal.class).iterator()
+        final AuthenticationResult result = ac.getAuthenticationResult();
+        assert result != null;
+        Assert.assertEquals(result.getSubject().getPrincipals(UsernamePrincipal.class).iterator()
                 .next().getName(), "PETER_THE_PRINCIPAL3");
     }
     
     @Test public void testAuthorizedAndKeep() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "PETER_THE_PRINCIPAL");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "changeit");
+        getMockHttpServletRequest(action).addParameter("username", "PETER_THE_PRINCIPAL");
+        getMockHttpServletRequest(action).addParameter("password", "changeit");
 
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
 
         validator.initialize();
@@ -291,19 +310,21 @@ public class HTPasswdCredentialValidatorTest extends BaseAuthenticationContextTe
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
         
-        Assert.assertNotNull(ac.getAuthenticationResult());
-        Assert.assertEquals(ac.getAuthenticationResult().getSubject().getPrincipals(UsernamePrincipal.class).iterator()
+        final AuthenticationResult result = ac.getAuthenticationResult();
+        assert result != null;
+        Assert.assertEquals(result.getSubject().getPrincipals(UsernamePrincipal.class).iterator()
                 .next().getName(), "PETER_THE_PRINCIPAL");
     }
 
     @Test public void testSupported() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "PETER_THE_PRINCIPAL");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "changeit");
+        getMockHttpServletRequest(action).addParameter("username", "PETER_THE_PRINCIPAL");
+        getMockHttpServletRequest(action).addParameter("password", "changeit");
 
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         
-        final RequestedPrincipalContext rpc = ac.getSubcontext(RequestedPrincipalContext.class, true);
+        final RequestedPrincipalContext rpc = ac.getOrCreateSubcontext(RequestedPrincipalContext.class);
         rpc.getPrincipalEvalPredicateFactoryRegistry().register(
                 TestPrincipal.class, "exact", new ExactPrincipalEvalPredicateFactory());
         rpc.setOperator("exact");
@@ -319,10 +340,11 @@ public class HTPasswdCredentialValidatorTest extends BaseAuthenticationContextTe
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
         
-        Assert.assertNotNull(ac.getAuthenticationResult());
-        Assert.assertEquals(ac.getAuthenticationResult().getSubject().getPrincipals(UsernamePrincipal.class).iterator()
+        final AuthenticationResult result = ac.getAuthenticationResult();
+        assert result != null;
+        Assert.assertEquals(result.getSubject().getPrincipals(UsernamePrincipal.class).iterator()
                 .next().getName(), "PETER_THE_PRINCIPAL");
-        Assert.assertEquals(ac.getAuthenticationResult().getSubject().getPrincipals(TestPrincipal.class).iterator()
+        Assert.assertEquals(result.getSubject().getPrincipals(TestPrincipal.class).iterator()
                 .next().getName(), "test1");
     }
     
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/InitializeRequestedPrincipalContextTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/InitializeRequestedPrincipalContextTest.java
index 1b5ca896e..24e9dcfff 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/InitializeRequestedPrincipalContextTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/InitializeRequestedPrincipalContextTest.java
@@ -34,6 +34,7 @@ import net.shibboleth.idp.profile.context.navigate.WebflowRequestContextProfileR
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.idp.profile.testing.MockProfileConfiguration;
 import net.shibboleth.idp.profile.testing.RequestContextBuilder;
+import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.component.ComponentInitializationException;
 
 import org.springframework.webflow.execution.Event;
@@ -71,11 +72,14 @@ public class InitializeRequestedPrincipalContextTest {
      */
     @Test public void testNoReplace() throws Exception {
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class, true);
-        authCtx.getSubcontext(RequestedPrincipalContext.class, true).setOperator("foo");
+        assert authCtx != null;
+        authCtx.getOrCreateSubcontext(RequestedPrincipalContext.class).setOperator("foo");
 
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
-        Assert.assertEquals(authCtx.getSubcontext(RequestedPrincipalContext.class).getOperator(), "foo");
+        final RequestedPrincipalContext rpc = authCtx.getSubcontext(RequestedPrincipalContext.class);
+        assert rpc != null;
+        Assert.assertEquals(rpc.getOperator(), "foo");
     }
     
     /**
@@ -89,6 +93,7 @@ public class InitializeRequestedPrincipalContextTest {
 
         final Event event = action.execute(src);
         ActionTestingSupport.assertEvent(event, IdPEventIds.INVALID_RELYING_PARTY_CTX);
+        assert authCtx != null;
         Assert.assertNull(authCtx.getSubcontext(RequestedPrincipalContext.class));
     }
 
@@ -102,6 +107,7 @@ public class InitializeRequestedPrincipalContextTest {
 
         final Event event = action.execute(src);
         ActionTestingSupport.assertEvent(event, IdPEventIds.INVALID_PROFILE_CONFIG);
+        assert authCtx != null;
         Assert.assertNull(authCtx.getSubcontext(RequestedPrincipalContext.class));
     }
 
@@ -118,6 +124,7 @@ public class InitializeRequestedPrincipalContextTest {
 
         final Event event = action.execute(src);
         ActionTestingSupport.assertEvent(event, IdPEventIds.INVALID_PROFILE_CONFIG);
+        assert authCtx != null;
         Assert.assertNull(authCtx.getSubcontext(RequestedPrincipalContext.class));
     }
 
@@ -128,13 +135,14 @@ public class InitializeRequestedPrincipalContextTest {
      */
     @Test public void testNoMethods() throws Exception {
         final MockAuthenticationProfileConfiguration mock =
-                new MockAuthenticationProfileConfiguration("mock", Collections.<Principal>emptyList());
+                new MockAuthenticationProfileConfiguration("mock", CollectionSupport.<Principal>emptyList());
         src = new RequestContextBuilder().setRelyingPartyProfileConfigurations(
                 Collections.<ProfileConfiguration>singleton(mock)).buildRequestContext();
         prc = new WebflowRequestContextProfileRequestContextLookup().apply(src);
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class, true);
+        assert authCtx != null;
         
-        authCtx.getSubcontext(RequestedPrincipalContext.class, true).setOperator("foo");
+        authCtx.getOrCreateSubcontext(RequestedPrincipalContext.class).setOperator("foo");
 
         action = new InitializeRequestedPrincipalContext();
         action.setReplaceExistingContext(true);
@@ -142,7 +150,9 @@ public class InitializeRequestedPrincipalContextTest {
 
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
-        Assert.assertEquals(authCtx.getSubcontext(RequestedPrincipalContext.class).getOperator(), "foo");
+        final RequestedPrincipalContext rpc = authCtx.getSubcontext(RequestedPrincipalContext.class);
+        assert rpc != null;
+        Assert.assertEquals(rpc.getOperator(), "foo");
     }
     
     /**
@@ -153,13 +163,14 @@ public class InitializeRequestedPrincipalContextTest {
     @Test public void testWithMethods() throws Exception {
         final Principal method = new TestPrincipal("test");
         final MockAuthenticationProfileConfiguration mock =
-                new MockAuthenticationProfileConfiguration("mock", Collections.singletonList(method));
+                new MockAuthenticationProfileConfiguration("mock", CollectionSupport.singletonList(method));
         src = new RequestContextBuilder().setRelyingPartyProfileConfigurations(
                 Collections.<ProfileConfiguration>singleton(mock)).buildRequestContext();
         prc = new WebflowRequestContextProfileRequestContextLookup().apply(src);
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class, true);
+        assert authCtx != null;
 
-        authCtx.getSubcontext(RequestedPrincipalContext.class, true).setOperator("foo");
+        authCtx.getOrCreateSubcontext(RequestedPrincipalContext.class).setOperator("foo");
 
         action = new InitializeRequestedPrincipalContext();
         action.setReplaceExistingContext(true);
@@ -168,7 +179,7 @@ public class InitializeRequestedPrincipalContextTest {
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
         RequestedPrincipalContext rpCtx = authCtx.getSubcontext(RequestedPrincipalContext.class, false);
-        Assert.assertNotNull(rpCtx);
+        assert rpCtx != null;
         Assert.assertEquals(rpCtx.getOperator(), "exact");
         Assert.assertEquals(rpCtx.getRequestedPrincipals().size(), 1);
         Assert.assertSame(method, rpCtx.getRequestedPrincipals().get(0));
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/JAASCredentialValidatorTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/JAASCredentialValidatorTest.java
index 0192dac7e..2c0a4e48a 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/JAASCredentialValidatorTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/JAASCredentialValidatorTest.java
@@ -41,6 +41,7 @@ import org.testng.annotations.BeforeClass;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
+import net.shibboleth.idp.authn.AuthenticationResult;
 import net.shibboleth.idp.authn.AuthnEventIds;
 import net.shibboleth.idp.authn.context.AuthenticationContext;
 import net.shibboleth.idp.authn.context.AuthenticationErrorContext;
@@ -51,6 +52,7 @@ import net.shibboleth.idp.authn.principal.UsernamePrincipal;
 import net.shibboleth.idp.authn.principal.impl.ExactPrincipalEvalPredicateFactory;
 import net.shibboleth.idp.authn.testing.TestPrincipal;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
+import net.shibboleth.shared.collection.CollectionSupport;
 import net.shibboleth.shared.collection.Pair;
 import net.shibboleth.shared.component.ComponentInitializationException;
 import net.shibboleth.shared.net.URISupport;
@@ -120,7 +122,9 @@ public class JAASCredentialValidatorTest extends BaseAuthenticationContextTest {
     }
 
     @Test public void testMissingUser() throws ComponentInitializationException {
-        prc.getSubcontext(AuthenticationContext.class).setAttemptedFlow(authenticationFlows.get(0));
+        final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
+        ac.setAttemptedFlow(authenticationFlows.get(0));
         
         validator.initialize();
         action.initialize();
@@ -131,6 +135,7 @@ public class JAASCredentialValidatorTest extends BaseAuthenticationContextTest {
 
     @Test public void testMissingUser2() throws ComponentInitializationException {
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         ac.getSubcontext(UsernamePasswordContext.class, true);
         
@@ -142,10 +147,11 @@ public class JAASCredentialValidatorTest extends BaseAuthenticationContextTest {
     }
 
     @Test public void testNoConfig() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "foo");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "bar");
+        getMockHttpServletRequest(action).addParameter("username", "foo");
+        getMockHttpServletRequest(action).addParameter("password", "bar");
 
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac!= null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         
         validator.initialize();
@@ -156,15 +162,17 @@ public class JAASCredentialValidatorTest extends BaseAuthenticationContextTest {
         final Event event = action.execute(src);
         ActionTestingSupport.assertEvent(event, AuthnEventIds.INVALID_CREDENTIALS);
         AuthenticationErrorContext errorCtx = ac.getSubcontext(AuthenticationErrorContext.class);
+        assert errorCtx != null;
         Assert.assertEquals(errorCtx.getExceptions().size(), 1);
         Assert.assertTrue(errorCtx.getExceptions().get(0) instanceof LoginException);
     }
 
     @Test public void testBadConfig() throws ComponentInitializationException, URISyntaxException, IOException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "foo");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "bar");
+        getMockHttpServletRequest(action).addParameter("username", "foo");
+        getMockHttpServletRequest(action).addParameter("password", "bar");
 
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         validator.setLoginConfigNames(Collections.singletonList("ShibBadAuth"));
         validator.setLoginConfigType("JavaLoginConfig");
@@ -179,22 +187,25 @@ public class JAASCredentialValidatorTest extends BaseAuthenticationContextTest {
         final Event event = action.execute(src);
         ActionTestingSupport.assertEvent(event, AuthnEventIds.INVALID_CREDENTIALS);
         AuthenticationErrorContext errorCtx = ac.getSubcontext(AuthenticationErrorContext.class);
+        assert errorCtx != null;
         Assert.assertEquals(errorCtx.getExceptions().size(), 1);
         Assert.assertTrue(errorCtx.getExceptions().get(0) instanceof LoginException);
     }
 
     @Test public void testUnsupportedConfig() throws ComponentInitializationException, URISyntaxException, IOException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "foo");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "bar");
+        getMockHttpServletRequest(action).addParameter("username", "foo");
+        getMockHttpServletRequest(action).addParameter("password", "bar");
 
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         
         final RequestedPrincipalContext rpc = ac.getSubcontext(RequestedPrincipalContext.class, true);
+        assert rpc!= null;
         rpc.getPrincipalEvalPredicateFactoryRegistry().register(
                 TestPrincipal.class, "exact", new ExactPrincipalEvalPredicateFactory());
         rpc.setOperator("exact");
-        rpc.setRequestedPrincipals(Collections.<Principal>singletonList(new TestPrincipal("test1")));
+        rpc.setRequestedPrincipals(CollectionSupport.<Principal>singletonList(new TestPrincipal("test1")));
 
         validator.setLoginConfigurations(Collections.singletonList(new Pair<String,Collection<Principal>>("ShibUserPassAuth",
                 Collections.singletonList(new TestPrincipal("test2")))));
@@ -212,10 +223,11 @@ public class JAASCredentialValidatorTest extends BaseAuthenticationContextTest {
     }
     
     @Test public void testUnmatchedUser() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "foo");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "bar");
+        getMockHttpServletRequest(action).addParameter("username", "foo");
+        getMockHttpServletRequest(action).addParameter("password", "bar");
 
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         ac.getSubcontext(UsernamePasswordContext.class, true);
         
@@ -231,10 +243,11 @@ public class JAASCredentialValidatorTest extends BaseAuthenticationContextTest {
     }
 
     @Test public void testBadUsername() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "foo");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "bar");
+        getMockHttpServletRequest(action).addParameter("username", "foo");
+        getMockHttpServletRequest(action).addParameter("password", "bar");
 
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         validator.setLoginConfigType("JavaLoginConfig");
         validator.setLoginConfigResource(new ClassPathResource(DATA_CLASSPATH + "jaas.config"));
@@ -247,16 +260,18 @@ public class JAASCredentialValidatorTest extends BaseAuthenticationContextTest {
         final Event event = action.execute(src);
         ActionTestingSupport.assertEvent(event, "UnknownUsername");
         AuthenticationErrorContext errorCtx = ac.getSubcontext(AuthenticationErrorContext.class);
+        assert errorCtx != null;
         Assert.assertTrue(errorCtx.getExceptions().get(0) instanceof LoginException);
         Assert.assertTrue(errorCtx.isClassifiedError("UnknownUsername"));
         Assert.assertFalse(errorCtx.isClassifiedError("InvalidPassword"));
     }
 
     @Test public void testBadPassword() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "PETER_THE_PRINCIPAL");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "bar");
+        getMockHttpServletRequest(action).addParameter("username", "PETER_THE_PRINCIPAL");
+        getMockHttpServletRequest(action).addParameter("password", "bar");
 
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         validator.setLoginConfigType("JavaLoginConfig");
         validator.setLoginConfigResource(new ClassPathResource(DATA_CLASSPATH + "jaas.config"));
@@ -269,16 +284,18 @@ public class JAASCredentialValidatorTest extends BaseAuthenticationContextTest {
         final Event event = action.execute(src);
         ActionTestingSupport.assertEvent(event, "InvalidPassword");
         AuthenticationErrorContext errorCtx = ac.getSubcontext(AuthenticationErrorContext.class);
+        assert errorCtx != null; 
         Assert.assertTrue(errorCtx.getExceptions().get(0) instanceof LoginException);
         Assert.assertFalse(errorCtx.isClassifiedError("UnknownUsername"));
         Assert.assertTrue(errorCtx.isClassifiedError("InvalidPassword"));
     }
 
     @Test public void testAuthorized() throws ComponentInitializationException, URISyntaxException, IOException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "PETER_THE_PRINCIPAL");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "changeit");
+        getMockHttpServletRequest(action).addParameter("username", "PETER_THE_PRINCIPAL");
+        getMockHttpServletRequest(action).addParameter("password", "changeit");
 
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
 
         validator.setLoginConfigType("JavaLoginConfig");
@@ -293,16 +310,18 @@ public class JAASCredentialValidatorTest extends BaseAuthenticationContextTest {
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
         
-        Assert.assertNotNull(ac.getAuthenticationResult());
-        Assert.assertEquals(ac.getAuthenticationResult().getSubject().getPrincipals(UsernamePrincipal.class).iterator()
+        final AuthenticationResult ar = ac.getAuthenticationResult();
+        assert ar != null;
+        Assert.assertEquals(ar.getSubject().getPrincipals(UsernamePrincipal.class).iterator()
                 .next().getName(), "PETER_THE_PRINCIPAL");
     }
 
     @Test public void testAuthorizedAndKeep() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "PETER_THE_PRINCIPAL");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "changeit");
+        getMockHttpServletRequest(action).addParameter("username", "PETER_THE_PRINCIPAL");
+        getMockHttpServletRequest(action).addParameter("password", "changeit");
 
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac!= null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
 
         validator.setLoginConfigType("JavaLoginConfig");
@@ -316,23 +335,25 @@ public class JAASCredentialValidatorTest extends BaseAuthenticationContextTest {
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
         
-        Assert.assertNotNull(ac.getAuthenticationResult());
-        Assert.assertEquals(ac.getAuthenticationResult().getSubject().getPrincipals(UsernamePrincipal.class).iterator()
+        final AuthenticationResult ar = ac.getAuthenticationResult();
+        assert ar != null;
+        Assert.assertEquals(ar.getSubject().getPrincipals(UsernamePrincipal.class).iterator()
                 .next().getName(), "PETER_THE_PRINCIPAL");
     }
 
     @Test public void testSupported() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "PETER_THE_PRINCIPAL");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "changeit");
+        getMockHttpServletRequest(action).addParameter("username", "PETER_THE_PRINCIPAL");
+        getMockHttpServletRequest(action).addParameter("password", "changeit");
 
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         
-        final RequestedPrincipalContext rpc = ac.getSubcontext(RequestedPrincipalContext.class, true);
+        final RequestedPrincipalContext rpc = ac.getOrCreateSubcontext(RequestedPrincipalContext.class);
         rpc.getPrincipalEvalPredicateFactoryRegistry().register(
                 TestPrincipal.class, "exact", new ExactPrincipalEvalPredicateFactory());
         rpc.setOperator("exact");
-        rpc.setRequestedPrincipals(Collections.<Principal>singletonList(new TestPrincipal("test1")));
+        rpc.setRequestedPrincipals(CollectionSupport.<Principal>singletonList(new TestPrincipal("test1")));
 
         validator.setLoginConfigurations(Collections.singletonList(new Pair<String,Collection<Principal>>("ShibUserPassAuth",
                 Collections.<Principal>singletonList(new TestPrincipal("test1")))));
@@ -347,18 +368,20 @@ public class JAASCredentialValidatorTest extends BaseAuthenticationContextTest {
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
         
-        Assert.assertNotNull(ac.getAuthenticationResult());
-        Assert.assertEquals(ac.getAuthenticationResult().getSubject().getPrincipals(UsernamePrincipal.class).iterator()
+        final AuthenticationResult ar = ac.getAuthenticationResult();
+        assert ar != null;
+        Assert.assertEquals(ar.getSubject().getPrincipals(UsernamePrincipal.class).iterator()
                 .next().getName(), "PETER_THE_PRINCIPAL");
-        Assert.assertEquals(ac.getAuthenticationResult().getSubject().getPrincipals(TestPrincipal.class).iterator()
+        Assert.assertEquals(ar.getSubject().getPrincipals(TestPrincipal.class).iterator()
                 .next().getName(), "test1");
     }
     
     @Test public void testMultiConfigAuthorized() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "PETER_THE_PRINCIPAL");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "changeit");
+        getMockHttpServletRequest(action).addParameter("username", "PETER_THE_PRINCIPAL");
+        getMockHttpServletRequest(action).addParameter("password", "changeit");
 
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
 
         validator.setLoginConfigNames(Arrays.asList("ShibBadAuth", "ShibUserPassAuth"));
@@ -373,16 +396,18 @@ public class JAASCredentialValidatorTest extends BaseAuthenticationContextTest {
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
         
-        Assert.assertNotNull(ac.getAuthenticationResult());
-        Assert.assertEquals(ac.getAuthenticationResult().getSubject().getPrincipals(UsernamePrincipal.class).iterator()
+        final AuthenticationResult ar = ac.getAuthenticationResult();
+        assert ar != null;
+        Assert.assertEquals(ar.getSubject().getPrincipals(UsernamePrincipal.class).iterator()
                 .next().getName(), "PETER_THE_PRINCIPAL");
     }
     
     @Test public void testMatchAndAuthorized() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "PETER_THE_PRINCIPAL");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "changeit");
+        getMockHttpServletRequest(action).addParameter("username", "PETER_THE_PRINCIPAL");
+        getMockHttpServletRequest(action).addParameter("password", "changeit");
 
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
 
         validator.setLoginConfigType("JavaLoginConfig");
@@ -397,8 +422,9 @@ public class JAASCredentialValidatorTest extends BaseAuthenticationContextTest {
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
         
-        Assert.assertNotNull(ac.getAuthenticationResult());
-        Assert.assertEquals(ac.getAuthenticationResult().getSubject().getPrincipals(UsernamePrincipal.class).iterator()
+        final AuthenticationResult ar = ac.getAuthenticationResult();
+        assert ar != null;
+        Assert.assertEquals(ar.getSubject().getPrincipals(UsernamePrincipal.class).iterator()
                 .next().getName(), "PETER_THE_PRINCIPAL");
     }
     
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/LDAPCredentialValidatorTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/LDAPCredentialValidatorTest.java
index 01855af8d..9ca6c3279 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/LDAPCredentialValidatorTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/LDAPCredentialValidatorTest.java
@@ -30,6 +30,7 @@ import java.util.regex.Pattern;
 
 import org.ldaptive.DefaultConnectionFactory;
 import org.ldaptive.auth.AccountState;
+import org.ldaptive.auth.AuthenticationResponse;
 import org.ldaptive.auth.AuthenticationResultCode;
 import org.ldaptive.auth.Authenticator;
 import org.ldaptive.auth.SearchDnResolver;
@@ -147,7 +148,9 @@ public class LDAPCredentialValidatorTest extends BaseAuthenticationContextTest {
     }
 
     @Test public void testMissingUser() throws ComponentInitializationException {
-        prc.getSubcontext(AuthenticationContext.class).setAttemptedFlow(authenticationFlows.get(0));
+        AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
+        ac.setAttemptedFlow(authenticationFlows.get(0));
 
         validator.setAuthenticator(authenticator);
         validator.initialize();
@@ -160,6 +163,7 @@ public class LDAPCredentialValidatorTest extends BaseAuthenticationContextTest {
 
     @Test public void testMissingUser2() throws ComponentInitializationException {
         AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         ac.getSubcontext(UsernamePasswordContext.class, true);
         
@@ -173,15 +177,16 @@ public class LDAPCredentialValidatorTest extends BaseAuthenticationContextTest {
         Assert.assertNull(ac.getSubcontext(LDAPResponseContext.class));
         ActionTestingSupport.assertEvent(event, AuthnEventIds.NO_CREDENTIALS);
         final AuthenticationErrorContext aec = ac.getSubcontext(AuthenticationErrorContext.class);
-        Assert.assertNotNull(aec);
+        assert aec != null;
         Assert.assertTrue(aec.isClassifiedError(AuthnEventIds.NO_CREDENTIALS));
     }
 
     @Test public void testUnmatchedUser() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "foo");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "bar");
+        getMockHttpServletRequest(action).addParameter("username", "foo");
+        getMockHttpServletRequest(action).addParameter("password", "bar");
 
         AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         ac.getSubcontext(UsernamePasswordContext.class, true);
         
@@ -198,10 +203,11 @@ public class LDAPCredentialValidatorTest extends BaseAuthenticationContextTest {
     }
 
     @Test public void testBadConfig() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "foo");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "changeit");
+        getMockHttpServletRequest(action).addParameter("username", "foo");
+        getMockHttpServletRequest(action).addParameter("password", "changeit");
 
         AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         
         validator.setAuthenticator(new Authenticator(new SearchDnResolver(), authHandler));
@@ -214,22 +220,25 @@ public class LDAPCredentialValidatorTest extends BaseAuthenticationContextTest {
         final Event event = action.execute(src);
         Assert.assertNull(ac.getAuthenticationResult());
         LDAPResponseContext lrc = ac.getSubcontext(LDAPResponseContext.class);
-        Assert.assertNotNull(lrc.getAuthenticationResponse());
-        Assert.assertEquals(lrc.getAuthenticationResponse().getAuthenticationResultCode(),
+        assert lrc != null;
+        final AuthenticationResponse lar = lrc.getAuthenticationResponse();
+        assert lar != null;
+        Assert.assertEquals(lar.getAuthenticationResultCode(),
                 AuthenticationResultCode.DN_RESOLUTION_FAILURE);
 
         AuthenticationErrorContext aec = ac.getSubcontext(AuthenticationErrorContext.class);
-        Assert.assertNotNull(aec);
+        assert aec != null;
         ActionTestingSupport.assertEvent(event, "UnknownUsername");
         Assert.assertEquals(aec.getClassifiedErrors().size(), 1);
         Assert.assertTrue(aec.isClassifiedError("UnknownUsername"));
     }
 
     @Test public void testBadConfig2() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "PETER_THE_PRINCIPAL");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "bar");
+        getMockHttpServletRequest(action).addParameter("username", "PETER_THE_PRINCIPAL");
+        getMockHttpServletRequest(action).addParameter("password", "bar");
 
         AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         
         validator.setAuthenticator(new Authenticator(dnResolver,
@@ -245,7 +254,7 @@ public class LDAPCredentialValidatorTest extends BaseAuthenticationContextTest {
         Assert.assertNull(ac.getAuthenticationResult());
         Assert.assertNull(ac.getSubcontext(LDAPResponseContext.class));
         final AuthenticationErrorContext aec = ac.getSubcontext(AuthenticationErrorContext.class);
-        Assert.assertNotNull(aec);
+        assert aec != null;
         ActionTestingSupport.assertEvent(event, AuthnEventIds.AUTHN_EXCEPTION);
         Assert.assertEquals(aec.getExceptions().size(), 1);
         Assert.assertEquals(aec.getClassifiedErrors().size(), 1);
@@ -253,10 +262,11 @@ public class LDAPCredentialValidatorTest extends BaseAuthenticationContextTest {
     }
 
     @Test public void testBadUsername() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "foo");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "bar");
+        getMockHttpServletRequest(action).addParameter("username", "foo");
+        getMockHttpServletRequest(action).addParameter("password", "bar");
 
         AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         
         validator.setAuthenticator(authenticator);
@@ -269,22 +279,25 @@ public class LDAPCredentialValidatorTest extends BaseAuthenticationContextTest {
         final Event event = action.execute(src);
         Assert.assertNull(ac.getAuthenticationResult());
         LDAPResponseContext lrc = ac.getSubcontext(LDAPResponseContext.class);
-        Assert.assertNotNull(lrc.getAuthenticationResponse());
-        Assert.assertEquals(lrc.getAuthenticationResponse().getAuthenticationResultCode(),
+        assert lrc != null;
+        final AuthenticationResponse lar = lrc.getAuthenticationResponse();
+        assert lar != null;
+        Assert.assertEquals(lar.getAuthenticationResultCode(),
                 AuthenticationResultCode.DN_RESOLUTION_FAILURE);
 
         AuthenticationErrorContext aec = ac.getSubcontext(AuthenticationErrorContext.class);
-        Assert.assertNotNull(aec);
+        assert aec != null;
         ActionTestingSupport.assertEvent(event, "UnknownUsername");
         Assert.assertEquals(aec.getClassifiedErrors().size(), 1);
         Assert.assertTrue(aec.isClassifiedError("UnknownUsername"));
     }
 
     @Test public void testEmptyPassword() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "PETER_THE_PRINCIPAL");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "");
+        getMockHttpServletRequest(action).addParameter("username", "PETER_THE_PRINCIPAL");
+        getMockHttpServletRequest(action).addParameter("password", "");
 
         AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         
         validator.setAuthenticator(authenticator);
@@ -299,15 +312,16 @@ public class LDAPCredentialValidatorTest extends BaseAuthenticationContextTest {
         Assert.assertNull(ac.getSubcontext(LDAPResponseContext.class));
         ActionTestingSupport.assertEvent(event, AuthnEventIds.INVALID_CREDENTIALS);
         final AuthenticationErrorContext aec = ac.getSubcontext(AuthenticationErrorContext.class);
-        Assert.assertNotNull(aec);
+        assert aec != null;
         Assert.assertTrue(aec.isClassifiedError(AuthnEventIds.INVALID_CREDENTIALS));
     }
 
     @Test public void testBadPassword() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "PETER_THE_PRINCIPAL");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "bar");
+        getMockHttpServletRequest(action).addParameter("username", "PETER_THE_PRINCIPAL");
+        getMockHttpServletRequest(action).addParameter("password", "bar");
 
         AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         
         validator.setAuthenticator(authenticator);
@@ -320,22 +334,25 @@ public class LDAPCredentialValidatorTest extends BaseAuthenticationContextTest {
         final Event event = action.execute(src);
         Assert.assertNull(ac.getAuthenticationResult());
         LDAPResponseContext lrc = ac.getSubcontext(LDAPResponseContext.class);
-        Assert.assertNotNull(lrc.getAuthenticationResponse());
-        Assert.assertEquals(lrc.getAuthenticationResponse().getAuthenticationResultCode(),
+        assert lrc != null;
+        final AuthenticationResponse lar = lrc.getAuthenticationResponse();
+        assert lar != null;
+        Assert.assertEquals(lar.getAuthenticationResultCode(),
                 AuthenticationResultCode.AUTHENTICATION_HANDLER_FAILURE);
 
         AuthenticationErrorContext aec = ac.getSubcontext(AuthenticationErrorContext.class);
-        Assert.assertNotNull(aec);
+        assert aec != null;
         ActionTestingSupport.assertEvent(event, "InvalidPassword");
         Assert.assertEquals(aec.getClassifiedErrors().size(), 1);
         Assert.assertTrue(aec.isClassifiedError("InvalidPassword"));
     }
 
     @Test public void testExpiredPassword() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "PETER_THE_PRINCIPAL");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "bar");
+        getMockHttpServletRequest(action).addParameter("username", "PETER_THE_PRINCIPAL");
+        getMockHttpServletRequest(action).addParameter("password", "bar");
 
         AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
 
         Authenticator errorAuthenticator = new Authenticator(dnResolver, authHandler);
@@ -352,12 +369,14 @@ public class LDAPCredentialValidatorTest extends BaseAuthenticationContextTest {
         final Event event = action.execute(src);
         Assert.assertNull(ac.getAuthenticationResult());
         LDAPResponseContext lrc = ac.getSubcontext(LDAPResponseContext.class);
-        Assert.assertNotNull(lrc.getAuthenticationResponse());
-        Assert.assertEquals(lrc.getAuthenticationResponse().getAuthenticationResultCode(),
+        assert lrc != null;
+        final AuthenticationResponse lar = lrc.getAuthenticationResponse();
+        assert lar != null;
+        Assert.assertEquals(lar.getAuthenticationResultCode(),
                 AuthenticationResultCode.AUTHENTICATION_HANDLER_FAILURE);
 
         AuthenticationErrorContext aec = ac.getSubcontext(AuthenticationErrorContext.class);
-        Assert.assertNotNull(aec);
+        assert aec != null;
         ActionTestingSupport.assertEvent(event, "ExpiredPassword");
         Assert.assertEquals(aec.getClassifiedErrors().size(), 2);
         Assert.assertTrue(aec.isClassifiedError("ExpiredPassword"));
@@ -365,10 +384,11 @@ public class LDAPCredentialValidatorTest extends BaseAuthenticationContextTest {
     }
 
     @Test public void testChangeAfterReset() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "PETER_THE_PRINCIPAL");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "changeit");
+        getMockHttpServletRequest(action).addParameter("username", "PETER_THE_PRINCIPAL");
+        getMockHttpServletRequest(action).addParameter("password", "changeit");
 
         AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
 
         Authenticator errorAuthenticator = new Authenticator(dnResolver, authHandler);
@@ -384,16 +404,18 @@ public class LDAPCredentialValidatorTest extends BaseAuthenticationContextTest {
 
         final Event event = action.execute(src);
         AuthenticationResult result = ac.getAuthenticationResult();
-        Assert.assertNotNull(result);
         LDAPResponseContext lrc = ac.getSubcontext(LDAPResponseContext.class);
-        Assert.assertNotNull(lrc.getAuthenticationResponse());
-        Assert.assertEquals(lrc.getAuthenticationResponse().getAuthenticationResultCode(),
+        assert lrc != null;
+        final AuthenticationResponse lar = lrc.getAuthenticationResponse();
+        assert lar != null;
+        Assert.assertEquals(lar.getAuthenticationResultCode(),
                 AuthenticationResultCode.AUTHENTICATION_HANDLER_SUCCESS);
 
         AuthenticationErrorContext aec = ac.getSubcontext(AuthenticationErrorContext.class);
-        Assert.assertNull(aec);
         AuthenticationWarningContext awc = ac.getSubcontext(AuthenticationWarningContext.class);
-        Assert.assertNotNull(awc);
+        assert awc != null && result != null;
+
+
         ActionTestingSupport.assertEvent(event, "ExpiredPassword");
         Assert.assertEquals(awc.getClassifiedWarnings().size(), 1);
         Assert.assertTrue(awc.isClassifiedWarning("ExpiredPassword"));
@@ -408,10 +430,11 @@ public class LDAPCredentialValidatorTest extends BaseAuthenticationContextTest {
     }
 
     @Test public void testExpiringPassword() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "PETER_THE_PRINCIPAL");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "changeit");
+        getMockHttpServletRequest(action).addParameter("username", "PETER_THE_PRINCIPAL");
+        getMockHttpServletRequest(action).addParameter("password", "changeit");
 
         AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
 
         Authenticator warningAuthenticator = new Authenticator(dnResolver, authHandler);
@@ -433,14 +456,16 @@ public class LDAPCredentialValidatorTest extends BaseAuthenticationContextTest {
         AuthenticationResult result = ac.getAuthenticationResult();
         Assert.assertNotNull(result);
         LDAPResponseContext lrc = ac.getSubcontext(LDAPResponseContext.class);
-        Assert.assertNotNull(lrc.getAuthenticationResponse());
-        Assert.assertEquals(lrc.getAuthenticationResponse().getAuthenticationResultCode(),
+        assert lrc != null;
+        final AuthenticationResponse lar = lrc.getAuthenticationResponse();
+        assert lar != null;
+        Assert.assertEquals(lar.getAuthenticationResultCode(),
                 AuthenticationResultCode.AUTHENTICATION_HANDLER_SUCCESS);
 
         ActionTestingSupport.assertEvent(event, "ExpiringPassword");
 
         AuthenticationWarningContext awc = ac.getSubcontext(AuthenticationWarningContext.class);
-        Assert.assertNotNull(awc);
+        assert awc != null && result != null;
         Assert.assertEquals(awc.getClassifiedWarnings().size(), 1);
         Assert.assertTrue(awc.isClassifiedWarning("ExpiringPassword"));
 
@@ -454,10 +479,11 @@ public class LDAPCredentialValidatorTest extends BaseAuthenticationContextTest {
     }
 
     @Test public void testAuthorized() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "PETER_THE_PRINCIPAL");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "changeit");
+        getMockHttpServletRequest(action).addParameter("username", "PETER_THE_PRINCIPAL");
+        getMockHttpServletRequest(action).addParameter("password", "changeit");
 
         AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
 
         validator.setAuthenticator(authenticator);
@@ -474,10 +500,12 @@ public class LDAPCredentialValidatorTest extends BaseAuthenticationContextTest {
         Assert.assertNull(aec);
 
         AuthenticationResult result = ac.getAuthenticationResult();
-        Assert.assertNotNull(result);
+        assert result != null;
         LDAPResponseContext lrc = ac.getSubcontext(LDAPResponseContext.class);
-        Assert.assertNotNull(lrc.getAuthenticationResponse());
-        Assert.assertEquals(lrc.getAuthenticationResponse().getAuthenticationResultCode(),
+        assert lrc != null;
+        final AuthenticationResponse lar = lrc.getAuthenticationResponse();
+        assert lar != null;
+        Assert.assertEquals(lar.getAuthenticationResultCode(),
                 AuthenticationResultCode.AUTHENTICATION_HANDLER_SUCCESS);
 
         UsernamePrincipal up = result.getSubject().getPrincipals(UsernamePrincipal.class).iterator().next();
@@ -490,19 +518,22 @@ public class LDAPCredentialValidatorTest extends BaseAuthenticationContextTest {
     }
 
     @Test public void testComputedAndAuthorized() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "PETER_THE_PRINCIPAL");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "change");
+        getMockHttpServletRequest(action).addParameter("username", "PETER_THE_PRINCIPAL");
+        getMockHttpServletRequest(action).addParameter("password", "change");
 
         AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         
         validator.setAuthenticator(authenticator);
         validator.setPasswordLookupStrategy(
                 new Function<ProfileRequestContext,char[]>() {
                     public char[] apply(final ProfileRequestContext input) {
-                        return (input.getSubcontext(
-                                AuthenticationContext.class).getSubcontext(
-                                        UsernamePasswordContext.class).getPassword() + "it").toCharArray();
+                        final AuthenticationContext ac = input.getSubcontext(AuthenticationContext.class);
+                        assert ac != null;
+                        final UsernamePasswordContext uc = ac.getSubcontext(UsernamePasswordContext.class);
+                        assert uc != null;
+                        return (uc.getPassword() + "it").toCharArray();
                     }
                 });
         validator.initialize();
@@ -518,10 +549,12 @@ public class LDAPCredentialValidatorTest extends BaseAuthenticationContextTest {
         Assert.assertNull(aec);
 
         AuthenticationResult result = ac.getAuthenticationResult();
-        Assert.assertNotNull(result);
+        assert result != null;
         LDAPResponseContext lrc = ac.getSubcontext(LDAPResponseContext.class);
-        Assert.assertNotNull(lrc.getAuthenticationResponse());
-        Assert.assertEquals(lrc.getAuthenticationResponse().getAuthenticationResultCode(),
+        assert lrc != null;
+        final AuthenticationResponse lar = lrc.getAuthenticationResponse();
+        assert lar != null;
+        Assert.assertEquals(lar.getAuthenticationResultCode(),
                 AuthenticationResultCode.AUTHENTICATION_HANDLER_SUCCESS);
 
         UsernamePrincipal up = result.getSubject().getPrincipals(UsernamePrincipal.class).iterator().next();
@@ -540,10 +573,11 @@ public class LDAPCredentialValidatorTest extends BaseAuthenticationContextTest {
 
 
         Authenticator defaultFilterAuthenticator = new Authenticator(testResolver, authHandler);
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "PETER_THE_PRINCIPAL");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "changeit");
+        getMockHttpServletRequest(action).addParameter("username", "PETER_THE_PRINCIPAL");
+        getMockHttpServletRequest(action).addParameter("password", "changeit");
 
         AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         validator.setAuthenticator(defaultFilterAuthenticator);
         validator.initialize();
@@ -559,10 +593,12 @@ public class LDAPCredentialValidatorTest extends BaseAuthenticationContextTest {
         Assert.assertNull(aec);
 
         AuthenticationResult result = ac.getAuthenticationResult();
-        Assert.assertNotNull(result);
+        assert result != null;
         LDAPResponseContext lrc = ac.getSubcontext(LDAPResponseContext.class);
-        Assert.assertNotNull(lrc.getAuthenticationResponse());
-        Assert.assertEquals(lrc.getAuthenticationResponse().getAuthenticationResultCode(),
+        assert lrc != null;
+        final AuthenticationResponse lar = lrc.getAuthenticationResponse();
+        assert lar != null;
+        Assert.assertEquals(lar.getAuthenticationResultCode(),
                 AuthenticationResultCode.AUTHENTICATION_HANDLER_SUCCESS);
 
         UsernamePrincipal up = result.getSubject().getPrincipals(UsernamePrincipal.class).iterator().next();
@@ -581,10 +617,11 @@ public class LDAPCredentialValidatorTest extends BaseAuthenticationContextTest {
 
 
         Authenticator defaultFilterAuthenticator = new Authenticator(testResolver, authHandler);
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "PETER_THE_PRINCIPAL");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "changeit");
+        getMockHttpServletRequest(action).addParameter("username", "PETER_THE_PRINCIPAL");
+        getMockHttpServletRequest(action).addParameter("password", "changeit");
 
         AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         validator.setAuthenticator(defaultFilterAuthenticator);
         validator.initialize();
@@ -599,11 +636,13 @@ public class LDAPCredentialValidatorTest extends BaseAuthenticationContextTest {
         AuthenticationErrorContext aec = ac.getSubcontext(AuthenticationErrorContext.class);
         Assert.assertNull(aec);
 
-        AuthenticationResult result = ac.getAuthenticationResult();
-        Assert.assertNotNull(result);
+        final AuthenticationResult result = ac.getAuthenticationResult();
+        assert result != null;
         LDAPResponseContext lrc = ac.getSubcontext(LDAPResponseContext.class);
-        Assert.assertNotNull(lrc.getAuthenticationResponse());
-        Assert.assertEquals(lrc.getAuthenticationResponse().getAuthenticationResultCode(),
+        assert lrc != null;
+        final AuthenticationResponse lar = lrc.getAuthenticationResponse();
+        assert lar != null;
+        Assert.assertEquals(lar.getAuthenticationResultCode(),
                 AuthenticationResultCode.AUTHENTICATION_HANDLER_SUCCESS);
 
         UsernamePrincipal up = result.getSubject().getPrincipals(UsernamePrincipal.class).iterator().next();
@@ -616,10 +655,11 @@ public class LDAPCredentialValidatorTest extends BaseAuthenticationContextTest {
     }
 
     @Test public void testMatchAndAuthorized() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "PETER_THE_PRINCIPAL");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "changeit");
+        getMockHttpServletRequest(action).addParameter("username", "PETER_THE_PRINCIPAL");
+        getMockHttpServletRequest(action).addParameter("password", "changeit");
 
         AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
 
         validator.setAuthenticator(authenticator);
@@ -634,13 +674,13 @@ public class LDAPCredentialValidatorTest extends BaseAuthenticationContextTest {
         ActionTestingSupport.assertProceedEvent(event);
         
         AuthenticationErrorContext aec = ac.getSubcontext(AuthenticationErrorContext.class);
-        Assert.assertNull(aec);
-
         AuthenticationResult result = ac.getAuthenticationResult();
-        Assert.assertNotNull(result);
+        assert result != null;
         LDAPResponseContext lrc = ac.getSubcontext(LDAPResponseContext.class);
-        Assert.assertNotNull(lrc.getAuthenticationResponse());
-        Assert.assertEquals(lrc.getAuthenticationResponse().getAuthenticationResultCode(),
+        assert lrc != null;
+        final AuthenticationResponse lar = lrc.getAuthenticationResponse();
+        assert lar != null;
+        Assert.assertEquals(lar.getAuthenticationResultCode(),
                 AuthenticationResultCode.AUTHENTICATION_HANDLER_SUCCESS);
 
         UsernamePrincipal up = result.getSubject().getPrincipals(UsernamePrincipal.class).iterator().next();
@@ -653,10 +693,11 @@ public class LDAPCredentialValidatorTest extends BaseAuthenticationContextTest {
     }
 
     @Test public void testAuthorizedAndKeepContext() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "PETER_THE_PRINCIPAL");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "changeit");
+        getMockHttpServletRequest(action).addParameter("username", "PETER_THE_PRINCIPAL");
+        getMockHttpServletRequest(action).addParameter("password", "changeit");
 
         AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
 
         validator.setAuthenticator(authenticator);
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/PopulateAuthenticationContextTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/PopulateAuthenticationContextTest.java
index 024496dfa..95d391d48 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/PopulateAuthenticationContextTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/PopulateAuthenticationContextTest.java
@@ -57,7 +57,7 @@ final public class PopulateAuthenticationContextTest extends BaseAuthenticationC
         ActionTestingSupport.assertProceedEvent(prc);
         
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
-        Assert.assertNotNull(authCtx);
+        assert authCtx != null;
 
         Assert.assertEquals(authCtx.getAvailableFlows().size(), 3);
         Assert.assertNotNull(authCtx.getAvailableFlows().get("test1"));
@@ -86,7 +86,7 @@ final public class PopulateAuthenticationContextTest extends BaseAuthenticationC
         ActionTestingSupport.assertProceedEvent(prc);
         
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
-        Assert.assertNotNull(authCtx);
+        assert authCtx != null;
 
         Assert.assertEquals(authCtx.getAvailableFlows().size(), 3);
         Assert.assertNotNull(authCtx.getAvailableFlows().get("test1"));
@@ -118,7 +118,7 @@ final public class PopulateAuthenticationContextTest extends BaseAuthenticationC
         ActionTestingSupport.assertProceedEvent(prc);
         
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
-        Assert.assertNotNull(authCtx);
+        assert authCtx != null;
 
         Assert.assertEquals(authCtx.getAvailableFlows().size(), 3);
         Assert.assertNotNull(authCtx.getAvailableFlows().get("test1"));
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/PopulateMultiFactorAuthenticationContextTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/PopulateMultiFactorAuthenticationContextTest.java
index 0d87f48ae..0ec0b6836 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/PopulateMultiFactorAuthenticationContextTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/PopulateMultiFactorAuthenticationContextTest.java
@@ -55,11 +55,12 @@ public class PopulateMultiFactorAuthenticationContextTest {
     @BeforeMethod public void setUp() throws ComponentInitializationException {
         rc = new RequestContextBuilder().buildRequestContext();
         prc = new WebflowRequestContextProfileRequestContextLookup().apply(rc);
-        ac = prc.getSubcontext(AuthenticationContext.class, true);
-        ac.setAttemptedFlow(new AuthenticationFlowDescriptor());
-        ac.getAttemptedFlow().setId("authn/MFA");
-        ac.getAttemptedFlow().setResultSerializer(new DefaultAuthenticationResultSerializer());
-        ac.getAttemptedFlow().initialize();
+        final AuthenticationContext authCtx = ac = prc.getOrCreateSubcontext(AuthenticationContext.class);
+        final AuthenticationFlowDescriptor flow =new AuthenticationFlowDescriptor();
+        authCtx.setAttemptedFlow(flow);
+        flow.setId("authn/MFA");
+        flow.setResultSerializer(new DefaultAuthenticationResultSerializer());
+        flow.initialize();
         action = new PopulateMultiFactorAuthenticationContext();
     }
 
@@ -81,7 +82,7 @@ public class PopulateMultiFactorAuthenticationContextTest {
         ActionTestingSupport.assertProceedEvent(event);
         
         final MultiFactorAuthenticationContext mfa = ac.getSubcontext(MultiFactorAuthenticationContext.class);
-        Assert.assertNotNull(mfa);
+        assert mfa != null;
         Assert.assertEquals(ac.getAttemptedFlow(), mfa.getAuthenticationFlowDescriptor());
         Assert.assertEquals(mfa.getTransitionMap().size(), 1);
         Assert.assertNotNull(mfa.getTransitionMap().get(null));
@@ -144,7 +145,7 @@ public class PopulateMultiFactorAuthenticationContextTest {
         ActionTestingSupport.assertProceedEvent(event);
         
         final MultiFactorAuthenticationContext mfa = ac.getSubcontext(MultiFactorAuthenticationContext.class);
-        Assert.assertNotNull(mfa);
+        assert mfa != null;
         Assert.assertEquals(ac.getAttemptedFlow(), mfa.getAuthenticationFlowDescriptor());
         Assert.assertEquals(mfa.getActiveResults().size(), 2);
         Assert.assertNull(mfa.getActiveResults().get("foo"));
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/PopulateSubjectCanonicalizationContextTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/PopulateSubjectCanonicalizationContextTest.java
index 47a9201d6..e8fb4a1e3 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/PopulateSubjectCanonicalizationContextTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/PopulateSubjectCanonicalizationContextTest.java
@@ -45,7 +45,7 @@ public class PopulateSubjectCanonicalizationContextTest {
     @BeforeMethod public void setUp() throws Exception {        
         src = new RequestContextBuilder().buildRequestContext();
         prc = new WebflowRequestContextProfileRequestContextLookup().apply(src);
-        prc.getSubcontext(SubjectCanonicalizationContext.class, true).setSubject(new Subject());
+        prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class).setSubject(new Subject());
 
         c14nFlows = List.of(new SubjectCanonicalizationFlowDescriptor(),
                 new SubjectCanonicalizationFlowDescriptor(), new SubjectCanonicalizationFlowDescriptor());
@@ -69,7 +69,7 @@ public class PopulateSubjectCanonicalizationContextTest {
         
         ActionTestingSupport.assertProceedEvent(prc);
         final SubjectCanonicalizationContext c14nCtx = prc.getSubcontext(SubjectCanonicalizationContext.class, false);
-        Assert.assertNotNull(c14nCtx);
+        assert c14nCtx!=null;
 
         Assert.assertEquals(c14nCtx.getPotentialFlows().size(), 3);
         Assert.assertNotNull(c14nCtx.getPotentialFlows().get("test1"));
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/PreserveAuthenticationFlowStateTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/PreserveAuthenticationFlowStateTest.java
index 752a5ec6c..dd29ad0ce 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/PreserveAuthenticationFlowStateTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/PreserveAuthenticationFlowStateTest.java
@@ -18,7 +18,10 @@
 package net.shibboleth.idp.authn.impl;
 
 
+import static org.testng.Assert.assertTrue;
+
 import java.util.Arrays;
+import java.util.Map;
 
 import org.springframework.mock.web.MockHttpServletRequest;
 import org.springframework.webflow.execution.Event;
@@ -54,7 +57,10 @@ public class PreserveAuthenticationFlowStateTest extends BaseAuthenticationConte
         final Event event = action.execute(src);
         
         ActionTestingSupport.assertProceedEvent(event);
-        Assert.assertTrue(prc.getSubcontext(AuthenticationContext.class).getAuthenticationStateMap().isEmpty());
+        final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
+        final Map<String, Object> asm = ac.getAuthenticationStateMap();
+        Assert.assertTrue(asm.isEmpty());
     }
 
     @Test public void testNoParameters() throws ComponentInitializationException {
@@ -66,7 +72,10 @@ public class PreserveAuthenticationFlowStateTest extends BaseAuthenticationConte
         final Event event = action.execute(src);
         
         ActionTestingSupport.assertProceedEvent(event);
-        Assert.assertTrue(prc.getSubcontext(AuthenticationContext.class).getAuthenticationStateMap().isEmpty());
+        final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
+        final Map<String, Object> asm = ac.getAuthenticationStateMap();
+        Assert.assertTrue(asm.isEmpty());
     }
 
     @Test public void testNoneFound(){
@@ -74,18 +83,22 @@ public class PreserveAuthenticationFlowStateTest extends BaseAuthenticationConte
         final Event event = action.execute(src);
         
         ActionTestingSupport.assertProceedEvent(event);
-        Assert.assertTrue(prc.getSubcontext(AuthenticationContext.class).getAuthenticationStateMap().isEmpty());
+        final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
+        final Map<String, Object> asm = ac.getAuthenticationStateMap();
+        Assert.assertTrue(asm.isEmpty());
     }
     
     @Test public void testNoValues() {
         
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("foo", (String) null);
+        getMockHttpServletRequest(action).addParameter("foo", (String) null);
         
         final Event event = action.execute(src);
         
         ActionTestingSupport.assertProceedEvent(event);
         
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
+        assert authCtx != null;
         Assert.assertEquals(authCtx.getAuthenticationStateMap().size(), 1);
         Assert.assertTrue(authCtx.getAuthenticationStateMap().containsKey("foo"));
         Assert.assertNull(authCtx.getAuthenticationStateMap().get("foo"));
@@ -93,14 +106,15 @@ public class PreserveAuthenticationFlowStateTest extends BaseAuthenticationConte
     
     @Test public void testSingleValued() {
         
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("foo", "bar");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("foo2", "bar2");
+        getMockHttpServletRequest(action).addParameter("foo", "bar");
+        getMockHttpServletRequest(action).addParameter("foo2", "bar2");
         
         final Event event = action.execute(src);
         
         ActionTestingSupport.assertProceedEvent(event);
         
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
+        assert authCtx != null;
         Assert.assertEquals(authCtx.getAuthenticationStateMap().size(), 2);
         Assert.assertEquals(authCtx.getAuthenticationStateMap().get("foo"), "bar");
         Assert.assertEquals(authCtx.getAuthenticationStateMap().get("foo2"), "bar2");
@@ -108,13 +122,14 @@ public class PreserveAuthenticationFlowStateTest extends BaseAuthenticationConte
     
     @Test public void testMultiValued() {
         
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("foo", new String[]{"bar", "bar2"});
+        getMockHttpServletRequest(action).addParameter("foo", new String[]{"bar", "bar2"});
         
         final Event event = action.execute(src);
         
         ActionTestingSupport.assertProceedEvent(event);
         
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
+        assert authCtx != null;
         Assert.assertEquals(authCtx.getAuthenticationStateMap().size(), 1);
         Assert.assertEquals(authCtx.getAuthenticationStateMap().get("foo"), Arrays.asList("bar", "bar2"));
     }
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/RelyingPartyMapJAASLoginConfigStrategyTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/RelyingPartyMapJAASLoginConfigStrategyTest.java
index b2a5740aa..e025b5692 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/RelyingPartyMapJAASLoginConfigStrategyTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/RelyingPartyMapJAASLoginConfigStrategyTest.java
@@ -19,6 +19,7 @@ package net.shibboleth.idp.authn.impl;
 
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.Map;
 
 import javax.security.auth.Subject;
 
@@ -45,6 +46,8 @@ public class RelyingPartyMapJAASLoginConfigStrategyTest {
     private String entityID = "https://www.example.org/saml";
 
     private HashMap<String, String> rpMap;
+    
+    private Object nullObj;
 
     @BeforeMethod
     public void setUp() {
@@ -62,6 +65,7 @@ public class RelyingPartyMapJAASLoginConfigStrategyTest {
     public void testNoRelyingPartyContext() {
         profileRequestContext.removeSubcontext(RelyingPartyContext.class);
 
+        assert rpMap != null;
         strategy = new RelyingPartyMapJAASLoginConfigStrategy(rpMap);
 
         Collection<Pair<String,Subject>> result = strategy.apply(profileRequestContext);
@@ -76,6 +80,7 @@ public class RelyingPartyMapJAASLoginConfigStrategyTest {
     public void testNoRelyingPartyId() {
         relyingPartyContext.setRelyingPartyId(null);
 
+        assert rpMap != null;
         strategy = new RelyingPartyMapJAASLoginConfigStrategy(rpMap);
 
         Collection<Pair<String,Subject>> result = strategy.apply(profileRequestContext);
@@ -90,6 +95,7 @@ public class RelyingPartyMapJAASLoginConfigStrategyTest {
     public void testNoMappingFound() {
         relyingPartyContext.setRelyingPartyId("SomeOtherRP");
 
+        assert rpMap != null;
         strategy = new RelyingPartyMapJAASLoginConfigStrategy(rpMap);
 
         Collection<Pair<String,Subject>> result = strategy.apply(profileRequestContext);
@@ -102,6 +108,7 @@ public class RelyingPartyMapJAASLoginConfigStrategyTest {
 
     @Test
     public void testMappingFound() {
+        assert rpMap != null;
         strategy = new RelyingPartyMapJAASLoginConfigStrategy(rpMap);
 
         Collection<Pair<String,Subject>> result = strategy.apply(profileRequestContext);
@@ -112,9 +119,10 @@ public class RelyingPartyMapJAASLoginConfigStrategyTest {
         Assert.assertEquals(resultPair.getFirst(), "MyJAAS");
     }
 
+    @SuppressWarnings({ "null", "unchecked" })
     @Test(expectedExceptions=ConstraintViolationException.class)
     public void testNullInputMap() {
-        strategy = new RelyingPartyMapJAASLoginConfigStrategy(null);
+        strategy = new RelyingPartyMapJAASLoginConfigStrategy((Map<String, String>) nullObj);
     }
 
 }
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/SelectAuthenticationFlowTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/SelectAuthenticationFlowTest.java
index b454dc0d4..7ecaa84ac 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/SelectAuthenticationFlowTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/SelectAuthenticationFlowTest.java
@@ -24,6 +24,12 @@ import java.util.List;
 
 import javax.security.auth.Subject;
 
+import org.springframework.webflow.execution.Event;
+import org.testng.Assert;
+import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.Test;
+
+import net.shibboleth.idp.authn.AuthenticationFlowDescriptor;
 import net.shibboleth.idp.authn.AuthenticationResult;
 import net.shibboleth.idp.authn.AuthnEventIds;
 import net.shibboleth.idp.authn.context.AuthenticationContext;
@@ -35,11 +41,6 @@ import net.shibboleth.idp.authn.testing.TestPrincipal;
 import net.shibboleth.idp.profile.testing.ActionTestingSupport;
 import net.shibboleth.shared.component.ComponentInitializationException;
 
-import org.springframework.webflow.execution.Event;
-import org.testng.Assert;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
 /** {@link SelectAuthenticationFlow} unit test. */
 public class SelectAuthenticationFlowTest extends BaseAuthenticationContextTest {
     
@@ -54,42 +55,52 @@ public class SelectAuthenticationFlowTest extends BaseAuthenticationContextTest
     
     @Test public void testNoRequestNoneActive() {
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
-        
+        assert authCtx != null;
         final Event event = action.execute(src);
         ActionTestingSupport.assertEvent(event, "test1");
         
         Assert.assertNull(authCtx.getAuthenticationResult());
-        Assert.assertEquals(authCtx.getAttemptedFlow(), authCtx.getPotentialFlows().get(event.getId()));
-        Assert.assertEquals(authCtx.getAttemptedFlow().getId(), "test1");
+        final AuthenticationFlowDescriptor attemptedFlow = authCtx.getAttemptedFlow();
+        assert attemptedFlow != null && event != null;
+
+        Assert.assertEquals(attemptedFlow, authCtx.getPotentialFlows().get(event.getId()));
+        Assert.assertEquals(attemptedFlow.getId(), "test1");
     }
 
     @Test public void testNoRequestNoneActivePassive() {
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
+        assert authCtx != null;
         authCtx.setIsPassive(true);
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertEvent(event, "test2");
         
         Assert.assertNull(authCtx.getAuthenticationResult());
-        Assert.assertEquals(authCtx.getAttemptedFlow(), authCtx.getPotentialFlows().get(event.getId()));
-        Assert.assertEquals(authCtx.getAttemptedFlow().getId(), "test2");
+        final AuthenticationFlowDescriptor attemptedFlow = authCtx.getAttemptedFlow();
+        assert attemptedFlow != null && event != null;
+        Assert.assertEquals(attemptedFlow, authCtx.getPotentialFlows().get(event.getId()));
+        Assert.assertEquals(attemptedFlow.getId(), "test2");
     }
 
     @Test public void testNoRequestNoneActiveIntermediate() {
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
+        assert authCtx != null;
         authCtx.getIntermediateFlows().put("test1", authCtx.getPotentialFlows().get("test1"));
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertEvent(event, "test2");
         
         Assert.assertNull(authCtx.getAuthenticationResult());
-        Assert.assertEquals(authCtx.getAttemptedFlow(), authCtx.getPotentialFlows().get(event.getId()));
-        Assert.assertEquals(authCtx.getAttemptedFlow().getId(), "test2");
+        final AuthenticationFlowDescriptor attemptedFlow = authCtx.getAttemptedFlow();
+        assert attemptedFlow != null && event != null;
+        Assert.assertEquals(attemptedFlow, authCtx.getPotentialFlows().get(event.getId()));
+        Assert.assertEquals(attemptedFlow.getId(), "test2");
     }
     
     @Test public void testNoRequestActive() {
         final AuthenticationResult active = new AuthenticationResult("test2", new Subject());
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
+        assert authCtx != null;
         authCtx.setActiveResults(Arrays.asList(active));
         
         final Event event = action.execute(src);
@@ -101,10 +112,12 @@ public class SelectAuthenticationFlowTest extends BaseAuthenticationContextTest
     @Test public void testNoRequestForced() {
         final AuthenticationResult active = new AuthenticationResult("test2", new Subject());
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
+        assert authCtx != null;
         authCtx.setActiveResults(Arrays.asList(active));
         authCtx.setForceAuthn(true);
         
         final Event event = action.execute(src);
+        assert event != null;
         
         Assert.assertNull(authCtx.getAuthenticationResult());
         Assert.assertEquals(authCtx.getAttemptedFlow(), authCtx.getPotentialFlows().get(event.getId()));
@@ -115,6 +128,7 @@ public class SelectAuthenticationFlowTest extends BaseAuthenticationContextTest
         final RequestedPrincipalContext rpc = new RequestedPrincipalContext();
         rpc.setOperator("exact");
         rpc.setRequestedPrincipals(Arrays.<Principal>asList(new TestPrincipal("foo")));
+        assert authCtx != null;
         authCtx.addSubcontext(rpc, true);
         
         final Event event = action.execute(src);
@@ -127,13 +141,17 @@ public class SelectAuthenticationFlowTest extends BaseAuthenticationContextTest
         final List<Principal> principals = Arrays.<Principal>asList(new TestPrincipal("test3"));
         final PreferredPrincipalContext ppc = new PreferredPrincipalContext();
         ppc.setPreferredPrincipals(principals);
+        assert authCtx != null;
         authCtx.addSubcontext(ppc, true);
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertEvent(event, "test3");
         
         Assert.assertNull(authCtx.getAuthenticationResult());
-        Assert.assertEquals(authCtx.getAttemptedFlow().getId(), "test3");
+        final AuthenticationFlowDescriptor attemptedFlow = authCtx.getAttemptedFlow();
+        assert attemptedFlow != null && event != null;
+
+        Assert.assertEquals(attemptedFlow.getId(), "test3");
     }
 
     @Test public void testPreferredNoneActive() {
@@ -141,6 +159,7 @@ public class SelectAuthenticationFlowTest extends BaseAuthenticationContextTest
         final List<Principal> principals = Arrays.<Principal>asList(new TestPrincipal("test3"));
         final PreferredPrincipalContext ppc = new PreferredPrincipalContext();
         ppc.setPreferredPrincipals(principals);
+        assert authCtx != null;
         authCtx.addSubcontext(ppc, true);
         authCtx.getPotentialFlows().get("test3").setSupportedPrincipals(principals);
         
@@ -148,7 +167,10 @@ public class SelectAuthenticationFlowTest extends BaseAuthenticationContextTest
         ActionTestingSupport.assertEvent(event, "test3");
         
         Assert.assertNull(authCtx.getAuthenticationResult());
-        Assert.assertEquals(authCtx.getAttemptedFlow().getId(), "test3");
+        final AuthenticationFlowDescriptor attemptedFlow = authCtx.getAttemptedFlow();
+        assert attemptedFlow != null;
+
+        Assert.assertEquals(attemptedFlow.getId(), "test3");
     }
     
     @Test public void testPreferredPickActiveNonMatch() {
@@ -157,6 +179,7 @@ public class SelectAuthenticationFlowTest extends BaseAuthenticationContextTest
                 new TestPrincipal("test2"));
         final PreferredPrincipalContext ppc = new PreferredPrincipalContext();
         ppc.setPreferredPrincipals(principals);
+        assert authCtx != null;
         authCtx.addSubcontext(ppc, true);
         final AuthenticationResult active = new AuthenticationResult("test1", new Subject());
         active.getSubject().getPrincipals().add(new TestPrincipal("test1"));
@@ -175,6 +198,7 @@ public class SelectAuthenticationFlowTest extends BaseAuthenticationContextTest
                 new TestPrincipal("test2"));
         final PreferredPrincipalContext ppc = new PreferredPrincipalContext();
         ppc.setPreferredPrincipals(principals);
+        assert authCtx != null;
         authCtx.addSubcontext(ppc, true);
         final AuthenticationResult active1 = new AuthenticationResult("test1", new Subject());
         final AuthenticationResult active3 = new AuthenticationResult("test3", new Subject());
@@ -197,6 +221,7 @@ public class SelectAuthenticationFlowTest extends BaseAuthenticationContextTest
                 TestPrincipal.class, "exact", new ExactPrincipalEvalPredicateFactory());
         rpc.setOperator("exact");
         rpc.setRequestedPrincipals(principals);
+        assert authCtx != null;
         authCtx.addSubcontext(rpc, true);
         authCtx.getPotentialFlows().get("test3").setSupportedPrincipals(principals);
         
@@ -204,11 +229,14 @@ public class SelectAuthenticationFlowTest extends BaseAuthenticationContextTest
         ActionTestingSupport.assertEvent(event, "test3");
         
         Assert.assertNull(authCtx.getAuthenticationResult());
-        Assert.assertEquals(authCtx.getAttemptedFlow().getId(), "test3");
+        final AuthenticationFlowDescriptor attemptedFlow = authCtx.getAttemptedFlow();
+        assert attemptedFlow != null;
+        Assert.assertEquals(attemptedFlow.getId(), "test3");
     }
 
     @Test public void testRequestNoneActiveIntermediate() {
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
+        assert authCtx != null;
         authCtx.getIntermediateFlows().put("test2", authCtx.getPotentialFlows().get("test2"));
         final List<Principal> principals = Arrays.<Principal>asList(new TestPrincipal("test3"),
                 new TestPrincipal("test2"));
@@ -225,7 +253,10 @@ public class SelectAuthenticationFlowTest extends BaseAuthenticationContextTest
         ActionTestingSupport.assertEvent(event, "test3");
         
         Assert.assertNull(authCtx.getAuthenticationResult());
-        Assert.assertEquals(authCtx.getAttemptedFlow().getId(), "test3");
+        final AuthenticationFlowDescriptor flow = authCtx.getAttemptedFlow();
+        assert flow != null;
+
+        Assert.assertEquals(flow.getId(), "test3");
     }
     
     @Test public void testRequestPickInactive() {
@@ -237,6 +268,7 @@ public class SelectAuthenticationFlowTest extends BaseAuthenticationContextTest
                 TestPrincipal.class, "exact", new ExactPrincipalEvalPredicateFactory());
         rpc.setOperator("exact");
         rpc.setRequestedPrincipals(principals);
+        assert authCtx != null;
         authCtx.addSubcontext(rpc, true);
         final AuthenticationResult active = new AuthenticationResult("test2", new Subject());
         active.getSubject().getPrincipals().add(new TestPrincipal("test2"));
@@ -259,6 +291,7 @@ public class SelectAuthenticationFlowTest extends BaseAuthenticationContextTest
                 TestPrincipal.class, "exact", new ExactPrincipalEvalPredicateFactory());
         rpc.setOperator("exact");
         rpc.setRequestedPrincipals(principals);
+        assert authCtx != null;
         authCtx.addSubcontext(rpc, true);
         final AuthenticationResult active = new AuthenticationResult("test3", new Subject());
         active.getSubject().getPrincipals().add(new TestPrincipal("test3"));
@@ -273,6 +306,7 @@ public class SelectAuthenticationFlowTest extends BaseAuthenticationContextTest
 
     @Test public void testRequestFavorSSO() throws ComponentInitializationException {
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
+        assert authCtx != null;
         final List<Principal> principals = Arrays.<Principal>asList(new TestPrincipal("test3"),
                 new TestPrincipal("test2"));
         final RequestedPrincipalContext rpc = new RequestedPrincipalContext();
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/SelectSubjectCanonicalizationFlowTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/SelectSubjectCanonicalizationFlowTest.java
index 930723f50..1b32130a7 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/SelectSubjectCanonicalizationFlowTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/SelectSubjectCanonicalizationFlowTest.java
@@ -17,15 +17,15 @@
 
 package net.shibboleth.idp.authn.impl;
 
-import net.shibboleth.idp.authn.context.SubjectCanonicalizationContext;
-
 import org.opensaml.profile.context.ProfileRequestContext;
 import org.springframework.webflow.execution.Event;
 import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
-import com.google.common.base.Predicates;
+import net.shibboleth.idp.authn.SubjectCanonicalizationFlowDescriptor;
+import net.shibboleth.idp.authn.context.SubjectCanonicalizationContext;
+import net.shibboleth.shared.logic.PredicateSupport;
 
 /** {@link SelectSubjectCanonicalizationFlow} unit test. */
 public class SelectSubjectCanonicalizationFlowTest extends PopulateSubjectCanonicalizationContextTest {
@@ -46,9 +46,12 @@ public class SelectSubjectCanonicalizationFlowTest extends PopulateSubjectCanoni
     @Test public void testSelect() {
         
         final Event event = action.execute(src);
+        assert event != null;
         
+        final SubjectCanonicalizationFlowDescriptor flow = c14nCtx.getAttemptedFlow();
+        assert flow != null;
         Assert.assertEquals(c14nCtx.getAttemptedFlow(), c14nCtx.getPotentialFlows().get(event.getId()));
-        Assert.assertEquals(c14nCtx.getAttemptedFlow().getId(), "test1");
+        Assert.assertEquals(flow.getId(), "test1");
     }
 
     @Test public void testIntermediate() {
@@ -56,17 +59,21 @@ public class SelectSubjectCanonicalizationFlowTest extends PopulateSubjectCanoni
         
         final Event event = action.execute(src);
         
+        final SubjectCanonicalizationFlowDescriptor flow = c14nCtx.getAttemptedFlow();
+        assert flow != null && event != null;
         Assert.assertEquals(c14nCtx.getAttemptedFlow(), c14nCtx.getPotentialFlows().get(event.getId()));
-        Assert.assertEquals(c14nCtx.getAttemptedFlow().getId(), "test2");
+        Assert.assertEquals(flow.getId(), "test2");
     }
 
     @Test public void testPredicate() {
-        c14nCtx.getPotentialFlows().get("test1").setActivationCondition(Predicates.<ProfileRequestContext>alwaysFalse());
+        c14nCtx.getPotentialFlows().get("test1").setActivationCondition(PredicateSupport.<ProfileRequestContext>alwaysFalse());
         
         final Event event = action.execute(src);
+        final SubjectCanonicalizationFlowDescriptor flow = c14nCtx.getAttemptedFlow();
+        assert flow != null && event != null;
         
         Assert.assertEquals(c14nCtx.getAttemptedFlow(), c14nCtx.getPotentialFlows().get(event.getId()));
-        Assert.assertEquals(c14nCtx.getAttemptedFlow().getId(), "test2");
+        Assert.assertEquals(flow.getId(), "test2");
     }
 
 }
\ No newline at end of file
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/SimpleSubjectCanonicalizationTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/SimpleSubjectCanonicalizationTest.java
index dc028cd23..02443fe0e 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/SimpleSubjectCanonicalizationTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/SimpleSubjectCanonicalizationTest.java
@@ -55,47 +55,53 @@ public class SimpleSubjectCanonicalizationTest extends BaseAuthenticationContext
 
     @Test public void testNoPrincipal() {
         Subject subject = new Subject();
-        prc.getSubcontext(SubjectCanonicalizationContext.class, true).setSubject(subject);
+        prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class).setSubject(subject);
         
         final Event event = action.execute(src);
         
         ActionTestingSupport.assertEvent(event, AuthnEventIds.INVALID_SUBJECT);
-        Assert.assertNotNull(prc.getSubcontext(SubjectCanonicalizationContext.class, false).getException());
+        final SubjectCanonicalizationContext scc = prc.getSubcontext(SubjectCanonicalizationContext.class);
+        assert scc != null;
+        Assert.assertNotNull(scc.getException());
     }
 
     @Test public void testMultiPrincipals() {
         Subject subject = new Subject();
         subject.getPrincipals().add(new UsernamePrincipal("foo"));
         subject.getPrincipals().add(new UsernamePrincipal("bar"));
-        prc.getSubcontext(SubjectCanonicalizationContext.class, true).setSubject(subject);
+        prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class).setSubject(subject);
         
         final Event event = action.execute(src);
         
         ActionTestingSupport.assertEvent(event, AuthnEventIds.INVALID_SUBJECT);
-        Assert.assertNotNull(prc.getSubcontext(SubjectCanonicalizationContext.class, false).getException());
+        final SubjectCanonicalizationContext scc = prc.getSubcontext(SubjectCanonicalizationContext.class);
+        assert scc != null;
+        Assert.assertNotNull(scc.getException());
     }
 
     @Test public void testSuccess() {
         Subject subject = new Subject();
         subject.getPrincipals().add(new UsernamePrincipal("foo"));
-        prc.getSubcontext(SubjectCanonicalizationContext.class, true).setSubject(subject);
+        prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class).setSubject(subject);
         
         final Event event = action.execute(src);
         
         ActionTestingSupport.assertProceedEvent(event);
         SubjectCanonicalizationContext sc = prc.getSubcontext(SubjectCanonicalizationContext.class, false);
+        assert sc != null;
         Assert.assertEquals(sc.getPrincipalName(), "foo");
     }
 
     @Test public void testTransform() {
         Subject subject = new Subject();
         subject.getPrincipals().add(new UsernamePrincipal("foo at osu.edu"));
-        prc.getSubcontext(SubjectCanonicalizationContext.class, true).setSubject(subject);
+        prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class).setSubject(subject);
         
         final Event event = action.execute(src);
         
         ActionTestingSupport.assertProceedEvent(event);
         SubjectCanonicalizationContext sc = prc.getSubcontext(SubjectCanonicalizationContext.class, false);
+        assert sc != null;
         Assert.assertEquals(sc.getPrincipalName(), "foo");
     }
     
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/StorageBackedAccountLockoutManagerTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/StorageBackedAccountLockoutManagerTest.java
index 3e814eec4..9cf1cb76f 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/StorageBackedAccountLockoutManagerTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/StorageBackedAccountLockoutManagerTest.java
@@ -59,11 +59,16 @@ public class StorageBackedAccountLockoutManagerTest extends BaseAuthenticationCo
         manager.initialize();
         
         ((MockHttpServletRequest) src.getExternalContext().getNativeRequest()).setRemoteAddr("192.168.1.1");
-        prc.getSubcontext(AuthenticationContext.class).getSubcontext(UsernamePasswordContext.class, true).setUsername("jdoe");
+        final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
+        assert authCtx != null;
+        authCtx.getOrCreateSubcontext(UsernamePasswordContext.class).setUsername("jdoe");
     }
 
-    @Test public void noKey() {
-        prc.getSubcontext(AuthenticationContext.class).clearSubcontexts();
+    @Test public void noKey() { 
+        final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
+        assert authCtx != null;
+
+        authCtx.clearSubcontexts();
         Assert.assertFalse(manager.check(prc));
         Assert.assertFalse(manager.increment(prc));
         Assert.assertFalse(manager.clear(prc));
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ValidateCredentialsTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ValidateCredentialsTest.java
index bc616a8c8..f97421c77 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ValidateCredentialsTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ValidateCredentialsTest.java
@@ -27,6 +27,7 @@ import java.util.Map;
 import java.util.Set;
 
 import org.ldaptive.DefaultConnectionFactory;
+import org.ldaptive.auth.AuthenticationResponse;
 import org.ldaptive.auth.AuthenticationResultCode;
 import org.ldaptive.auth.Authenticator;
 import org.ldaptive.auth.SimpleBindAuthenticationHandler;
@@ -112,6 +113,7 @@ public class ValidateCredentialsTest extends BaseAuthenticationContextTest {
 
         final LDAPCredentialValidator ldap = new LDAPCredentialValidator();
         ldap.setId("ldap");
+        assert authenticator != null;
         ldap.setAuthenticator(authenticator);
         ldap.initialize();
 
@@ -135,10 +137,11 @@ public class ValidateCredentialsTest extends BaseAuthenticationContextTest {
     }
 
     @Test public void testBadUsername() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "foo");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "bar");
+        getMockHttpServletRequest(action).addParameter("username", "foo");
+        getMockHttpServletRequest(action).addParameter("password", "bar");
 
         AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         
         action.initialize();
@@ -148,22 +151,26 @@ public class ValidateCredentialsTest extends BaseAuthenticationContextTest {
         final Event event = action.execute(src);
         Assert.assertNull(ac.getAuthenticationResult());
         LDAPResponseContext lrc = ac.getSubcontext(LDAPResponseContext.class);
-        Assert.assertNotNull(lrc.getAuthenticationResponse());
-        Assert.assertEquals(lrc.getAuthenticationResponse().getAuthenticationResultCode(),
+        assert lrc != null;
+        final AuthenticationResponse lar = lrc.getAuthenticationResponse();
+        assert lar != null;
+        Assert.assertEquals(lar.getAuthenticationResultCode(),
                 AuthenticationResultCode.DN_RESOLUTION_FAILURE);
 
         AuthenticationErrorContext aec = ac.getSubcontext(AuthenticationErrorContext.class);
-        Assert.assertNotNull(aec);
+        assert aec != null;
+
         ActionTestingSupport.assertEvent(event, "UnknownUsername");
         Assert.assertEquals(aec.getClassifiedErrors().size(), 1);
         Assert.assertTrue(aec.isClassifiedError("UnknownUsername"));
     }
 
     @Test public void testEmptyPassword() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "PETER_THE_PRINCIPAL");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "");
+        getMockHttpServletRequest(action).addParameter("username", "PETER_THE_PRINCIPAL");
+        getMockHttpServletRequest(action).addParameter("password", "");
 
         AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         
         action.initialize();
@@ -174,17 +181,18 @@ public class ValidateCredentialsTest extends BaseAuthenticationContextTest {
         Assert.assertNull(ac.getAuthenticationResult());
         
         AuthenticationErrorContext aec = ac.getSubcontext(AuthenticationErrorContext.class);
-        Assert.assertNotNull(aec);
+        assert aec != null;
         ActionTestingSupport.assertEvent(event, "InvalidPassword");
         Assert.assertEquals(aec.getClassifiedErrors().size(), 1);
         Assert.assertTrue(aec.isClassifiedError("InvalidPassword"));
     }
 
     @Test public void testBadPassword() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "PETER_THE_PRINCIPAL");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "bar");
+        getMockHttpServletRequest(action).addParameter("username", "PETER_THE_PRINCIPAL");
+        getMockHttpServletRequest(action).addParameter("password", "bar");
 
         AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         
         action.initialize();
@@ -194,12 +202,14 @@ public class ValidateCredentialsTest extends BaseAuthenticationContextTest {
         final Event event = action.execute(src);
         Assert.assertNull(ac.getAuthenticationResult());
         LDAPResponseContext lrc = ac.getSubcontext(LDAPResponseContext.class);
-        Assert.assertNotNull(lrc.getAuthenticationResponse());
-        Assert.assertEquals(lrc.getAuthenticationResponse().getAuthenticationResultCode(),
+        assert lrc != null;
+        final AuthenticationResponse lar = lrc.getAuthenticationResponse();
+        assert lar != null;
+        Assert.assertEquals(lar.getAuthenticationResultCode(),
                 AuthenticationResultCode.AUTHENTICATION_HANDLER_FAILURE);
 
         AuthenticationErrorContext aec = ac.getSubcontext(AuthenticationErrorContext.class);
-        Assert.assertNotNull(aec);
+        assert aec != null;
         ActionTestingSupport.assertEvent(event, "InvalidPassword");
         Assert.assertEquals(aec.getClassifiedErrors().size(), 2);
         Assert.assertTrue(aec.isClassifiedError("InvalidPassword"));
@@ -207,10 +217,11 @@ public class ValidateCredentialsTest extends BaseAuthenticationContextTest {
     }
 
     @Test public void testAuthorized() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "PETER_THE_PRINCIPAL");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "changeit");
+        getMockHttpServletRequest(action).addParameter("username", "PETER_THE_PRINCIPAL");
+        getMockHttpServletRequest(action).addParameter("password", "changeit");
 
         AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         
         action.initialize();
@@ -226,10 +237,12 @@ public class ValidateCredentialsTest extends BaseAuthenticationContextTest {
         Assert.assertNull(aec);
 
         AuthenticationResult result = ac.getAuthenticationResult();
-        Assert.assertNotNull(result);
+        assert result != null;
         LDAPResponseContext lrc = ac.getSubcontext(LDAPResponseContext.class);
-        Assert.assertNotNull(lrc.getAuthenticationResponse());
-        Assert.assertEquals(lrc.getAuthenticationResponse().getAuthenticationResultCode(),
+        assert lrc != null;
+        final AuthenticationResponse lar = lrc.getAuthenticationResponse();
+        assert lar != null;
+        Assert.assertEquals(lar.getAuthenticationResultCode(),
                 AuthenticationResultCode.AUTHENTICATION_HANDLER_SUCCESS);
 
         UsernamePrincipal up = result.getSubject().getPrincipals(UsernamePrincipal.class).iterator().next();
@@ -242,10 +255,11 @@ public class ValidateCredentialsTest extends BaseAuthenticationContextTest {
     }
 
     @Test public void testAuthorized2() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "PETER_THE_PRINCIPAL2");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "changeit");
+        getMockHttpServletRequest(action).addParameter("username", "PETER_THE_PRINCIPAL2");
+        getMockHttpServletRequest(action).addParameter("password", "changeit");
 
         AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         
         action.setCleanupHook(new ValidateCredentials.UsernamePasswordCleanupHook());
@@ -259,28 +273,31 @@ public class ValidateCredentialsTest extends BaseAuthenticationContextTest {
         Assert.assertNull(ac.getSubcontext(UsernamePasswordContext.class));
         
         AuthenticationResult result = ac.getAuthenticationResult();
-        Assert.assertNotNull(result);
+        assert result != null;
         UsernamePrincipal up = result.getSubject().getPrincipals(UsernamePrincipal.class).iterator().next();
         Assert.assertNotNull(up);
         Assert.assertEquals(up.getName(), "PETER_THE_PRINCIPAL2");
         Assert.assertTrue(result.getSubject().getPrincipals(LdapPrincipal.class).isEmpty());
 
         LDAPResponseContext lrc = ac.getSubcontext(LDAPResponseContext.class);
-        Assert.assertNotNull(lrc.getAuthenticationResponse());
-        Assert.assertEquals(lrc.getAuthenticationResponse().getAuthenticationResultCode(),
+        assert lrc != null;
+        final AuthenticationResponse lar = lrc.getAuthenticationResponse();
+        assert lar != null;
+        Assert.assertEquals(lar.getAuthenticationResultCode(),
                 AuthenticationResultCode.DN_RESOLUTION_FAILURE);
 
         AuthenticationErrorContext aec = ac.getSubcontext(AuthenticationErrorContext.class);
-        Assert.assertNotNull(aec);
+        assert aec != null;
         Assert.assertEquals(aec.getClassifiedErrors().size(), 1);
         Assert.assertTrue(aec.isClassifiedError("UnknownUsername"));
     }
     
     @Test public void testBadPassword2() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "PETER_THE_PRINCIPAL2");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "changeit");
+        getMockHttpServletRequest(action).addParameter("username", "PETER_THE_PRINCIPAL2");
+        getMockHttpServletRequest(action).addParameter("password", "changeit");
 
         AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         
         action.setRequireAll(true);
@@ -291,22 +308,25 @@ public class ValidateCredentialsTest extends BaseAuthenticationContextTest {
         final Event event = action.execute(src);
         Assert.assertNull(ac.getAuthenticationResult());
         LDAPResponseContext lrc = ac.getSubcontext(LDAPResponseContext.class);
-        Assert.assertNotNull(lrc.getAuthenticationResponse());
-        Assert.assertEquals(lrc.getAuthenticationResponse().getAuthenticationResultCode(),
+        assert lrc != null;
+        final AuthenticationResponse lar = lrc.getAuthenticationResponse();
+        assert lar != null;
+        Assert.assertEquals(lar.getAuthenticationResultCode(),
                 AuthenticationResultCode.DN_RESOLUTION_FAILURE);
 
         AuthenticationErrorContext aec = ac.getSubcontext(AuthenticationErrorContext.class);
-        Assert.assertNotNull(aec);
+        assert aec != null;
         ActionTestingSupport.assertEvent(event, AuthnEventIds.UNKNOWN_USERNAME);
         Assert.assertEquals(aec.getClassifiedErrors().size(), 1);
         Assert.assertTrue(aec.isClassifiedError(AuthnEventIds.UNKNOWN_USERNAME));
     }
     
     @Test public void testAuthorizedAll() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("username", "PETER_THE_PRINCIPAL");
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("password", "changeit");
+        getMockHttpServletRequest(action).addParameter("username", "PETER_THE_PRINCIPAL");
+        getMockHttpServletRequest(action).addParameter("password", "changeit");
 
         AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         
         action.setRequireAll(true);
@@ -324,10 +344,12 @@ public class ValidateCredentialsTest extends BaseAuthenticationContextTest {
         Assert.assertNull(aec);
         
         AuthenticationResult result = ac.getAuthenticationResult();
-        Assert.assertNotNull(result);
+        assert result != null;
         LDAPResponseContext lrc = ac.getSubcontext(LDAPResponseContext.class);
-        Assert.assertNotNull(lrc.getAuthenticationResponse());
-        Assert.assertEquals(lrc.getAuthenticationResponse().getAuthenticationResultCode(),
+        assert lrc != null;
+        final AuthenticationResponse lar = lrc.getAuthenticationResponse();
+        assert lar != null;
+        Assert.assertEquals(lar.getAuthenticationResultCode(),
                 AuthenticationResultCode.AUTHENTICATION_HANDLER_SUCCESS);
 
         final Set<UsernamePrincipal> ups = result.getSubject().getPrincipals(UsernamePrincipal.class);
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ValidateExternalAuthenticationTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ValidateExternalAuthenticationTest.java
index 08ac556dd..7dba74757 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ValidateExternalAuthenticationTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ValidateExternalAuthenticationTest.java
@@ -30,6 +30,7 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
+import net.shibboleth.idp.authn.AuthenticationResult;
 import net.shibboleth.idp.authn.AuthnEventIds;
 import net.shibboleth.idp.authn.ExternalAuthentication;
 import net.shibboleth.idp.authn.context.AuthenticationContext;
@@ -52,8 +53,9 @@ public class ValidateExternalAuthenticationTest extends BaseAuthenticationContex
     
     @BeforeMethod public void setUp() throws ComponentInitializationException {
         super.setUp();
-        
-        prc.getSubcontext(AuthenticationContext.class).setAttemptedFlow(authenticationFlows.get(0));
+        final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
+        ac.setAttemptedFlow(authenticationFlows.get(0));
         
         ext = new ExternalAuthenticationImpl();
 
@@ -64,7 +66,9 @@ public class ValidateExternalAuthenticationTest extends BaseAuthenticationContex
     }
 
     @Test public void testMissingFlow() {
-        prc.getSubcontext(AuthenticationContext.class).setAttemptedFlow(null);
+        final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
+        ac.setAttemptedFlow(null);
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertEvent(event, AuthnEventIds.INVALID_AUTHN_CTX);
@@ -77,6 +81,7 @@ public class ValidateExternalAuthenticationTest extends BaseAuthenticationContex
 
     @Test public void testNoCredentials() {
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.addSubcontext(new ExternalAuthenticationContext(ext), true);
         
         final Event event = action.execute(src);
@@ -85,34 +90,39 @@ public class ValidateExternalAuthenticationTest extends BaseAuthenticationContex
 
     @Test public void testPrincipalName() {
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         final ExternalAuthenticationContext eac =
                 (ExternalAuthenticationContext) ac.addSubcontext(new ExternalAuthenticationContext(ext), true);
         eac.setPrincipalName("foo");
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
-        Assert.assertNotNull(ac.getAuthenticationResult());
-        Assert.assertFalse(ac.getAuthenticationResult().isPreviousResult());
-        Assert.assertEquals(ac.getAuthenticationResult().getSubject().getPrincipals(
+        final AuthenticationResult ar = ac.getAuthenticationResult();
+        assert ar != null;
+        Assert.assertFalse(ar.isPreviousResult());
+        Assert.assertEquals(ar.getSubject().getPrincipals(
                 UsernamePrincipal.class).iterator().next().getName(), "foo");
     }
     
     @Test public void testPrincipal() {
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         final ExternalAuthenticationContext eac =
                 (ExternalAuthenticationContext) ac.addSubcontext(new ExternalAuthenticationContext(ext), true);
         eac.setPrincipal(new TestPrincipal("foo"));
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
-        Assert.assertNotNull(ac.getAuthenticationResult());
-        Assert.assertFalse(ac.getAuthenticationResult().isPreviousResult());
-        Assert.assertEquals(ac.getAuthenticationResult().getSubject().getPrincipals(
+        final AuthenticationResult ar = ac.getAuthenticationResult();
+        assert ar != null;
+        Assert.assertFalse(ar.isPreviousResult());
+        Assert.assertEquals(ar.getSubject().getPrincipals(
                 TestPrincipal.class).iterator().next().getName(), "foo");
     }
 
     @Test public void testSubject() {
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         final ExternalAuthenticationContext eac =
                 (ExternalAuthenticationContext) ac.addSubcontext(new ExternalAuthenticationContext(ext), true);
         final Subject subject = new Subject();
@@ -121,14 +131,16 @@ public class ValidateExternalAuthenticationTest extends BaseAuthenticationContex
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
-        Assert.assertNotNull(ac.getAuthenticationResult());
-        Assert.assertFalse(ac.getAuthenticationResult().isPreviousResult());
-        Assert.assertEquals(ac.getAuthenticationResult().getSubject().getPrincipals(
+        final AuthenticationResult ar = ac.getAuthenticationResult();
+        assert ar != null;
+        Assert.assertFalse(ar.isPreviousResult());
+        Assert.assertEquals(ar.getSubject().getPrincipals(
                 TestPrincipal.class).iterator().next().getName(), "foo");
     }
 
     @Test public void testAuthnInstant() {
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         final ExternalAuthenticationContext eac =
                 (ExternalAuthenticationContext) ac.addSubcontext(new ExternalAuthenticationContext(ext), true);
         eac.setPrincipalName("foo");
@@ -138,13 +150,15 @@ public class ValidateExternalAuthenticationTest extends BaseAuthenticationContex
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
-        Assert.assertNotNull(ac.getAuthenticationResult());
-        Assert.assertTrue(ac.getAuthenticationResult().isPreviousResult());
-        Assert.assertEquals(ts, ac.getAuthenticationResult().getAuthenticationInstant());
+        final AuthenticationResult ar = ac.getAuthenticationResult();
+        assert ar != null;
+        Assert.assertTrue(ar.isPreviousResult());
+        Assert.assertEquals(ts, ar.getAuthenticationInstant());
     }
 
     @Test public void testAuthnAuthorities() {
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         final ExternalAuthenticationContext eac =
                 (ExternalAuthenticationContext) ac.addSubcontext(new ExternalAuthenticationContext(ext), true);
         eac.setPrincipalName("foo");
@@ -153,29 +167,32 @@ public class ValidateExternalAuthenticationTest extends BaseAuthenticationContex
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
-        Assert.assertNotNull(ac.getAuthenticationResult());
-        Assert.assertTrue(ac.getAuthenticationResult().isPreviousResult());
+        final AuthenticationResult ar = ac.getAuthenticationResult();
+        assert ar != null;
+        Assert.assertTrue(ar.isPreviousResult());
         final Set<ProxyAuthenticationPrincipal> prin =
-                ac.getAuthenticationResult().getSubject().getPrincipals(ProxyAuthenticationPrincipal.class);
+                ar.getSubject().getPrincipals(ProxyAuthenticationPrincipal.class);
         Assert.assertEquals(prin.size(), 1);
         Assert.assertEquals(prin.iterator().next().getAuthorities(), Arrays.asList("foo", "bar", "baz"));
     }
 
     @Test public void testException() {
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         final ExternalAuthenticationContext eac =
                 (ExternalAuthenticationContext) ac.addSubcontext(new ExternalAuthenticationContext(ext), true);
         eac.setAuthnException(new LoginException("foo"));
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertEvent(event, AuthnEventIds.AUTHN_EXCEPTION);
-        Assert.assertNull(ac.getAuthenticationResult());
-        Assert.assertNotNull(ac.getSubcontext(AuthenticationErrorContext.class));
-        Assert.assertEquals(ac.getSubcontext(AuthenticationErrorContext.class).getExceptions().size(), 1);
+        final AuthenticationErrorContext aec = ac.getSubcontext(AuthenticationErrorContext.class);
+        assert aec != null;
+        Assert.assertEquals(aec.getExceptions().size(), 1);
     }
 
     @Test public void testError() {
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         final ExternalAuthenticationContext eac =
                 (ExternalAuthenticationContext) ac.addSubcontext(new ExternalAuthenticationContext(ext), true);
         eac.setAuthnError("foo");
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ValidateFunctionResultTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ValidateFunctionResultTest.java
index abd1fa32c..9fa8b8560 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ValidateFunctionResultTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ValidateFunctionResultTest.java
@@ -21,6 +21,7 @@ import java.security.Principal;
 
 import javax.security.auth.Subject;
 
+import net.shibboleth.idp.authn.AuthenticationResult;
 import net.shibboleth.idp.authn.AuthnEventIds;
 import net.shibboleth.idp.authn.context.AuthenticationContext;
 import net.shibboleth.idp.authn.impl.testing.BaseAuthenticationContextTest;
@@ -45,14 +46,17 @@ public class ValidateFunctionResultTest extends BaseAuthenticationContextTest {
     
     @BeforeMethod public void setUp() throws ComponentInitializationException {
         super.setUp();
-        
-        prc.getSubcontext(AuthenticationContext.class).setAttemptedFlow(authenticationFlows.get(0));
+        final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
+        ac.setAttemptedFlow(authenticationFlows.get(0));
 
         action = new ValidateFunctionResult();
     }
 
     @Test public void testMissingFlow() throws ComponentInitializationException {
-        prc.getSubcontext(AuthenticationContext.class).setAttemptedFlow(null);
+        final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
+        ac.setAttemptedFlow(null);
         
         action.setResultLookupStrategy(FunctionSupport.<ProfileRequestContext,Object>constant(null));
         action.initialize();
@@ -87,9 +91,11 @@ public class ValidateFunctionResultTest extends BaseAuthenticationContextTest {
         ActionTestingSupport.assertProceedEvent(event);
         
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
-        Assert.assertNotNull(ac.getAuthenticationResult());
-        Assert.assertFalse(ac.getAuthenticationResult().isPreviousResult());
-        Assert.assertEquals(ac.getAuthenticationResult().getSubject().getPrincipals(
+        assert ac != null;
+        final AuthenticationResult ar = ac.getAuthenticationResult();
+        assert ar != null;
+        Assert.assertFalse(ar.isPreviousResult());
+        Assert.assertEquals(ar.getSubject().getPrincipals(
                 UsernamePrincipal.class).iterator().next().getName(), "foo");
     }
     
@@ -101,9 +107,11 @@ public class ValidateFunctionResultTest extends BaseAuthenticationContextTest {
         ActionTestingSupport.assertProceedEvent(event);
 
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
-        Assert.assertNotNull(ac.getAuthenticationResult());
-        Assert.assertFalse(ac.getAuthenticationResult().isPreviousResult());
-        Assert.assertEquals(ac.getAuthenticationResult().getSubject().getPrincipals(
+        assert ac != null;
+        final AuthenticationResult ar = ac.getAuthenticationResult();
+        assert ar != null;
+        Assert.assertFalse(ar.isPreviousResult());
+        Assert.assertEquals(ar.getSubject().getPrincipals(
                 TestPrincipal.class).iterator().next().getName(), "foo");
     }
 
@@ -118,9 +126,11 @@ public class ValidateFunctionResultTest extends BaseAuthenticationContextTest {
         ActionTestingSupport.assertProceedEvent(event);
 
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
-        Assert.assertNotNull(ac.getAuthenticationResult());
-        Assert.assertFalse(ac.getAuthenticationResult().isPreviousResult());
-        Assert.assertEquals(ac.getAuthenticationResult().getSubject().getPrincipals(
+        assert ac != null;
+        final AuthenticationResult ar = ac.getAuthenticationResult();
+        assert ar != null;
+        Assert.assertFalse(ar.isPreviousResult());
+        Assert.assertEquals(ar.getSubject().getPrincipals(
                 TestPrincipal.class).iterator().next().getName(), "foo");
     }
 
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ValidateRemoteUserTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ValidateRemoteUserTest.java
index 90cfe64ba..e399c4528 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ValidateRemoteUserTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ValidateRemoteUserTest.java
@@ -27,6 +27,7 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
+import net.shibboleth.idp.authn.AuthenticationResult;
 import net.shibboleth.idp.authn.AuthnEventIds;
 import net.shibboleth.idp.authn.context.AuthenticationContext;
 import net.shibboleth.idp.authn.impl.testing.BaseAuthenticationContextTest;
@@ -58,13 +59,16 @@ public class ValidateRemoteUserTest extends BaseAuthenticationContextTest {
     }
     
     @Test public void testMissingUser() {
-        prc.getSubcontext(AuthenticationContext.class, false).setAttemptedFlow(authenticationFlows.get(0));
+        final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
+        ac.setAttemptedFlow(authenticationFlows.get(0));
         final Event event = action.execute(src);
         ActionTestingSupport.assertEvent(event, AuthnEventIds.NO_CREDENTIALS);
     }
 
     @Test public void testMissingUser2() throws ComponentInitializationException {
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class, false);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         
         doExtract();
@@ -74,9 +78,10 @@ public class ValidateRemoteUserTest extends BaseAuthenticationContextTest {
     }
 
     @Test public void testUnauthorized() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).setRemoteUser("bam");
+        getMockHttpServletRequest(action).setRemoteUser("bam");
 
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class, false);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         
         doExtract();
@@ -86,24 +91,27 @@ public class ValidateRemoteUserTest extends BaseAuthenticationContextTest {
     }
 
     @Test public void testAuthorized() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).setRemoteUser("baz");
+        getMockHttpServletRequest(action).setRemoteUser("baz");
         
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class, false);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         
         doExtract();
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
-        Assert.assertNotNull(ac.getAuthenticationResult());
-        Assert.assertEquals(ac.getAuthenticationResult().getSubject().getPrincipals(
+        final AuthenticationResult ar = ac.getAuthenticationResult();
+        assert ar != null;
+        Assert.assertEquals(ar.getSubject().getPrincipals(
                 UsernamePrincipal.class).iterator().next().getName(), "baz");
     }
 
     @Test public void testDenyist() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).setRemoteUser("foo");
+        getMockHttpServletRequest(action).setRemoteUser("foo");
 
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class, false);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         
         doExtract();
@@ -113,17 +121,19 @@ public class ValidateRemoteUserTest extends BaseAuthenticationContextTest {
     }
     
     @Test public void testPattern() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).setRemoteUser("ban");
+        getMockHttpServletRequest(action).setRemoteUser("ban");
 
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class, false);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         
         doExtract();
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
-        Assert.assertNotNull(ac.getAuthenticationResult());
-        Assert.assertEquals(ac.getAuthenticationResult().getSubject().getPrincipals(
+        final AuthenticationResult ar = ac.getAuthenticationResult();
+        assert ar != null;
+        Assert.assertEquals(ar.getSubject().getPrincipals(
                 UsernamePrincipal.class).iterator().next().getName(), "ban");
     }
     
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ValidateUserAgentAddressTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ValidateUserAgentAddressTest.java
index 62c62d7fa..909459f86 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ValidateUserAgentAddressTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ValidateUserAgentAddressTest.java
@@ -29,6 +29,7 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
+import net.shibboleth.idp.authn.AuthenticationResult;
 import net.shibboleth.idp.authn.AuthnEventIds;
 import net.shibboleth.idp.authn.context.AuthenticationContext;
 import net.shibboleth.idp.authn.context.RequestedPrincipalContext;
@@ -46,6 +47,8 @@ public class ValidateUserAgentAddressTest extends BaseAuthenticationContextTest
     
     private ValidateUserAgentAddress action; 
     
+    private Object nullObj;
+    
     @BeforeMethod public void setUp() throws ComponentInitializationException {
         super.setUp();
         
@@ -64,15 +67,19 @@ public class ValidateUserAgentAddressTest extends BaseAuthenticationContextTest
     }
     
     @Test public void testMissingAddress() {
-        prc.getSubcontext(AuthenticationContext.class, false).setAttemptedFlow(authenticationFlows.get(0));
+        final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
+        ac.setAttemptedFlow(authenticationFlows.get(0));
         final Event event = action.execute(src);
         ActionTestingSupport.assertEvent(event, AuthnEventIds.NO_CREDENTIALS);
     }
 
+    @SuppressWarnings("null")
     @Test public void testMissingAddress2() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).setRemoteAddr(null);
+        getMockHttpServletRequest(action).setRemoteAddr((String) nullObj);
 
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class, false);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         
         doExtract();
@@ -83,6 +90,7 @@ public class ValidateUserAgentAddressTest extends BaseAuthenticationContextTest
 
     @Test public void testUnauthorized() throws ComponentInitializationException {
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class, false);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         
         doExtract();
@@ -92,9 +100,10 @@ public class ValidateUserAgentAddressTest extends BaseAuthenticationContextTest
     }
 
     @Test public void testIncompatible() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).setRemoteAddr("192.168.1.1");
+        getMockHttpServletRequest(action).setRemoteAddr("192.168.1.1");
 
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class, false);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         
         final RequestedPrincipalContext rpc = new RequestedPrincipalContext();
@@ -111,9 +120,10 @@ public class ValidateUserAgentAddressTest extends BaseAuthenticationContextTest
     }
 
     @Test public void testCompatible() throws ComponentInitializationException {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).setRemoteAddr("192.168.1.1");
+        getMockHttpServletRequest(action).setRemoteAddr("192.168.1.1");
 
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class, false);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         
         final RequestedPrincipalContext rpc = new RequestedPrincipalContext();
@@ -127,8 +137,9 @@ public class ValidateUserAgentAddressTest extends BaseAuthenticationContextTest
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
-        Assert.assertNotNull(ac.getAuthenticationResult());
-        Assert.assertEquals(ac.getAuthenticationResult().getSubject().getPrincipals(
+        final AuthenticationResult ar = ac.getAuthenticationResult();
+        assert ar != null;
+        Assert.assertEquals(ar.getSubject().getPrincipals(
                 UsernamePrincipal.class).iterator().next().getName(), "foo");
     }
     
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/X500SubjectCanonicalizationTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/X500SubjectCanonicalizationTest.java
index f1d7b1cec..6ccc4bda2 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/X500SubjectCanonicalizationTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/X500SubjectCanonicalizationTest.java
@@ -56,107 +56,117 @@ public class X500SubjectCanonicalizationTest extends BaseAuthenticationContextTe
 
     @Test public void testNoPrincipal() {
         final Subject subject = new Subject();
-        prc.getSubcontext(SubjectCanonicalizationContext.class, true).setSubject(subject);
+        prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class).setSubject(subject);
         
         final Event event = action.execute(src);
         
         ActionTestingSupport.assertEvent(event, AuthnEventIds.INVALID_SUBJECT);
-        Assert.assertNotNull(prc.getSubcontext(SubjectCanonicalizationContext.class).getException());
+        final SubjectCanonicalizationContext scc = prc.getSubcontext(SubjectCanonicalizationContext.class);
+        assert scc != null;
+        Assert.assertNotNull(scc.getException());
     }
 
     @Test public void testMultiPrincipals() {
         final Subject subject = new Subject();
         subject.getPrincipals().add(new X500Principal("CN=foo"));
         subject.getPrincipals().add(new X500Principal("CN=bar"));
-        prc.getSubcontext(SubjectCanonicalizationContext.class, true).setSubject(subject);
+        prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class).setSubject(subject);
         
         final Event event = action.execute(src);
         
         ActionTestingSupport.assertEvent(event, AuthnEventIds.INVALID_SUBJECT);
-        Assert.assertNotNull(prc.getSubcontext(SubjectCanonicalizationContext.class).getException());
+        final SubjectCanonicalizationContext scc = prc.getSubcontext(SubjectCanonicalizationContext.class);
+        assert scc != null;
+        Assert.assertNotNull(scc.getException());
     }
 
     @Test public void testNone() {
         final Subject subject = new Subject();
         subject.getPrincipals().add(new X500Principal("CN=foo at example.edu"));
-        prc.getSubcontext(SubjectCanonicalizationContext.class, true).setSubject(subject);
+        prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class).setSubject(subject);
         
         final Event event = action.execute(src);
         
         ActionTestingSupport.assertEvent(event, AuthnEventIds.INVALID_SUBJECT);
         final SubjectCanonicalizationContext sc = prc.getSubcontext(SubjectCanonicalizationContext.class);
-        Assert.assertNull(sc.getPrincipalName());
+        assert sc!= null && sc.getPrincipalName() ==null;
     }
     
     @Test public void testSuccess() {
         final Subject subject = new Subject();
         subject.getPrincipals().add(new X500Principal("EMAILADDRESS=foo at example.edu"));
-        prc.getSubcontext(SubjectCanonicalizationContext.class, true).setSubject(subject);
+        prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class).setSubject(subject);
         
         final Event event = action.execute(src);
         
         ActionTestingSupport.assertProceedEvent(event);
         final SubjectCanonicalizationContext sc = prc.getSubcontext(SubjectCanonicalizationContext.class);
+        assert sc != null;
         Assert.assertEquals(sc.getPrincipalName(), "foo at example.edu");
     }
 
     @Test public void testComplex() {
         final Subject subject = new Subject();
         subject.getPrincipals().add(new X500Principal("EMAILADDRESS=foo at example.edu\\, EMAILADDRESS=bar at example.edu"));
-        prc.getSubcontext(SubjectCanonicalizationContext.class, true).setSubject(subject);
+        prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class).setSubject(subject);
         
         final Event event = action.execute(src);
         
         ActionTestingSupport.assertProceedEvent(event);
         final SubjectCanonicalizationContext sc = prc.getSubcontext(SubjectCanonicalizationContext.class);
+        assert sc != null;
         Assert.assertEquals(sc.getPrincipalName(), "foo at example.edu, EMAILADDRESS=bar at example.edu");
     }
     
     @Test public void testTransform() {
         final Subject subject = new Subject();
         subject.getPrincipals().add(new X500Principal("EMAILADDRESS=foo at osu.edu"));
-        prc.getSubcontext(SubjectCanonicalizationContext.class, true).setSubject(subject);
+        prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class).setSubject(subject);
         
         final Event event = action.execute(src);
         
         ActionTestingSupport.assertProceedEvent(event);
         final SubjectCanonicalizationContext sc = prc.getSubcontext(SubjectCanonicalizationContext.class);
+        assert sc != null;
         Assert.assertEquals(sc.getPrincipalName(), "foo");
     }
     
     @Test public void testMultipleTypes() {
         final Subject subject = new Subject();
         subject.getPrincipals().add(new X500Principal("EMAILADDRESS=foo at example.edu, 0.9.2342.19200300.100.1.1=bar at example.edu"));
-        prc.getSubcontext(SubjectCanonicalizationContext.class, true).setSubject(subject);
+        prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class).setSubject(subject);
         
         final Event event = action.execute(src);
         
         ActionTestingSupport.assertProceedEvent(event);
         final SubjectCanonicalizationContext sc = prc.getSubcontext(SubjectCanonicalizationContext.class);
+        assert sc != null;
         Assert.assertEquals(sc.getPrincipalName(), "foo at example.edu");
     }
 
     @Test public void testMultipleValues() {
         final Subject subject = new Subject();
         subject.getPrincipals().add(new X500Principal("EMAILADDRESS=foo at example.edu, EMAILADDRESS=bar at example.edu"));
-        prc.getSubcontext(SubjectCanonicalizationContext.class, true).setSubject(subject);
+        prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class).setSubject(subject);
         
         final Event event = action.execute(src);
         
         ActionTestingSupport.assertProceedEvent(event);
         final SubjectCanonicalizationContext sc = prc.getSubcontext(SubjectCanonicalizationContext.class);
+        assert sc != null;
         Assert.assertEquals(sc.getPrincipalName(), "foo at example.edu");
     }
 
     @Test public void testSecondary() {
         final Subject subject = new Subject();
         subject.getPrincipals().add(new X500Principal("0.9.2342.19200300.100.1.1=bar at example.edu"));
-        prc.getSubcontext(SubjectCanonicalizationContext.class, true).setSubject(subject);
+        prc.getOrCreateSubcontext(SubjectCanonicalizationContext.class).setSubject(subject);
         
         final Event event = action.execute(src);
         
         ActionTestingSupport.assertProceedEvent(event);
-        final SubjectCanonicalizationContext sc = prc.getSubcontext(SubjectCanonicalizationContext.class);
-        Assert.assertEquals(sc.getPrincipalName(), "bar at example.edu");
+        final SubjectCanonicalizationContext scc = prc.getSubcontext(SubjectCanonicalizationContext.class);
+        assert scc != null;
+        Assert.assertEquals(scc.getPrincipalName(), "bar at example.edu");
     }
 }
\ No newline at end of file
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/X509CertificateCredentialValidatorTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/X509CertificateCredentialValidatorTest.java
index 739f7ef11..a3671556e 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/X509CertificateCredentialValidatorTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/X509CertificateCredentialValidatorTest.java
@@ -22,6 +22,7 @@ import java.security.cert.CertificateException;
 import java.security.cert.X509Certificate;
 import java.util.Collections;
 
+import javax.annotation.Nonnull;
 import javax.security.auth.x500.X500Principal;
 
 import org.opensaml.security.credential.CredentialResolver;
@@ -37,6 +38,9 @@ import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
+import com.unboundid.util.NotNull;
+
+import net.shibboleth.idp.authn.AuthenticationResult;
 import net.shibboleth.idp.authn.AuthnEventIds;
 import net.shibboleth.idp.authn.context.AuthenticationContext;
 import net.shibboleth.idp.authn.impl.testing.BaseAuthenticationContextTest;
@@ -47,7 +51,7 @@ import net.shibboleth.shared.testing.ConstantSupplier;
 /** {@link X509CertificateCredentialValidator} unit test. */
 public class X509CertificateCredentialValidatorTest extends BaseAuthenticationContextTest {
     
-    private String entityCertBase64 = 
+    @Nonnull final private String entityCertBase64 = 
             "MIIDjDCCAnSgAwIBAgIBKjANBgkqhkiG9w0BAQUFADAtMRIwEAYDVQQKEwlJbnRl" +
             "cm5ldDIxFzAVBgNVBAMTDmNhLmV4YW1wbGUub3JnMB4XDTA3MDQwOTA2MTIwOVoX" +
             "DTE3MDQwNjA2MTIwOVowMTESMBAGA1UEChMJSW50ZXJuZXQyMRswGQYDVQQDExJm" +
@@ -68,7 +72,7 @@ public class X509CertificateCredentialValidatorTest extends BaseAuthenticationCo
             "uLdeRCZmi93vq1D4JVGsXC4UaHjg114+a+9q0XZdz6a1UW4pt1ryXIPotCS62M71" +
             "pkJf5neHUinKAqgoRfPXowudZg1Zl8DjzoOBn+MNHRrR5KYbVGvdHcxoJLCwVB/v";
     
-    private String otherCert1Base64 = 
+    @NotNull final private String otherCert1Base64 = 
             "MIIECTCCAvGgAwIBAgIBMzANBgkqhkiG9w0BAQUFADAtMRIwEAYDVQQKEwlJbnRl" +
             "cm5ldDIxFzAVBgNVBAMTDmNhLmV4YW1wbGUub3JnMB4XDTA3MDUyNTIwMTYxMVoX" +
             "DTE3MDUyMjIwMTYxMVowGjEYMBYGA1UEAxMPaWRwLmV4YW1wbGUub3JnMIIBtjCC" +
@@ -114,7 +118,9 @@ public class X509CertificateCredentialValidatorTest extends BaseAuthenticationCo
     }
     
     @Test public void testMissingCert() throws ComponentInitializationException {
-        prc.getSubcontext(AuthenticationContext.class).setAttemptedFlow(authenticationFlows.get(0));
+        AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
+        ac.setAttemptedFlow(authenticationFlows.get(0));
         
         validator.initialize();
         
@@ -125,10 +131,11 @@ public class X509CertificateCredentialValidatorTest extends BaseAuthenticationCo
     @Test public void testNoTrustEngine() throws ComponentInitializationException, CertificateException {
         final X509Certificate entityCert = X509Support.decodeCertificate(entityCertBase64);
         final X509Certificate[] certs = new X509Certificate[]{entityCert};
-        ((MockHttpServletRequest) action.getHttpServletRequest()).setAttribute("jakarta.servlet.request.X509Certificate", certs);
+        getMockHttpServletRequest(action).setAttribute("jakarta.servlet.request.X509Certificate", certs);
 
         
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
 
         validator.initialize();
@@ -137,33 +144,36 @@ public class X509CertificateCredentialValidatorTest extends BaseAuthenticationCo
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
-        Assert.assertNotNull(ac.getAuthenticationResult());
-        Assert.assertEquals(ac.getAuthenticationResult().getSubject().getPrincipals(
+        final AuthenticationResult ar = ac.getAuthenticationResult();
+        assert ar != null;
+        Assert.assertEquals(ar.getSubject().getPrincipals(
                 X500Principal.class).iterator().next().getName(), "CN=foobar.example.org,O=Internet2");
     }
 
     @Test public void testTrustEngineSuccess() throws ComponentInitializationException, CertificateException {
         final X509Certificate entityCert = X509Support.decodeCertificate(entityCertBase64);
         final X509Certificate[] certs = new X509Certificate[]{entityCert};
-
+        assert entityCert != null;
         final CredentialResolver resolver = new StaticCredentialResolver(new BasicX509Credential(entityCert));
         final TrustEngine<X509Credential> engine = new ExplicitX509CertificateTrustEngine(resolver);
         
         validator.setTrustEngine(engine);
         validator.initialize();
 
-        ((MockHttpServletRequest) action.getHttpServletRequest()).setAttribute("jakarta.servlet.request.X509Certificate", certs);
+        getMockHttpServletRequest(action).setAttribute("jakarta.servlet.request.X509Certificate", certs);
 
         
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         
         doExtract();
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
-        Assert.assertNotNull(ac.getAuthenticationResult());
-        Assert.assertEquals(ac.getAuthenticationResult().getSubject().getPrincipals(
+        final AuthenticationResult ar = ac.getAuthenticationResult();
+        assert ar != null;
+        Assert.assertEquals(ar.getSubject().getPrincipals(
                 X500Principal.class).iterator().next().getName(), "CN=foobar.example.org,O=Internet2");
     }
 
@@ -172,6 +182,7 @@ public class X509CertificateCredentialValidatorTest extends BaseAuthenticationCo
         final X509Certificate[] certs = new X509Certificate[]{entityCert};
 
         final X509Certificate otherCert1 = X509Support.decodeCertificate(otherCert1Base64);
+        assert otherCert1 != null;
         
         final CredentialResolver resolver = new StaticCredentialResolver(new BasicX509Credential(otherCert1));
         final TrustEngine<X509Credential> engine = new ExplicitX509CertificateTrustEngine(resolver);
@@ -179,9 +190,10 @@ public class X509CertificateCredentialValidatorTest extends BaseAuthenticationCo
         validator.setTrustEngine(engine);
         validator.initialize();
         
-        ((MockHttpServletRequest) action.getHttpServletRequest()).setAttribute("jakarta.servlet.request.X509Certificate", certs);
+        getMockHttpServletRequest(action).setAttribute("jakarta.servlet.request.X509Certificate", certs);
 
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(authenticationFlows.get(0));
         
         doExtract();
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/testing/BaseAuthenticationContextTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/testing/BaseAuthenticationContextTest.java
index cecffb1ba..d55dfb4a1 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/testing/BaseAuthenticationContextTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/testing/BaseAuthenticationContextTest.java
@@ -17,6 +17,7 @@
 
 package net.shibboleth.idp.authn.impl.testing;
 
+import net.shibboleth.idp.authn.AbstractAuthenticationAction;
 import net.shibboleth.idp.authn.AuthenticationFlowDescriptor;
 import net.shibboleth.idp.authn.context.AuthenticationContext;
 import net.shibboleth.idp.authn.impl.PopulateAuthenticationContext;
@@ -27,10 +28,15 @@ import net.shibboleth.shared.logic.FunctionSupport;
 
 import java.util.List;
 
+import javax.annotation.Nonnull;
+
 import org.opensaml.core.testing.OpenSAMLInitBaseTestCase;
 import org.opensaml.profile.context.ProfileRequestContext;
+import org.springframework.mock.web.MockHttpServletRequest;
 import org.springframework.webflow.execution.RequestContext;
 
+import jakarta.servlet.http.HttpServletRequest;
+
 /** Base class for further action tests. */
 public class BaseAuthenticationContextTest extends OpenSAMLInitBaseTestCase {
 
@@ -55,6 +61,7 @@ public class BaseAuthenticationContextTest extends OpenSAMLInitBaseTestCase {
         initializeMembers();
         
         final PopulateAuthenticationContext action = new PopulateAuthenticationContext();
+        assert authenticationFlows!= null;
         action.setAvailableFlows(authenticationFlows);
         action.setPotentialFlowsLookupStrategy(FunctionSupport.constant(authenticationFlows));
         action.initialize();
@@ -62,4 +69,11 @@ public class BaseAuthenticationContextTest extends OpenSAMLInitBaseTestCase {
         action.execute(src);
     }
 
+    @Nonnull protected final MockHttpServletRequest getMockHttpServletRequest(final AbstractAuthenticationAction action) {
+        assert action != null;
+        final HttpServletRequest req = action.getHttpServletRequest();
+        assert req != null;
+        return (MockHttpServletRequest)req;
+    }
+
 }
\ No newline at end of file
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/principal/impl/X500PrincipalSerializerTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/principal/impl/X500PrincipalSerializerTest.java
index 40da72ed4..e49e82908 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/principal/impl/X500PrincipalSerializerTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/principal/impl/X500PrincipalSerializerTest.java
@@ -45,7 +45,7 @@ public class X500PrincipalSerializerTest {
         
         final X500Principal p2 = serializer.deserialize(s);
         Assert.assertEquals(p1, p2);
-        
+        assert p2 != null;
         Assert.assertEquals(p2.getName(), "DC=net,DC=shibboleth,CN=jdoe");
     }
     
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/proxy/impl/ExtractDiscoveryResponseTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/proxy/impl/ExtractDiscoveryResponseTest.java
index b2c8f942e..a6db91893 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/proxy/impl/ExtractDiscoveryResponseTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/proxy/impl/ExtractDiscoveryResponseTest.java
@@ -51,22 +51,28 @@ public class ExtractDiscoveryResponseTest extends BaseAuthenticationContextTest
         final Event event = action.execute(src);
         
         ActionTestingSupport.assertEvent(event, AuthnEventIds.NO_CREDENTIALS);
-        Assert.assertNull(prc.getSubcontext(AuthenticationContext.class).getAuthenticatingAuthority());
+        final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
+        ac.getAuthenticatingAuthority();
     }
 
     @Test public void testFailure() {
         final Event event = action.execute(src);
         
         ActionTestingSupport.assertEvent(event, AuthnEventIds.NO_CREDENTIALS);
-        Assert.assertNull(prc.getSubcontext(AuthenticationContext.class).getAuthenticatingAuthority());
+        final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
+        ac.getAuthenticatingAuthority();
     }
 
     @Test public void testSuccess() {
-        ((MockHttpServletRequest) action.getHttpServletRequest()).addParameter("entityID", "foo");
+        getMockHttpServletRequest(action).addParameter("entityID", "foo");
         
         final Event event = action.execute(src);
         ActionTestingSupport.assertProceedEvent(event);
-        Assert.assertEquals(prc.getSubcontext(AuthenticationContext.class).getAuthenticatingAuthority(), "foo");
+        final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
+        Assert.assertEquals(ac.getAuthenticatingAuthority(), "foo");
     }
 
 }
\ No newline at end of file
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/proxy/impl/InitializeProxyProfileRequestContextTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/proxy/impl/InitializeProxyProfileRequestContextTest.java
index 3fd991694..2d7763c35 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/proxy/impl/InitializeProxyProfileRequestContextTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/proxy/impl/InitializeProxyProfileRequestContextTest.java
@@ -56,10 +56,11 @@ public class InitializeProxyProfileRequestContextTest {
         
         action.execute(prc);
         ActionTestingSupport.assertProceedEvent(prc);
-
+        final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        assert ac != null;
         final ProfileRequestContext prc2 =
-                prc.getSubcontext(AuthenticationContext.class).getSubcontext(ProfileRequestContext.class);
-        Assert.assertNotNull(prc2);
+                ac.getSubcontext(ProfileRequestContext.class);
+        assert prc2 != null;;
         Assert.assertEquals(prc2.getProfileId(), "nested");
     }
 
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/revocation/impl/AttributeRevocationConditionTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/revocation/impl/AttributeRevocationConditionTest.java
index 711d8b312..21af8cf89 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/revocation/impl/AttributeRevocationConditionTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/revocation/impl/AttributeRevocationConditionTest.java
@@ -23,6 +23,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.stream.Collectors;
 
+import javax.annotation.Nonnull;
 import javax.security.auth.Subject;
 
 import net.shibboleth.idp.attribute.IdPAttribute;
@@ -72,6 +73,7 @@ public class AttributeRevocationConditionTest extends BaseAuthenticationContextT
     @Test public void testNotRevoked() {
         final AuthenticationResult active = authenticationFlows.get(1).newAuthenticationResult(new Subject());
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
+        assert authCtx != null;
         authCtx.setActiveResults(Arrays.asList(active));
 
         Assert.assertTrue(active.test(prc));
@@ -80,6 +82,7 @@ public class AttributeRevocationConditionTest extends BaseAuthenticationContextT
     @Test public void testRevoked() {
         final AuthenticationResult active = authenticationFlows.get(1).newAuthenticationResult(new Subject());
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
+        assert authCtx != null;
         authCtx.setActiveResults(Arrays.asList(active));
 
         revocationsToResolve = Collections.singletonList(Instant.now().plusSeconds(3600));
@@ -90,6 +93,7 @@ public class AttributeRevocationConditionTest extends BaseAuthenticationContextT
     @Test public void testPastRevoked() {
         final AuthenticationResult active = authenticationFlows.get(1).newAuthenticationResult(new Subject());
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
+        assert authCtx != null;
         authCtx.setActiveResults(Arrays.asList(active));
 
         revocationsToResolve = Collections.singletonList(Instant.now().minusSeconds(3600));
@@ -131,10 +135,10 @@ public class AttributeRevocationConditionTest extends BaseAuthenticationContextT
         }
 
         /** {@inheritDoc} */
-        public ServiceableComponent<AttributeResolver> getServiceableComponent() {
+        public @Nonnull ServiceableComponent<AttributeResolver> getServiceableComponent() {
             return new ServiceableComponent<AttributeResolver>() {
 
-                public AttributeResolver getComponent() {
+                public @Nonnull AttributeResolver getComponent() {
                     return new AttributeResolver() {
 
                         public String getId() {
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/revocation/impl/RevocationCacheConditionTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/revocation/impl/RevocationCacheConditionTest.java
index c7cfd2845..1426435b5 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/revocation/impl/RevocationCacheConditionTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/revocation/impl/RevocationCacheConditionTest.java
@@ -76,6 +76,7 @@ public class RevocationCacheConditionTest extends BaseAuthenticationContextTest
     @Test public void testNotRevoked() {
         final AuthenticationResult active = authenticationFlows.get(1).newAuthenticationResult(new Subject());
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
+        assert authCtx != null;
         authCtx.setActiveResults(Arrays.asList(active));
 
         Assert.assertTrue(active.test(prc));
@@ -84,6 +85,7 @@ public class RevocationCacheConditionTest extends BaseAuthenticationContextTest
     @Test public void testRevoked() {
         final AuthenticationResult active = authenticationFlows.get(1).newAuthenticationResult(new Subject());
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
+        assert authCtx != null;
         authCtx.setActiveResults(Arrays.asList(active));
 
         revocationCache.revoke(RevocationCacheCondition.REVOCATION_CONTEXT,
@@ -97,6 +99,7 @@ public class RevocationCacheConditionTest extends BaseAuthenticationContextTest
     @Test public void testPastRevoked() {
         final AuthenticationResult active = authenticationFlows.get(1).newAuthenticationResult(new Subject());
         final AuthenticationContext authCtx = prc.getSubcontext(AuthenticationContext.class);
+        assert authCtx != null;
         authCtx.setActiveResults(Arrays.asList(active));
 
         revocationCache.revoke(RevocationCacheCondition.REVOCATION_CONTEXT,
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/spnego/impl/KerberosRealmSettingsTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/spnego/impl/KerberosRealmSettingsTest.java
index a01f94a3e..4afef1567 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/spnego/impl/KerberosRealmSettingsTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/spnego/impl/KerberosRealmSettingsTest.java
@@ -30,6 +30,8 @@ public class KerberosRealmSettingsTest {
     protected static String KEYTAB = "/opt/kerberos/http_domainA.keytab";
 
     protected static String PASSWORD = "secret";
+    
+    private Object nullObj;
 
     @BeforeMethod
     public void setUp() throws Exception {
@@ -173,7 +175,7 @@ public class KerberosRealmSettingsTest {
         // principal == null
         try {
             realm = new KerberosRealmSettings();
-            realm.setServicePrincipal(null);
+            realm.setServicePrincipal((String) nullObj);
             realm.setKeytab(KEYTAB);
 
             realm.initialize();
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/spnego/impl/SPNEGOAuthnControllerTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/spnego/impl/SPNEGOAuthnControllerTest.java
index 058d1ea98..6cdc36c24 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/spnego/impl/SPNEGOAuthnControllerTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/spnego/impl/SPNEGOAuthnControllerTest.java
@@ -74,6 +74,7 @@ public class SPNEGOAuthnControllerTest {
 
     private GSSContextAcceptor mockGSSContextAcceptor;
     
+    private Object nullObject;
     
     @BeforeClass
     public void init() throws EncodingException {        
@@ -97,16 +98,18 @@ public class SPNEGOAuthnControllerTest {
         mockGSSContextAcceptor = mock(GSSContextAcceptor.class);
     }
 
+    @SuppressWarnings("null")
     @Test(expectedExceptions = {ExternalAuthenticationException.class})
     public void withoutConversationKeyParameter_startSPNEGO_shouldThrowExternalAuthenticationException() throws Exception {
         controller.startSPNEGO(TEST_CONVERSATION_KEY,
-                (HttpServletRequest) buildConversationRequestContext(null).getExternalContext().getNativeRequest(), null);
+                (HttpServletRequest) buildConversationRequestContext(null).getExternalContext().getNativeRequest(), (HttpServletResponse) nullObject);
     }
 
+    @SuppressWarnings("null")
     @Test(expectedExceptions = ExternalAuthenticationException.class)
     public void givenMismatchedKeys_startSPNEGO_shouldThrowExternalAuthenticationException() throws Exception {
         controller.startSPNEGO("e1s2",
-                (HttpServletRequest) buildConversationRequestContext(TEST_CONVERSATION_KEY).getExternalContext().getNativeRequest(), null);
+                (HttpServletRequest) buildConversationRequestContext(TEST_CONVERSATION_KEY).getExternalContext().getNativeRequest(), (HttpServletResponse) nullObject);
     }
 
     @Test(expectedExceptions = ExternalAuthenticationException.class)
@@ -133,6 +136,7 @@ public class SPNEGOAuthnControllerTest {
                 (ProfileRequestContext) req.getConversationScope().get(ProfileRequestContext.BINDING_KEY);
         final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
         SPNEGOContext sc = new SPNEGOContext();
+        assert ac != null;
         ac.addSubcontext(sc);
         ModelAndView mv = controller.startSPNEGO(TEST_CONVERSATION_KEY,
                 (MockHttpServletRequest) req.getExternalContext().getNativeRequest(),
@@ -425,13 +429,14 @@ public class SPNEGOAuthnControllerTest {
 
     private ProfileRequestContext buildKerberosProfileRequestContext(RequestContext rc) {
         ProfileRequestContext prc = (ProfileRequestContext) rc.getConversationScope().get(ProfileRequestContext.BINDING_KEY);
-        AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
+        final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class);
         SPNEGOContext sc = new SPNEGOContext();
         KerberosSettings ks = new KerberosSettings();
         List<KerberosRealmSettings> realms = new ArrayList<>();
         realms.add(new KerberosRealmSettings());
         ks.setRealms(realms);
         sc.setKerberosSettings(ks);
+        assert ac != null;
         ac.addSubcontext(sc);
         return prc;
     }
@@ -447,7 +452,8 @@ public class SPNEGOAuthnControllerTest {
                 (ProfileRequestContext) rc.getConversationScope().get(ProfileRequestContext.BINDING_KEY); 
         ((MockServletContext) rc.getExternalContext().getNativeContext()).setAttribute(ExternalAuthentication.SWF_KEY, prc);
         
-        final AuthenticationContext ac = prc.getSubcontext(AuthenticationContext.class, true);
+        final AuthenticationContext ac = prc.getOrCreateSubcontext(AuthenticationContext.class);
+        assert ac != null;
         ac.setAttemptedFlow(new AuthenticationFlowDescriptor());
         
         final ExternalAuthenticationContext eac = (ExternalAuthenticationContext) ac.addSubcontext(
diff --git a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/spnego/impl/SPNEGOAutoLoginManagerTest.java b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/spnego/impl/SPNEGOAutoLoginManagerTest.java
index 873b346e3..838d189b0 100644
--- a/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/spnego/impl/SPNEGOAutoLoginManagerTest.java
+++ b/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/spnego/impl/SPNEGOAutoLoginManagerTest.java
@@ -71,7 +71,7 @@ public class SPNEGOAutoLoginManagerTest {
         autoLoginManager.enable();
 
         Cookie cookie = res.getCookie("spnego_autologin");
-        Assert.assertNotNull(cookie);
+        assert cookie != null;
         Assert.assertEquals(cookie.getValue(), SPNEGOAutoLoginManager.AUTOLOGIN_COOKIE_VALUE_TRUE);
     }
 
@@ -83,7 +83,7 @@ public class SPNEGOAutoLoginManagerTest {
         autoLoginManager.disable();
 
         Cookie cookie = res.getCookie("spnego_autologin");
-        Assert.assertNotNull(cookie);
+        assert cookie != null;
         Assert.assertNull(cookie.getValue());
     }
 

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


More information about the commits mailing list