package at.gv.egiz.eaaf.modules.pvp2.test.metadata; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.Arrays; import at.gv.egiz.eaaf.core.api.idp.IConfiguration; import at.gv.egiz.eaaf.core.impl.http.IHttpClientFactory; import at.gv.egiz.eaaf.core.impl.utils.FileUtils; import at.gv.egiz.eaaf.modules.pvp2.api.metadata.IPvp2MetadataProvider; import at.gv.egiz.eaaf.modules.pvp2.exception.Pvp2MetadataException; import at.gv.egiz.eaaf.modules.pvp2.impl.metadata.PvpMetadataResolverFactory; import at.gv.egiz.eaaf.modules.pvp2.impl.opensaml.initialize.EaafOpenSaml3xInitializer; import at.gv.egiz.eaaf.modules.pvp2.test.dummy.DummyMetadataProvider; import org.apache.commons.io.IOUtils; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.opensaml.core.criterion.EntityIdCriterion; import org.opensaml.saml.criterion.EntityRoleCriterion; import org.opensaml.saml.saml2.metadata.EntityDescriptor; import org.opensaml.saml.saml2.metadata.SPSSODescriptor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import net.shibboleth.utilities.java.support.resolver.CriteriaSet; import net.shibboleth.utilities.java.support.resolver.ResolverException; import okhttp3.HttpUrl; import okhttp3.mockwebserver.MockResponse; import okhttp3.mockwebserver.MockWebServer; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration({ "/spring/test_eaaf_pvp.beans.xml", "/spring/test_eaaf_core_spring_config.beans.xml", "/spring/eaaf_utils.beans.xml" }) @TestPropertySource(locations = { "/config/config_1.props" }) public class ChainingMetadataTest { private static MockWebServer mockWebServer; private static HttpUrl mockServerUrl; @Autowired DummyMetadataProvider metadataProvider; @Autowired PvpMetadataResolverFactory factory; @Autowired IConfiguration authConfig; @Autowired IHttpClientFactory httpFactory; /** * JUnit class initializer. * * @throws Exception In case of an OpenSAML3 initialization error */ @BeforeClass public static void classInitializer() throws Exception { EaafOpenSaml3xInitializer.eaafInitialize(); mockWebServer = new MockWebServer(); mockServerUrl = mockWebServer.url("/sp/metadata"); } @Test public void runGarbageCollector() throws ResolverException, Pvp2MetadataException, UnsupportedEncodingException, IOException { mockWebServer.enqueue(new MockResponse().setResponseCode(200) .setBody(new String(IOUtils.toByteArray( MetadataResolverTest.class.getResourceAsStream( "/data/pvp_metadata_moaid_test.xml")), "UTF-8")) .setHeader("Content-Type", "text/xml")); final EntityDescriptor entityDesc = metadataProvider.getEntityDescriptor("classpath:/data/pvp_metadata_junit_keystore_classpath_entityId.xml"); Assert.assertNotNull("EntityDesc is null", entityDesc); final IPvp2MetadataProvider provider2 = factory.createMetadataProvider( "classpath:/data/pvp_metadata_junit_keystore.xml", null, "jUnit", null); metadataProvider.addMetadataResolverIntoChain(provider2); final IPvp2MetadataProvider provider3 = factory.createMetadataProvider( "classpath:/data/pvp_metadata_valid_with_entityCategory_egov.xml", null, "jUnit", null); metadataProvider.addMetadataResolverIntoChain(provider3); final IPvp2MetadataProvider provider4 = factory.createMetadataProvider( mockServerUrl.url().toString(), null, "jUnit", httpFactory.getHttpClient()); metadataProvider.addMetadataResolverIntoChain(provider4); metadataProvider.addMetadataUrls(Arrays.asList( FileUtils.makeAbsoluteUrl("classpath:/data/pvp_metadata_junit_keystore.xml", authConfig.getConfigurationRootDirectory()), mockServerUrl.url().toString())); metadataProvider.runGarbageCollector(); final EntityDescriptor entityDesc4 = metadataProvider.getEntityDescriptor("classpath:/data/pvp_metadata_junit_keystore_classpath_entityId.xml"); Assert.assertNotNull("EntityDesc is null", entityDesc4); metadataProvider.clearMetadataUrls(); metadataProvider.runGarbageCollector(); final CriteriaSet criteria = new CriteriaSet(); criteria.add(new EntityIdCriterion("classpath:/data/pvp_metadata_junit_keystore_classpath_entityId.xml")); final EntityDescriptor entityDesc5 = metadataProvider.resolveSingle(criteria); Assert.assertNotNull("EntityDesc is null", entityDesc5); final CriteriaSet criteria6 = new CriteriaSet(); criteria6.add(new EntityIdCriterion("classpath:/data/classpath:/data/pvp_metadata_junit_keystore.xml")); final EntityDescriptor entityDesc6 = metadataProvider.resolveSingle(criteria6); Assert.assertNull("EntityDesc not null", entityDesc6); metadataProvider.refreshMetadataProvider("classpath:/data/pvp_metadata_junit_keystore_classpath_entityId.xml"); metadataProvider.clear(); metadataProvider.refreshMetadataProvider("classpath:/data/pvp_metadata_junit_keystore_classpath_entityId.xml"); metadataProvider.clear("classpath:/data/pvp_metadata_junit_keystore_classpath_entityId.xml"); Assert.assertFalse("Wrong refresh flag", metadataProvider.wasLastRefreshSuccess()); metadataProvider.getMetadataFilter(); metadataProvider.fullyDestroy(); metadataProvider.refreshMetadataProvider("classpath:/data/pvp_metadata_junit_keystore_classpath_entityId.xml"); final CriteriaSet criteria7 = new CriteriaSet(); criteria7.add(new EntityIdCriterion("classpath:/data/pvp_metadata_junit_keystore_classpath_entityId.xml")); final Iterable entityDesc7 = metadataProvider.resolve(criteria7); Assert.assertNotNull("EntityDesc is null", entityDesc7); Assert.assertTrue("is Empty", entityDesc7.iterator().hasNext()); final CriteriaSet criteria8 = new CriteriaSet(); criteria8.add(new EntityIdCriterion("classpath:/data/classpath:/data/pvp_metadata_junit_keystore.xml")); final Iterable entityDesc8 = metadataProvider.resolve(criteria8); Assert.assertNotNull("EntityDesc not null", entityDesc8); Assert.assertFalse("is not Empty", entityDesc8.iterator().hasNext()); metadataProvider.refresh(); metadataProvider.getLastRefresh(); metadataProvider.getLastSuccessfulRefresh(); metadataProvider.getLastUpdate(); metadataProvider.refreshMetadataProvider("classpath:/data/pvp_metadata_junit_keystore_classpath_entityId.xml"); final CriteriaSet criteria9 = new CriteriaSet(); criteria9.add(new EntityRoleCriterion(SPSSODescriptor.DEFAULT_ELEMENT_NAME)); final Iterable entityDesc9 = metadataProvider.resolve(criteria9); Assert.assertNotNull("EntityDesc not null", entityDesc9); } }