From d9633de1624a8b3a6312beffa85f06a678217791 Mon Sep 17 00:00:00 2001 From: Bill Smith Date: Tue, 19 Jun 2018 14:21:40 -0700 Subject: [PATCH 1/4] [SHIBUI-525] First pass at SignatureValidationFilter. Still need tests. --- .../JPAMetadataResolverServiceImpl.groovy | 16 +++++++- .../controller/MetadataFiltersController.java | 16 +++++++- .../ui/domain/filters/MetadataFilter.java | 3 +- .../filters/SignatureValidationFilter.java | 41 +++++++++++++++++++ .../SignatureValidationFilterRepository.java | 16 ++++++++ 5 files changed, 88 insertions(+), 4 deletions(-) create mode 100644 backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/filters/SignatureValidationFilter.java create mode 100644 backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/repository/SignatureValidationFilterRepository.java diff --git a/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImpl.groovy b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImpl.groovy index 664599cfa..91145680e 100644 --- a/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImpl.groovy +++ b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImpl.groovy @@ -4,6 +4,7 @@ import com.google.common.base.Predicate import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityAttributesFilter import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityAttributesFilterTarget import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityRoleWhiteListFilter +import edu.internet2.tier.shibboleth.admin.ui.domain.filters.SignatureValidationFilter import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.DynamicHttpMetadataResolver import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.FileBackedHttpMetadataResolver import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.LocalDynamicMetadataResolver @@ -129,7 +130,7 @@ class JPAMetadataResolverServiceImpl implements MetadataResolverService { } void constructXmlNodeForFilter(EntityRoleWhiteListFilter filter, def markupBuilderDelegate) { - markupBuilderDelegate.MetadataFilter( + markupBuilderDelegate.MetadataFilter(id: filter.name, 'xsi:type': 'EntityRoleWhiteList', 'xmlns:md': 'urn:oasis:names:tc:SAML:2.0:metadata' ) { @@ -139,6 +140,19 @@ class JPAMetadataResolverServiceImpl implements MetadataResolverService { } } + void constructXmlNodeForFilter(SignatureValidationFilter filter, def markupBuilderDelegate) { + markupBuilderDelegate.MetadataFilter(id: filter.name, + 'xsi:type': 'SignatureValidation', + 'xmlns:md': 'urn:oasis:names:tc:SAML:2.0:metadata', + 'requireSignedRoot': !filter.requireSignedRoot ?: null, + 'certificateFile': filter.certificateFile, + 'defaultCriteriaRef': filter.defaultCriteriaRef, + 'signaturePrevalidatorRef': filter.signaturePrevalidatorRef, + 'dynamicTrustedNamesStrategyRef': filter.dynamicTrustedNamesStrategyRef, + 'trustEngineRef': filter.trustEngineRef, + 'publicKey': filter.publicKey) + } + void constructXmlNodeForResolver(DynamicHttpMetadataResolver resolver, def markupBuilderDelegate, Closure childNodes) { markupBuilderDelegate.MetadataProvider(id: resolver.name, 'xsi:type': 'DynamicHttpMetadataProvider', diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersController.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersController.java index 40de7ea46..55b56b329 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersController.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersController.java @@ -3,10 +3,9 @@ import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityAttributesFilter; import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityRoleWhiteListFilter; import edu.internet2.tier.shibboleth.admin.ui.domain.filters.MetadataFilter; -import edu.internet2.tier.shibboleth.admin.ui.domain.frontend.FilterRepresentation; +import edu.internet2.tier.shibboleth.admin.ui.domain.filters.SignatureValidationFilter; import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolver; import edu.internet2.tier.shibboleth.admin.ui.repository.MetadataResolverRepository; -import edu.internet2.tier.shibboleth.admin.ui.service.FilterService; import edu.internet2.tier.shibboleth.admin.ui.service.MetadataResolverService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -154,6 +153,9 @@ private MetadataFilter convertIntoTransientRepresentationIfNecessary(Stream { + + SignatureValidationFilter findByName(String name); + + SignatureValidationFilter findByResourceId(String resourceId); + + boolean deleteByResourceId(String resourceId); +} From 38b76f5b1c08846ef9df35e4f499c03a262cf60d Mon Sep 17 00:00:00 2001 From: Bill Smith Date: Thu, 21 Jun 2018 14:05:04 -0700 Subject: [PATCH 2/4] [SHIBUI-525] unit tests WIP some general cleanup .. and added some repetition --- .../MetadataFiltersControllerTests.groovy | 28 +++++++++++----- .../admin/ui/util/TestObjectGenerator.groovy | 33 +++++++++++++++++++ 2 files changed, 53 insertions(+), 8 deletions(-) diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersControllerTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersControllerTests.groovy index f2351dfe8..6d8ab9f71 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersControllerTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersControllerTests.groovy @@ -25,6 +25,7 @@ import org.springframework.test.web.servlet.result.MockMvcResultHandlers import org.springframework.test.web.servlet.setup.MockMvcBuilders import org.w3c.dom.Document import spock.lang.Specification +import spock.lang.Unroll import static org.hamcrest.CoreMatchers.containsString import static org.springframework.http.MediaType.APPLICATION_JSON_UTF8 @@ -94,7 +95,6 @@ class MetadataFiltersControllerTests extends Specification { when: def result = mockMvc.perform(get('/api/MetadataResolver/foo/Filters')) - println(mapper.writeValueAsString(expectedContent)) then: result.andExpect(expectedHttpResponseStatus) @@ -122,9 +122,11 @@ class MetadataFiltersControllerTests extends Specification { .andExpect(content().json(mapper.writeValueAsString(expectedFilter))) } - def "FilterController.create creates the desired filter"() { + @Unroll + def "FilterController.create creates the desired filter (filterType: #filterType)"(String filterType) { given: - def randomFilter = testObjectGenerator.entityAttributesFilter() + def randomFilter = testObjectGenerator.buildRandomFilterOfType(filterType) + println('WOO! ' + randomFilter.class) def metadataResolver = new MetadataResolver() metadataResolver.setResourceId(randomGenerator.randomId()) metadataResolver.setMetadataFilters(testObjectGenerator.buildAllTypesOfFilterList()) @@ -142,9 +144,6 @@ class MetadataFiltersControllerTests extends Specification { def expectedResponseHeaderValue = "/api/MetadataResolver/$expectedMetadataResolverUUID/Filters/$expectedFilterUUID" def expectedJsonBody = mapper.writeValueAsString(randomFilter) def postedJsonBody = expectedJsonBody - ~/"id":.*?,/ // remove the "id:," - println postedJsonBody - def filter = mapper.readValue(postedJsonBody, MetadataFilter) - println filter when: def result = mockMvc.perform( @@ -156,11 +155,18 @@ class MetadataFiltersControllerTests extends Specification { result.andExpect(status().isCreated()) .andExpect(content().json(expectedJsonBody, true)) .andExpect(header().string(expectedResponseHeader, containsString(expectedResponseHeaderValue))) + + where: + filterType | _ + 'entityAttributes' | _ + 'entityRoleWhiteList' | _ + 'signatureValidation' | _ } - def "FilterController.update updates the target EntityAttributes filter as desired"() { + @Unroll + def "FilterController.update updates the target #filterType filter as desired"(String filterType) { given: - def originalFilter = testObjectGenerator.entityAttributesFilter() + def originalFilter = testObjectGenerator.buildRandomFilterOfType(filterType) def updatedFilter = testObjectGenerator.copyOf(originalFilter) updatedFilter.name = 'Updated Filter' def postedJsonBody = mapper.writeValueAsString(updatedFilter) @@ -192,6 +198,12 @@ class MetadataFiltersControllerTests extends Specification { expectedJson << [version: updatedFilter.hashCode()] result.andExpect(status().isOk()) .andExpect(content().json(JsonOutput.toJson(expectedJson), true)) + + where: + filterType | _ + 'entityAttributes' | _ + 'entityRoleWhiteList' | _ + 'signatureValidation' | _ } def "FilterController.update filter 409's if the version numbers don't match"() { diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/TestObjectGenerator.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/TestObjectGenerator.groovy index 4069ab849..027158ffc 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/TestObjectGenerator.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/TestObjectGenerator.groovy @@ -5,6 +5,7 @@ import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityAttributesFil import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityAttributesFilterTarget import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityRoleWhiteListFilter import edu.internet2.tier.shibboleth.admin.ui.domain.filters.MetadataFilter +import edu.internet2.tier.shibboleth.admin.ui.domain.filters.SignatureValidationFilter import edu.internet2.tier.shibboleth.admin.ui.domain.frontend.FilterRepresentation import edu.internet2.tier.shibboleth.admin.ui.domain.frontend.FilterTargetRepresentation import edu.internet2.tier.shibboleth.admin.ui.domain.frontend.RelyingPartyOverridesRepresentation @@ -119,10 +120,42 @@ class TestObjectGenerator { (1..generator.randomInt(4, 10)).each { filterList.add(buildFilter { entityAttributesFilter() }) filterList.add(buildFilter { entityRoleWhitelistFilter() }) + filterList.add(buildFilter { signatureValidationFilter() }) } return filterList } + MetadataFilter buildRandomFilterOfType(String filterType) { + def randomFilter + switch (filterType) { + case 'entityAttributes': + randomFilter = entityAttributesFilter() + break + case 'entityRoleWhiteList': + randomFilter = entityRoleWhitelistFilter() + break + case 'signatureValidation': + randomFilter = signatureValidationFilter() + break + default: + randomFilter = new MetadataFilter() + } + randomFilter + } + + SignatureValidationFilter signatureValidationFilter() { + new SignatureValidationFilter().with { + it.name = 'SignatureValidation' + it.requireSignedRoot = generator.randomBoolean() + it.certificateFile = generator.randomString(50) + it.defaultCriteriaRef = generator.randomString(10) + it.signaturePrevalidatorRef = generator.randomString(10) + it.dynamicTrustedNamesStrategyRef = generator.randomString(10) + it.trustEngineRef = generator.randomString(10) + it.publicKey = generator.randomString(50) + it + } + } EntityRoleWhiteListFilter entityRoleWhitelistFilter() { new EntityRoleWhiteListFilter().with { it.name = 'EntityRoleWhiteList' From f8e16ea3e80dffb2b060f8e940027af1133bc180 Mon Sep 17 00:00:00 2001 From: Bill Smith Date: Fri, 22 Jun 2018 13:50:10 -0700 Subject: [PATCH 3/4] [SHIBUI-525] Added copyOf for other filter types. --- .../admin/ui/util/TestObjectGenerator.groovy | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/TestObjectGenerator.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/TestObjectGenerator.groovy index 027158ffc..0137f1b8a 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/TestObjectGenerator.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/TestObjectGenerator.groovy @@ -175,6 +175,31 @@ class TestObjectGenerator { } } + SignatureValidationFilter copyOf(SignatureValidationFilter signatureValidationFilter) { + new SignatureValidationFilter().with { + it.name = signatureValidationFilter.name + it.resourceId = signatureValidationFilter.resourceId + it.trustEngineRef = signatureValidationFilter.trustEngineRef + it.signaturePrevalidatorRef = signatureValidationFilter.signaturePrevalidatorRef + it.publicKey = signatureValidationFilter.publicKey + it.dynamicTrustedNamesStrategyRef = signatureValidationFilter.dynamicTrustedNamesStrategyRef + it.requireSignedRoot = signatureValidationFilter.requireSignedRoot + it.certificateFile = signatureValidationFilter.certificateFile + it.defaultCriteriaRef = signatureValidationFilter.defaultCriteriaRef + it + } + } + + EntityRoleWhiteListFilter copyOf(EntityRoleWhiteListFilter entityRoleWhiteListFilter) { + new EntityRoleWhiteListFilter().with { + it.name = entityRoleWhiteListFilter.name + it.resourceId = entityRoleWhiteListFilter.resourceId + it.removeEmptyEntitiesDescriptors = entityRoleWhiteListFilter.removeEmptyEntitiesDescriptors + it.removeRolelessEntityDescriptors = entityRoleWhiteListFilter.removeRolelessEntityDescriptors + it.retainedRoles = entityRoleWhiteListFilter.retainedRoles + it + } + } EntityAttributesFilter copyOf(EntityAttributesFilter entityAttributesFilter) { new EntityAttributesFilter().with { it.name = entityAttributesFilter.name From 101fcd387221afaa4bec342931a186152598bb5d Mon Sep 17 00:00:00 2001 From: Bill Smith Date: Fri, 22 Jun 2018 16:56:09 -0700 Subject: [PATCH 4/4] [SHIBUI-525] Finally fixed a test bug. Grr. >_< --- .../JPAMetadataResolverServiceImpl.groovy | 66 +++++++++---------- .../controller/MetadataFiltersController.java | 5 +- .../MetadataFiltersControllerTests.groovy | 8 ++- .../admin/ui/util/TestObjectGenerator.groovy | 14 +++- 4 files changed, 56 insertions(+), 37 deletions(-) diff --git a/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImpl.groovy b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImpl.groovy index a40f4bd67..64f33a01d 100644 --- a/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImpl.groovy +++ b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImpl.groovy @@ -120,6 +120,39 @@ class JPAMetadataResolverServiceImpl implements MetadataResolverService { 'publicKey': filter.publicKey) } + void constructXmlNodeForFilter(EntityAttributesFilter filter, def markupBuilderDelegate) { + markupBuilderDelegate.MetadataFilter('xsi:type': 'EntityAttributes') { + // TODO: enhance. currently this does weird things with namespaces + filter.attributes.each { attribute -> + mkp.yieldUnescaped(openSamlObjects.marshalToXmlString(attribute, false)) + } + if (filter.entityAttributesFilterTarget.entityAttributesFilterTargetType == EntityAttributesFilterTarget + .EntityAttributesFilterTargetType.ENTITY) { + filter.entityAttributesFilterTarget.value.each { + Entity(it) + } + } + } + } + + void constructXmlNodeForFilter(EntityRoleWhiteListFilter filter, def markupBuilderDelegate) { + markupBuilderDelegate.MetadataFilter( + 'xsi:type': 'EntityRoleWhiteList', + 'xmlns:md': 'urn:oasis:names:tc:SAML:2.0:metadata' + ) { + filter.retainedRoles.each { + markupBuilderDelegate.RetainedRole(it) + } + } + } + + void constructXmlNodeForFilter(RequiredValidUntilFilter filter, def markupBuilderDelegate) { + markupBuilderDelegate.MetadataFilter( + 'xsi:type': 'RequiredValidUntil', + maxValidityInterval: filter.maxValidityInterval + ) + } + void constructXmlNodeForResolver(DynamicHttpMetadataResolver resolver, def markupBuilderDelegate, Closure childNodes) { markupBuilderDelegate.MetadataProvider(id: resolver.name, 'xsi:type': 'DynamicHttpMetadataProvider', @@ -167,39 +200,6 @@ class JPAMetadataResolverServiceImpl implements MetadataResolverService { } } - void constructXmlNodeForFilter(EntityAttributesFilter filter, def markupBuilderDelegate) { - markupBuilderDelegate.MetadataFilter('xsi:type': 'EntityAttributes') { - // TODO: enhance. currently this does weird things with namespaces - filter.attributes.each { attribute -> - mkp.yieldUnescaped(openSamlObjects.marshalToXmlString(attribute, false)) - } - if (filter.entityAttributesFilterTarget.entityAttributesFilterTargetType == EntityAttributesFilterTarget - .EntityAttributesFilterTargetType.ENTITY) { - filter.entityAttributesFilterTarget.value.each { - Entity(it) - } - } - } - } - - void constructXmlNodeForFilter(EntityRoleWhiteListFilter filter, def markupBuilderDelegate) { - markupBuilderDelegate.MetadataFilter( - 'xsi:type': 'EntityRoleWhiteList', - 'xmlns:md': 'urn:oasis:names:tc:SAML:2.0:metadata' - ) { - filter.retainedRoles.each { - markupBuilderDelegate.RetainedRole(it) - } - } - } - - void constructXmlNodeForFilter(RequiredValidUntilFilter filter, def markupBuilderDelegate) { - markupBuilderDelegate.MetadataFilter( - 'xsi:type': 'RequiredValidUntil', - maxValidityInterval: filter.maxValidityInterval - ) - } - void constructXmlNodeForResolver(FileBackedHttpMetadataResolver resolver, def markupBuilderDelegate, Closure childNodes) { markupBuilderDelegate.MetadataProvider(id: resolver.name, 'xsi:type': 'FileBackedHTTPMetadataProvider', diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersController.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersController.java index 06c0bbe3e..1902c212b 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersController.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersController.java @@ -134,6 +134,8 @@ public ResponseEntity update(@PathVariable String metadataResolverId, MetadataFilter persistedFilter = convertIntoTransientRepresentationIfNecessary(persistedMr.getMetadataFilters().stream(), updatedFilter.getResourceId()); + persistedFilter.setVersion(persistedFilter.hashCode()); + return ResponseEntity.ok().body(persistedFilter); } @@ -170,7 +172,8 @@ else if(filterWithUpdatedData instanceof EntityRoleWhiteListFilter) { toFilter.setRemoveEmptyEntitiesDescriptors(fromFilter.getRemoveEmptyEntitiesDescriptors()); toFilter.setRemoveRolelessEntityDescriptors(fromFilter.getRemoveRolelessEntityDescriptors()); toFilter.setRetainedRoles(fromFilter.getRetainedRoles()); - } else if (filterWithUpdatedData instanceof SignatureValidationFilter) { + } + else if (filterWithUpdatedData instanceof SignatureValidationFilter) { SignatureValidationFilter toFilter = SignatureValidationFilter.class.cast(filterToBeUpdated); SignatureValidationFilter fromFilter = SignatureValidationFilter.class.cast(filterWithUpdatedData); toFilter.setRequireSignedRoot(fromFilter.getRequireSignedRoot()); diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersControllerTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersControllerTests.groovy index 43f031952..aeebeb8a0 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersControllerTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersControllerTests.groovy @@ -126,7 +126,6 @@ class MetadataFiltersControllerTests extends Specification { def "FilterController.create creates the desired filter (filterType: #filterType)"(String filterType) { given: def randomFilter = testObjectGenerator.buildRandomFilterOfType(filterType) - println('WOO! ' + randomFilter.class) def metadataResolver = new MetadataResolver() metadataResolver.setResourceId(randomGenerator.randomId()) metadataResolver.setMetadataFilters(testObjectGenerator.buildAllTypesOfFilterList()) @@ -161,6 +160,7 @@ class MetadataFiltersControllerTests extends Specification { 'entityAttributes' | _ 'entityRoleWhiteList' | _ 'signatureValidation' | _ + 'requiredValidUntil' | _ } @Unroll @@ -169,6 +169,7 @@ class MetadataFiltersControllerTests extends Specification { def originalFilter = testObjectGenerator.buildRandomFilterOfType(filterType) def updatedFilter = testObjectGenerator.copyOf(originalFilter) updatedFilter.name = 'Updated Filter' + updatedFilter.version = originalFilter.hashCode() def postedJsonBody = mapper.writeValueAsString(updatedFilter) def originalMetadataResolver = new MetadataResolver() @@ -194,7 +195,9 @@ class MetadataFiltersControllerTests extends Specification { then: def expectedJson = new JsonSlurper().parseText(postedJsonBody) - updatedFilter.fromTransientRepresentation() + if (filterType == 'entityAttributes') { + EntityAttributesFilter.cast(updatedFilter).fromTransientRepresentation() + } expectedJson << [version: updatedFilter.hashCode()] result.andExpect(status().isOk()) .andExpect(content().json(JsonOutput.toJson(expectedJson), true)) @@ -204,6 +207,7 @@ class MetadataFiltersControllerTests extends Specification { 'entityAttributes' | _ 'entityRoleWhiteList' | _ 'signatureValidation' | _ + 'requiredValidUntil' | _ } def "FilterController.update filter 409's if the version numbers don't match"() { diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/TestObjectGenerator.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/TestObjectGenerator.groovy index 5d4e5f409..fe5be3277 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/TestObjectGenerator.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/TestObjectGenerator.groovy @@ -134,8 +134,11 @@ class TestObjectGenerator { case 'signatureValidation': randomFilter = signatureValidationFilter() break + case 'requiredValidUntil': + randomFilter = requiredValidUntilFilter() + break default: - randomFilter = new MetadataFilter() + throw new RuntimeException("Did you forget to create a TestObjectGenerator.copyOf method for filtertype: ${filterType} ?"); } randomFilter } @@ -179,6 +182,15 @@ class TestObjectGenerator { } } + RequiredValidUntilFilter copyOf(RequiredValidUntilFilter requiredValidUntilFilter) { + new RequiredValidUntilFilter().with { + it.name = requiredValidUntilFilter.name + it.resourceId = requiredValidUntilFilter.resourceId + it.maxValidityInterval = requiredValidUntilFilter.maxValidityInterval + it + } + } + SignatureValidationFilter copyOf(SignatureValidationFilter signatureValidationFilter) { new SignatureValidationFilter().with { it.name = signatureValidationFilter.name