diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlFileBackedHTTPMetadataResolver.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlFileBackedHTTPMetadataResolver.java index d7d124a0a..9660950d7 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlFileBackedHTTPMetadataResolver.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlFileBackedHTTPMetadataResolver.java @@ -15,6 +15,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.annotation.Nonnull; import javax.annotation.Nullable; import static edu.internet2.tier.shibboleth.admin.util.DurationUtility.toMillis; @@ -83,6 +84,15 @@ protected void initMetadataResolver() throws ComponentInitializationException { indexWriter); } + @Nonnull + @Override + protected BatchEntityBackingStore getBackingStore() { + if (super.getBackingStore() == null) { + super.setBackingStore(super.createNewBackingStore()); + } + return super.getBackingStore(); + } + /** * {@inheritDoc} */ diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlFilesystemMetadataResolver.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlFilesystemMetadataResolver.java index 8da204c3e..cfd3bdf2c 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlFilesystemMetadataResolver.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlFilesystemMetadataResolver.java @@ -11,6 +11,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.io.File; @@ -51,15 +52,31 @@ public DateTime getLastRefresh() { @Override protected void initMetadataResolver() throws ComponentInitializationException { + //Necessary to make sure backing store is initialized by the super class to avoid NPE during re-filtering + try { + setBackingStore(createNewBackingStore()); + } + catch(Throwable e) { + logger.warn("Error caught and ignored during initialization necessary to init backingStore", e); + } + if (this.sourceResolver.getDoInitialization()) { super.initMetadataResolver(); - delegate.addIndexedDescriptorsFromBackingStore(this.getBackingStore(), this.sourceResolver.getResourceId(), indexWriter); } } + @Nonnull + @Override + protected BatchEntityBackingStore getBackingStore() { + if (super.getBackingStore() == null) { + super.setBackingStore(super.createNewBackingStore()); + } + return super.getBackingStore(); + } + /** * {@inheritDoc} */ diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlResourceBackedMetadataResolver.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlResourceBackedMetadataResolver.java index 0a4b2a7f2..62bdb37d8 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlResourceBackedMetadataResolver.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/opensaml/OpenSamlResourceBackedMetadataResolver.java @@ -11,6 +11,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.annotation.Nonnull; import javax.annotation.Nullable; import java.io.IOException; @@ -59,6 +60,15 @@ protected void initMetadataResolver() throws ComponentInitializationException { indexWriter); } + @Nonnull + @Override + protected BatchEntityBackingStore getBackingStore() { + if (super.getBackingStore() == null) { + super.setBackingStore(super.createNewBackingStore()); + } + return super.getBackingStore(); + } + /** * {@inheritDoc} */ diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/OpenSamlFileBackedHTTPMetadataResolverTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/OpenSamlFileBackedHTTPMetadataResolverTests.groovy new file mode 100644 index 000000000..2a7ef7f7b --- /dev/null +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/OpenSamlFileBackedHTTPMetadataResolverTests.groovy @@ -0,0 +1,27 @@ +package edu.internet2.tier.shibboleth.admin.ui.domain.resolvers + +import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.opensaml.OpenSamlFileBackedHTTPMetadataResolver +import edu.internet2.tier.shibboleth.admin.ui.opensaml.OpenSamlObjects +import edu.internet2.tier.shibboleth.admin.ui.service.TokenPlaceholderValueResolvingService +import edu.internet2.tier.shibboleth.admin.util.TokenPlaceholderResolvers +import org.springframework.core.env.MutablePropertySources +import spock.lang.Specification + +class OpenSamlFileBackedHTTPMetadataResolverTests extends Specification { + def openSamlObjects = new OpenSamlObjects().with { + init() + it + } + + def "test refresh"() { + when: + new TokenPlaceholderResolvers(TokenPlaceholderValueResolvingService.shibbolethPlaceholderPrefixAware(new MutablePropertySources())) + def fbhmr = new FileBackedHttpMetadataResolver(name: 'test', xmlId: 'test', metadataURL: 'http://testme', backingFile: 'metadata/testme.xml') + + def x = new OpenSamlFileBackedHTTPMetadataResolver(openSamlObjects.parserPool, null, fbhmr) + x.refilter() + + then: + noExceptionThrown() + } +} diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/OpenSamlFilesystemMetadataResolverTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/OpenSamlFilesystemMetadataResolverTests.groovy new file mode 100644 index 000000000..f6669b32a --- /dev/null +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/OpenSamlFilesystemMetadataResolverTests.groovy @@ -0,0 +1,22 @@ +package edu.internet2.tier.shibboleth.admin.ui.domain.resolvers + +import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.opensaml.OpenSamlFilesystemMetadataResolver +import edu.internet2.tier.shibboleth.admin.ui.opensaml.OpenSamlObjects +import spock.lang.Specification + +class OpenSamlFilesystemMetadataResolverTests extends Specification { + def openSamlObjects = new OpenSamlObjects().with { + init() + it + } + + def "test refresh"() { + when: + def fsmr = new FilesystemMetadataResolver(name: 'test', xmlId: 'test', metadataFile: 'metadata/metadata.xml') + def x = new OpenSamlFilesystemMetadataResolver(openSamlObjects.parserPool, null, fsmr, new File(fsmr.metadataFile)) + x.refilter() + + then: + noExceptionThrown() + } +} diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/OpenSamlResourceBackedMetadataResolverTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/OpenSamlResourceBackedMetadataResolverTests.groovy new file mode 100644 index 000000000..28223b2f8 --- /dev/null +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/OpenSamlResourceBackedMetadataResolverTests.groovy @@ -0,0 +1,24 @@ +package edu.internet2.tier.shibboleth.admin.ui.domain.resolvers + +import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.opensaml.OpenSamlResourceBackedMetadataResolver +import edu.internet2.tier.shibboleth.admin.ui.opensaml.OpenSamlObjects +import net.shibboleth.ext.spring.resource.ResourceHelper +import org.springframework.core.io.ClassPathResource +import spock.lang.Specification + +class OpenSamlResourceBackedMetadataResolverTests extends Specification { + def openSamlObjects = new OpenSamlObjects().with { + init() + it + } + + def 'test refresh'() { + when: + def rbmr = new ResourceBackedMetadataResolver(name: 'test', xmlId: 'test', classpathMetadataResource: new ClasspathMetadataResource('metadata/metadata.xml')) + def x = new OpenSamlResourceBackedMetadataResolver(openSamlObjects.parserPool, null, rbmr, ResourceHelper.of(new ClassPathResource(rbmr.classpathMetadataResource.file))) + x.refilter() + + then: + noExceptionThrown() + } +} diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImplTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImplTests.groovy index dd55874a0..73ace1205 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImplTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImplTests.groovy @@ -12,6 +12,7 @@ import edu.internet2.tier.shibboleth.admin.ui.domain.filters.MetadataFilter import edu.internet2.tier.shibboleth.admin.ui.domain.filters.RequiredValidUntilFilter import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.ClasspathMetadataResource import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.DynamicHttpMetadataResolver +import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.FilesystemMetadataResolver import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.LocalDynamicMetadataResolver import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataQueryProtocolScheme import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.RegexScheme