package org.apereo.cas.support.saml; import net.shibboleth.utilities.java.support.xml.ParserPool; import org.apereo.cas.config.CasCoreAuthenticationConfiguration; import org.apereo.cas.config.CasCoreAuthenticationHandlersConfiguration; import org.apereo.cas.config.CasCoreAuthenticationMetadataConfiguration; import org.apereo.cas.config.CasCoreAuthenticationPolicyConfiguration; import org.apereo.cas.config.CasCoreAuthenticationPrincipalConfiguration; import org.apereo.cas.config.CasCoreAuthenticationServiceSelectionStrategyConfiguration; import org.apereo.cas.config.CasCoreAuthenticationSupportConfiguration; import org.apereo.cas.config.CasCoreConfiguration; import org.apereo.cas.config.CasCoreHttpConfiguration; import org.apereo.cas.config.CasCoreServicesConfiguration; import org.apereo.cas.config.CasCoreTicketCatalogConfiguration; import org.apereo.cas.config.CasCoreTicketIdGeneratorsConfiguration; import org.apereo.cas.config.CasCoreTicketsConfiguration; import org.apereo.cas.config.CasCoreUtilConfiguration; import org.apereo.cas.config.CasCoreWebConfiguration; import org.apereo.cas.config.CasDefaultServiceTicketIdGeneratorsConfiguration; import org.apereo.cas.config.CasPersonDirectoryConfiguration; import org.apereo.cas.config.CoreSamlConfiguration; import org.apereo.cas.config.SamlConfiguration; import org.apereo.cas.config.support.CasWebApplicationServiceFactoryConfiguration; import org.apereo.cas.config.support.EnvironmentConversionServiceInitializer; import org.apereo.cas.logout.config.CasCoreLogoutConfiguration; import org.apereo.cas.util.SchedulingUtils; import org.apereo.cas.validation.config.CasCoreValidationConfiguration; import org.apereo.cas.web.config.CasProtocolViewsConfiguration; import org.apereo.cas.web.config.CasValidationConfiguration; import org.junit.Test; import org.junit.runner.RunWith; import org.opensaml.core.xml.XMLObjectBuilderFactory; import org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport; import org.opensaml.core.xml.io.MarshallerFactory; import org.opensaml.core.xml.io.UnmarshallerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.TestConfiguration; import org.springframework.cloud.autoconfigure.RefreshAutoConfiguration; import org.springframework.context.ApplicationContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; import javax.annotation.PostConstruct; import static org.junit.Assert.*; /** * OpenSaml context loading tests. * * @author Misagh Moayyed * @since 4.1 */ @RunWith(SpringRunner.class) @SpringBootTest( classes = {AbstractOpenSamlTests.SamlTestConfiguration.class, CoreSamlConfiguration.class, SamlConfiguration.class, RefreshAutoConfiguration.class, CasCoreWebConfiguration.class, CasPersonDirectoryConfiguration.class, CasCoreServicesConfiguration.class, CasCoreValidationConfiguration.class, CasProtocolViewsConfiguration.class, CasValidationConfiguration.class, CasCoreAuthenticationConfiguration.class, CasCoreAuthenticationPrincipalConfiguration.class, CasCoreAuthenticationPolicyConfiguration.class, CasCoreAuthenticationMetadataConfiguration.class, CasCoreAuthenticationSupportConfiguration.class, CasCoreAuthenticationHandlersConfiguration.class, CasDefaultServiceTicketIdGeneratorsConfiguration.class, CasCoreTicketIdGeneratorsConfiguration.class, CasWebApplicationServiceFactoryConfiguration.class, CasCoreHttpConfiguration.class, CasCoreTicketsConfiguration.class, CasCoreTicketCatalogConfiguration.class, CasCoreLogoutConfiguration.class, CasCoreUtilConfiguration.class, CasCoreAuthenticationServiceSelectionStrategyConfiguration.class, CasCoreConfiguration.class}) @ContextConfiguration(locations = "classpath:/opensaml-config.xml", initializers = EnvironmentConversionServiceInitializer.class) public abstract class AbstractOpenSamlTests { protected static final String SAML_REQUEST = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + "<samlp:AuthnRequest xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\" " + "ID=\"5545454455\" Version=\"2.0\" IssueInstant=\"Value\" " + "ProtocolBinding=\"urn:oasis:names.tc:SAML:2.0:bindings:HTTP-Redirect\" " + "ProviderName=\"https://localhost:8443/myRutgers\" " + "AssertionConsumerServiceURL=\"https://localhost:8443/myRutgers\"/>"; @Autowired protected ApplicationContext applicationContext; @Autowired protected OpenSamlConfigBean configBean; @Autowired protected ParserPool parserPool; @Autowired @Qualifier("shibboleth.BuilderFactory") protected XMLObjectBuilderFactory builderFactory; @Autowired @Qualifier("shibboleth.MarshallerFactory") protected MarshallerFactory marshallerFactory; @Autowired @Qualifier("shibboleth.UnmarshallerFactory") protected UnmarshallerFactory unmarshallerFactory; @TestConfiguration public static class SamlTestConfiguration { @Autowired protected ApplicationContext applicationContext; @PostConstruct public void init() { SchedulingUtils.prepScheduledAnnotationBeanPostProcessor(applicationContext); } } @Test public void autowireApplicationContext() { assertNotNull(this.applicationContext); assertNotNull(this.configBean); assertNotNull(this.parserPool); assertNotNull(this.builderFactory); assertNotNull(this.unmarshallerFactory); assertNotNull(this.marshallerFactory); assertNotNull(this.configBean.getParserPool()); } @Test public void loadStaticContextFactories() { assertNotNull(XMLObjectProviderRegistrySupport.getParserPool()); assertNotNull(XMLObjectProviderRegistrySupport.getBuilderFactory()); assertNotNull(XMLObjectProviderRegistrySupport.getMarshallerFactory()); assertNotNull(XMLObjectProviderRegistrySupport.getUnmarshallerFactory()); } @Test public void ensureParserIsInitialized() throws Exception { assertNotNull(this.parserPool); assertNotNull(this.parserPool.getBuilder()); } }