From f9968481ca04628c663bf825521c5047f7c73329 Mon Sep 17 00:00:00 2001 From: chasegawa Date: Fri, 30 Jun 2023 13:05:35 -0700 Subject: [PATCH] SHIBUI-2584 Added beacon data collection unit testing --- .../MetadataResolversController.java | 1 + .../ui/service/BeaconDataServiceImpl.java | 4 +-- .../admin/ui/service/IBeaconDataService.java | 4 +++ .../controller/ActivateControllerTests.groovy | 24 +++++++++++-- .../EntityDescriptorControllerTests.groovy | 36 +++++++++++++++++++ ...taFiltersControllerIntegrationTests.groovy | 20 ++++++++++- .../MetadataFiltersControllerTests.groovy | 6 ++-- ...ResolversControllerIntegrationTests.groovy | 18 ++++++++++ 8 files changed, 106 insertions(+), 7 deletions(-) diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolversController.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolversController.java index 05ce3eb55..ca065e7b2 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolversController.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolversController.java @@ -162,6 +162,7 @@ public ResponseEntity create(@RequestBody MetadataResolver newResolver) throw positionOrderContainerService.appendPositionOrderForNew(persistedResolver); doResolverInitialization(persistedResolver); beaconDataService.addBeaconEvent(new BeaconEvent(BeaconEventType.METADATA_PROVIDER_CREATED)); + newResolver.getMetadataFilters().forEach(f -> beaconDataService.addBeaconEvent(new BeaconEvent(BeaconEventType.METADATA_FILTER_CREATED))); return ResponseEntity.created(getResourceUriFor(persistedResolver)).body(persistedResolver); } diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/BeaconDataServiceImpl.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/BeaconDataServiceImpl.java index 45b6ff2ff..13657aae6 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/BeaconDataServiceImpl.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/BeaconDataServiceImpl.java @@ -23,7 +23,6 @@ import java.util.Arrays; import java.util.Date; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -74,7 +73,8 @@ public String getBeaconData() { return mapper.writeValueAsString(detail); } - private Map getBeaconEvents() { + @Override + public Map getBeaconEvents() { List results = beaconEventRepository.getEventsSince(DateUtils.addDays(new Date(), -1)); Map counts = results.stream().collect(Collectors.groupingBy(e -> e.getEventName(), Collectors.counting())); return counts; diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/IBeaconDataService.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/IBeaconDataService.java index ccbd4563e..1b0615945 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/IBeaconDataService.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/IBeaconDataService.java @@ -3,9 +3,13 @@ import com.fasterxml.jackson.core.JsonProcessingException; import edu.internet2.tier.shibboleth.admin.ui.domain.beacon.BeaconEvent; +import java.util.Map; + public interface IBeaconDataService { String getBeaconData() throws JsonProcessingException; + Map getBeaconEvents(); + void addBeaconEvent(BeaconEvent event); void addEntityDescEnabledEvent(); diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/ActivateControllerTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/ActivateControllerTests.groovy index 6354f5538..e79ec24ef 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/ActivateControllerTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/ActivateControllerTests.groovy @@ -3,6 +3,7 @@ package edu.internet2.tier.shibboleth.admin.ui.controller import com.fasterxml.jackson.databind.ObjectMapper import edu.internet2.tier.shibboleth.admin.ui.AbstractBaseDataJpaTest import edu.internet2.tier.shibboleth.admin.ui.domain.EntityDescriptor +import edu.internet2.tier.shibboleth.admin.ui.domain.beacon.BeaconEventType import edu.internet2.tier.shibboleth.admin.ui.domain.oidc.DynamicRegistrationInfo import edu.internet2.tier.shibboleth.admin.ui.domain.oidc.GrantType import edu.internet2.tier.shibboleth.admin.ui.exception.ForbiddenException @@ -16,6 +17,7 @@ import edu.internet2.tier.shibboleth.admin.ui.security.repository.DynamicRegistr import edu.internet2.tier.shibboleth.admin.ui.service.DynamicRegistrationService import edu.internet2.tier.shibboleth.admin.ui.service.EntityDescriptorService import edu.internet2.tier.shibboleth.admin.ui.service.EntityService +import edu.internet2.tier.shibboleth.admin.ui.service.IBeaconDataService import edu.internet2.tier.shibboleth.admin.ui.util.WithMockAdmin import edu.internet2.tier.shibboleth.admin.util.EntityDescriptorConversionUtils import org.springframework.beans.factory.annotation.Autowired @@ -34,6 +36,9 @@ class ActivateControllerTests extends AbstractBaseDataJpaTest { @Subject def controller + @Autowired + private IBeaconDataService service + @Autowired ObjectMapper mapper @@ -114,9 +119,9 @@ class ActivateControllerTests extends AbstractBaseDataJpaTest { entityManager.clear() EntityDescriptor entityDescriptor = new EntityDescriptor(resourceId: 'uuid-1', entityID: 'eid1', serviceProviderName: 'sp1', serviceEnabled: false, idOfOwner: 'AAA') - entityDescriptor = entityDescriptorRepository.save(entityDescriptor) + def edRep = entDescriptorService.createNew(entityDescriptor) - defaultEntityDescriptorResourceId = entityDescriptor.getResourceId() + defaultEntityDescriptorResourceId = edRep.id def dynReg = new DynamicRegistrationInfo(resourceId: 'uuid-1', enabled: false, idOfOwner: "AAA", applicationType: 'apptype', approved: true, contacts: 'contacts', jwks: 'jwks', logoUri: 'logouri', policyUri: 'policyuri', @@ -145,6 +150,8 @@ class ActivateControllerTests extends AbstractBaseDataJpaTest { catch (Exception e) { e instanceof ForbiddenException } + + service.getBeaconEvents().get(BeaconEventType.METADATA_SOURCE_ENABLED.name()) == null } @WithMockUser(value = "DUser", roles = ["USER"]) @@ -156,10 +163,17 @@ class ActivateControllerTests extends AbstractBaseDataJpaTest { catch (Exception e) { e instanceof ForbiddenException } + + service.getBeaconEvents().get(BeaconEventType.METADATA_SOURCE_ENABLED.name()) == null } @WithMockUser(value = "DUser", roles = ["USER"]) def 'non-owner group cannot activate entity descriptor'() { + given: + EntityDescriptor ed = entityDescriptorRepository.findByResourceId(defaultEntityDescriptorResourceId) + ed.setIdOfOwner('AAA') + entityDescriptorRepository.saveAndFlush(ed) + expect: try { mockMvc.perform(patch("/api/activate/entityDescriptor/" + defaultEntityDescriptorResourceId + "/enable")) @@ -167,6 +181,8 @@ class ActivateControllerTests extends AbstractBaseDataJpaTest { catch (Exception e) { e instanceof ForbiddenException } + + service.getBeaconEvents().get(BeaconEventType.METADATA_SOURCE_ENABLED.name()) == null } // @WithMockAdmin @@ -196,6 +212,8 @@ class ActivateControllerTests extends AbstractBaseDataJpaTest { result.andExpect(status().isOk()) .andExpect(jsonPath("\$.id").value(defaultEntityDescriptorResourceId)) .andExpect(jsonPath("\$.serviceEnabled").value(true)) + + service.getBeaconEvents().get(BeaconEventType.METADATA_SOURCE_ENABLED.name()).longValue() == 1 } // @WithMockUser(value = "AUser", roles = ["USER"]) @@ -231,5 +249,7 @@ class ActivateControllerTests extends AbstractBaseDataJpaTest { result.andExpect(status().isOk()) .andExpect(jsonPath("\$.id").value('uuid-2')) .andExpect(jsonPath("\$.serviceEnabled").value(true)) + + service.getBeaconEvents().get(BeaconEventType.METADATA_SOURCE_ENABLED.name()).longValue() == 1 } } \ No newline at end of file diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/EntityDescriptorControllerTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/EntityDescriptorControllerTests.groovy index e5f542e3a..5e85f1a47 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/EntityDescriptorControllerTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/EntityDescriptorControllerTests.groovy @@ -3,6 +3,7 @@ package edu.internet2.tier.shibboleth.admin.ui.controller import com.fasterxml.jackson.databind.ObjectMapper import edu.internet2.tier.shibboleth.admin.ui.AbstractBaseDataJpaTest import edu.internet2.tier.shibboleth.admin.ui.domain.EntityDescriptor +import edu.internet2.tier.shibboleth.admin.ui.domain.beacon.BeaconEventType import edu.internet2.tier.shibboleth.admin.ui.domain.frontend.AssertionConsumerServiceRepresentation import edu.internet2.tier.shibboleth.admin.ui.domain.frontend.EntityDescriptorRepresentation import edu.internet2.tier.shibboleth.admin.ui.exception.ForbiddenException @@ -17,6 +18,7 @@ import edu.internet2.tier.shibboleth.admin.ui.security.model.Role import edu.internet2.tier.shibboleth.admin.ui.security.model.User import edu.internet2.tier.shibboleth.admin.ui.service.EntityDescriptorVersionService import edu.internet2.tier.shibboleth.admin.ui.service.EntityService +import edu.internet2.tier.shibboleth.admin.ui.service.IBeaconDataService import edu.internet2.tier.shibboleth.admin.ui.service.JPAEntityDescriptorServiceImpl import edu.internet2.tier.shibboleth.admin.ui.util.RandomGenerator import edu.internet2.tier.shibboleth.admin.ui.util.TestHelpers @@ -50,6 +52,9 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status class EntityDescriptorControllerTests extends AbstractBaseDataJpaTest { + @Autowired + private IBeaconDataService service + @Autowired EntityDescriptorRepository entityDescriptorRepository @@ -235,6 +240,8 @@ class EntityDescriptorControllerTests extends AbstractBaseDataJpaTest { } catch (NestedServletException expected) { expected.getCause() instanceof InvalidPatternMatchException } + + service.getBeaconEvents().get(BeaconEventType.METADATA_SOURCE_CREATED.name()) == null } @WithMockUser(value = "someUser", roles = ["USER"]) @@ -264,6 +271,8 @@ class EntityDescriptorControllerTests extends AbstractBaseDataJpaTest { .andExpect(jsonPath("\$.serviceEnabled").value(false)) .andExpect(jsonPath("\$.idOfOwner").value("testingGroupBBB")) + service.getBeaconEvents().get(BeaconEventType.METADATA_SOURCE_CREATED.name()).longValue() == 1 + when: "ACS url is bad" expectedEntityId = 'https://shib.org/blah/blah/again' edRep = new EntityDescriptorRepresentation() @@ -285,6 +294,9 @@ class EntityDescriptorControllerTests extends AbstractBaseDataJpaTest { } catch (NestedServletException expected) { expected.getCause() instanceof InvalidPatternMatchException } + + // Still just the one + service.getBeaconEvents().get(BeaconEventType.METADATA_SOURCE_CREATED.name()).longValue() == 1 } @WithMockAdmin @@ -321,6 +333,8 @@ class EntityDescriptorControllerTests extends AbstractBaseDataJpaTest { .andExpect(jsonPath("\$.entityId").value("https://shib")) .andExpect(jsonPath("\$.serviceEnabled").value(true)) .andExpect(jsonPath("\$.idOfOwner").value("admingroup")) + + service.getBeaconEvents().get(BeaconEventType.METADATA_SOURCE_CREATED.name()).longValue() == 1 } @WithMockUser(value = "someUser", roles = ["USER"]) @@ -357,6 +371,8 @@ class EntityDescriptorControllerTests extends AbstractBaseDataJpaTest { catch (Exception e) { e instanceof ForbiddenException } + + service.getBeaconEvents().get(BeaconEventType.METADATA_SOURCE_ENABLED.name()) == null } @WithMockAdmin @@ -397,6 +413,9 @@ class EntityDescriptorControllerTests extends AbstractBaseDataJpaTest { catch (Exception e) { e instanceof ObjectIdExistsException } + + // because we created the test objects directly in the repository, there should be no beacon records + service.getBeaconEvents().get(BeaconEventType.METADATA_SOURCE_CREATED.name()) == null } @WithMockAdmin @@ -587,12 +606,15 @@ class EntityDescriptorControllerTests extends AbstractBaseDataJpaTest { .andExpect(jsonPath("\$.assertionConsumerServices[0].makeDefault").value(false)) .andExpect(jsonPath("\$.assertionConsumerServices[0].locationUrl").value("https://test.scaldingspoon.org/test1/acs")) + service.getBeaconEvents().get(BeaconEventType.METADATA_SOURCE_CREATED.name()).longValue() == 1 + try { mockMvc.perform(post("/api/EntityDescriptor").contentType(APPLICATION_XML).content(postedBody).param("spName", spName)) } catch (Exception e) { e instanceof ObjectIdExistsException } + service.getBeaconEvents().get(BeaconEventType.METADATA_SOURCE_CREATED.name()).longValue() == 1 } @WithMockAdmin @@ -632,6 +654,8 @@ class EntityDescriptorControllerTests extends AbstractBaseDataJpaTest { catch (Exception e) { e instanceof ObjectIdExistsException } + + service.getBeaconEvents().get(BeaconEventType.METADATA_SOURCE_CREATED.name()) == null } @WithMockAdmin @@ -658,6 +682,8 @@ class EntityDescriptorControllerTests extends AbstractBaseDataJpaTest { .andExpect(jsonPath("\$.serviceEnabled").value(false)) .andExpect(jsonPath("\$.idOfOwner").value("admingroup")) .andExpect(jsonPath("\$.serviceProviderName").value("newName")) + + service.getBeaconEvents().get(BeaconEventType.METADATA_SOURCE_MODIFIED.name()).longValue() == 1 } @WithMockUser(value = "someUser", roles = ["USER"]) @@ -683,6 +709,8 @@ class EntityDescriptorControllerTests extends AbstractBaseDataJpaTest { catch (Exception e) { e instanceof ForbiddenException } + + service.getBeaconEvents().get(BeaconEventType.METADATA_SOURCE_MODIFIED.name()) == null } @WithMockUser(value = "someUser", roles = ["USER"]) @@ -708,6 +736,8 @@ class EntityDescriptorControllerTests extends AbstractBaseDataJpaTest { catch (Exception e) { e instanceof ForbiddenException } + + service.getBeaconEvents().get(BeaconEventType.METADATA_SOURCE_MODIFIED.name()) == null } @WithMockAdmin @@ -731,6 +761,8 @@ class EntityDescriptorControllerTests extends AbstractBaseDataJpaTest { catch (Exception e) { e instanceof ConcurrentModificationException } + + service.getBeaconEvents().get(BeaconEventType.METADATA_SOURCE_MODIFIED.name()) == null } @WithMockAdmin @@ -769,6 +801,8 @@ class EntityDescriptorControllerTests extends AbstractBaseDataJpaTest { .andExpect(jsonPath(shortNameToOAuth + "defaultAcrValues").isArray()) .andExpect(jsonPath(shortNameToOAuth + "attributes.requireAuthTime").value(Boolean.FALSE)) .andExpect(jsonPath(shortNameToOAuth + "attributes.defaultMaxAge").value(Integer.valueOf(0))) + + service.getBeaconEvents().get(BeaconEventType.METADATA_SOURCE_CREATED.name()).longValue() == 1 } @WithMockAdmin @@ -825,6 +859,8 @@ class EntityDescriptorControllerTests extends AbstractBaseDataJpaTest { .andExpect(jsonPath(shortNameToOAuth + "defaultAcrValues").isArray()) .andExpect(jsonPath(shortNameToOAuth + "attributes.requireAuthTime").value(Boolean.FALSE)) .andExpect(jsonPath(shortNameToOAuth + "attributes.defaultMaxAge").value(Integer.valueOf(0))) + + service.getBeaconEvents().get(BeaconEventType.METADATA_SOURCE_CREATED.name()).longValue() == 1 } @SneakyThrows diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersControllerIntegrationTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersControllerIntegrationTests.groovy index c5a843b22..2bb7c3660 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersControllerIntegrationTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataFiltersControllerIntegrationTests.groovy @@ -4,10 +4,13 @@ import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.databind.SerializationFeature import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule import edu.internet2.tier.shibboleth.admin.ui.configuration.CustomPropertiesConfiguration +import edu.internet2.tier.shibboleth.admin.ui.domain.beacon.BeaconEventType 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.resolvers.opensaml.OpenSamlChainingMetadataResolver +import edu.internet2.tier.shibboleth.admin.ui.repository.BeaconEventRepository import edu.internet2.tier.shibboleth.admin.ui.repository.MetadataResolverRepository +import edu.internet2.tier.shibboleth.admin.ui.service.IBeaconDataService import edu.internet2.tier.shibboleth.admin.ui.service.MetadataResolverConverterService import edu.internet2.tier.shibboleth.admin.ui.util.TestObjectGenerator import edu.internet2.tier.shibboleth.admin.util.AttributeUtility @@ -55,6 +58,12 @@ class MetadataFiltersControllerIntegrationTests extends Specification { @Autowired MetadataResolver chainingMetadataResolver + @Autowired + private IBeaconDataService beaconDataService + + @Autowired + private BeaconEventRepository beaconEventRepository + ObjectMapper mapper TestObjectGenerator generator @@ -71,6 +80,7 @@ class MetadataFiltersControllerIntegrationTests extends Specification { def cleanup() { metadataResolverRepository.deleteAll() + beaconEventRepository.deleteAll() } def "PUT EntityAttributesFilter"() { @@ -94,7 +104,9 @@ class MetadataFiltersControllerIntegrationTests extends Specification { createRequestHttpEntityFor { JsonOutput.toJson(existingFilterMap) }, String) then: - updatedResultFromPUT.statusCode.value() == 200 + updatedResultFromPUT.statusCode.value() == 200 + + beaconDataService.getBeaconEvents().get(BeaconEventType.METADATA_FILTER_MODIFIED.name()).longValue() == 1 } def "PUT EntityAttributesFilter and update it"() { @@ -120,6 +132,7 @@ class MetadataFiltersControllerIntegrationTests extends Specification { then: updatedResultFromPUT.statusCode.value() == 200 + beaconDataService.getBeaconEvents().get(BeaconEventType.METADATA_FILTER_MODIFIED.name()).longValue() == 1 } def "DELETE Filter"() { @@ -215,6 +228,7 @@ class MetadataFiltersControllerIntegrationTests extends Specification { } def "EntityAttributesFilter with invalid script does not result in persisting that filter"() { + given: def resolver = generator.buildRandomMetadataResolverOfType('FileBacked') def resolverResourceId = resolver.resourceId metadataResolverRepository.save(resolver) @@ -233,6 +247,9 @@ class MetadataFiltersControllerIntegrationTests extends Specification { it } + expect: + beaconDataService.getBeaconEvents().get(BeaconEventType.METADATA_FILTER_CREATED.name()) == null + when: def result = restTemplate.postForEntity("$BASE_URI/$resolverResourceId/Filters", filter, String) @@ -244,6 +261,7 @@ class MetadataFiltersControllerIntegrationTests extends Specification { then: result.body.metadataFilters.size == 0 + beaconDataService.getBeaconEvents().get(BeaconEventType.METADATA_FILTER_CREATED.name()) == null } private HttpEntity createRequestHttpEntityFor(Closure jsonBodySupplier) { 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 a666f102b..48ecfc602 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 @@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.databind.SerializationFeature import edu.internet2.tier.shibboleth.admin.ui.AbstractBaseDataJpaTest import edu.internet2.tier.shibboleth.admin.ui.configuration.CustomPropertiesConfiguration +import edu.internet2.tier.shibboleth.admin.ui.domain.beacon.BeaconEventType import edu.internet2.tier.shibboleth.admin.ui.domain.exceptions.MetadataFileNotFoundException import edu.internet2.tier.shibboleth.admin.ui.domain.filters.MetadataFilter import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolver @@ -244,8 +245,8 @@ class MetadataFiltersControllerTests extends AbstractBaseDataJpaTest { then: def expectedJson = new JsonSlurper().parseText(updatedFilterJson) expectedJson << [version: updatedFilter.getVersion()] - result.andExpect(status().isOk()) - .andExpect(content().json(JsonOutput.toJson(expectedJson), true)) + result.andExpect(status().isOk()).andExpect(content().json(JsonOutput.toJson(expectedJson), true)) + beaconDataService.getBeaconEvents().get(BeaconEventType.METADATA_FILTER_MODIFIED.name()).longValue() == 1 where: filterType | _ @@ -281,6 +282,7 @@ class MetadataFiltersControllerTests extends AbstractBaseDataJpaTest { then: result.andExpect(status().is(409)) + beaconDataService.getBeaconEvents().get(BeaconEventType.METADATA_FILTER_MODIFIED.name()) == null } @TestConfiguration diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolversControllerIntegrationTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolversControllerIntegrationTests.groovy index 0f52dc668..a9ee46b25 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolversControllerIntegrationTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolversControllerIntegrationTests.groovy @@ -8,6 +8,7 @@ import edu.internet2.tier.shibboleth.admin.ui.configuration.MetadataResolverConf import edu.internet2.tier.shibboleth.admin.ui.configuration.MetadataResolverConverterConfiguration import edu.internet2.tier.shibboleth.admin.ui.configuration.MetadataResolverValidationConfiguration import edu.internet2.tier.shibboleth.admin.ui.configuration.PlaceholderResolverComponentsConfiguration +import edu.internet2.tier.shibboleth.admin.ui.domain.beacon.BeaconEventType import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityAttributesFilter import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.DynamicHttpMetadataResolver import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.FileBackedHttpMetadataResolver @@ -20,6 +21,7 @@ import edu.internet2.tier.shibboleth.admin.ui.repository.MetadataResolversPositi import edu.internet2.tier.shibboleth.admin.ui.service.DefaultMetadataResolversPositionOrderContainerService import edu.internet2.tier.shibboleth.admin.ui.service.DirectoryService import edu.internet2.tier.shibboleth.admin.ui.service.DirectoryServiceImpl +import edu.internet2.tier.shibboleth.admin.ui.service.IBeaconDataService import edu.internet2.tier.shibboleth.admin.ui.service.IndexWriterService import edu.internet2.tier.shibboleth.admin.ui.service.MetadataResolverConverterService import edu.internet2.tier.shibboleth.admin.ui.service.MetadataResolverService @@ -54,6 +56,9 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. edu.internet2.tier.shibboleth.admin.ui.configuration.TestConfiguration, PlaceholderResolverComponentsConfiguration, MRCILocalConfig]) class MetadataResolversControllerIntegrationTests extends AbstractBaseDataJpaTest { + @Autowired + IBeaconDataService beaconDataService + @Autowired AttributeUtility attributeUtility @@ -112,6 +117,7 @@ class MetadataResolversControllerIntegrationTests extends AbstractBaseDataJpaTes then: result.andExpect(status().isCreated()).andExpect(content().contentType(APPLICATION_JSON)) .andExpect(jsonPath("\$.name").value("HTTPMetadata")) + beaconDataService.getBeaconEvents().get(BeaconEventType.METADATA_PROVIDER_CREATED.name()).longValue() == 1 } @WithMockAdmin @@ -213,6 +219,7 @@ class MetadataResolversControllerIntegrationTests extends AbstractBaseDataJpaTes then: result.andExpect(status().isCreated()).andExpect(content().contentType(APPLICATION_JSON)) .andExpect(jsonPath("\$.name").value(expectedName)) + beaconDataService.getBeaconEvents().get(BeaconEventType.METADATA_PROVIDER_CREATED.name()).longValue() == 1 } @WithMockAdmin @@ -232,6 +239,8 @@ class MetadataResolversControllerIntegrationTests extends AbstractBaseDataJpaTes result.andExpect(status().isCreated()).andExpect(content().contentType(APPLICATION_JSON)) .andExpect(jsonPath("\$.['@type']").value(resolver.getType())) + beaconDataService.getBeaconEvents().get(BeaconEventType.METADATA_PROVIDER_CREATED.name()).longValue() == 1 + cleanup: if (sourceDirectory != null) { def tmpDirectory = new File(sourceDirectory) @@ -266,6 +275,7 @@ class MetadataResolversControllerIntegrationTests extends AbstractBaseDataJpaTes then: result.andExpect(status().isCreated()) + beaconDataService.getBeaconEvents().get(BeaconEventType.METADATA_PROVIDER_CREATED.name()).longValue() == 1 } @WithMockAdmin @@ -293,6 +303,8 @@ class MetadataResolversControllerIntegrationTests extends AbstractBaseDataJpaTes updatedResult.andExpect(status().isOk()).andExpect(content().contentType(APPLICATION_JSON)) .andExpect(jsonPath("\$.name").value('Updated Resolver Name')) + beaconDataService.getBeaconEvents().get(BeaconEventType.METADATA_PROVIDER_MODIFIED.name()).longValue() == 1 + cleanup: if (sourceDirectory != null) { def tmpDirectory = new File(sourceDirectory) @@ -339,6 +351,8 @@ class MetadataResolversControllerIntegrationTests extends AbstractBaseDataJpaTes then: updatedResult.andExpect(status().isConflict()) + + beaconDataService.getBeaconEvents().get(BeaconEventType.METADATA_PROVIDER_MODIFIED.name()) == null } @WithMockAdmin @@ -362,6 +376,9 @@ class MetadataResolversControllerIntegrationTests extends AbstractBaseDataJpaTes then: createdResolver.metadataFilters.size() == 1 createdResolver.metadataFilters[0] instanceof EntityAttributesFilter + + beaconDataService.getBeaconEvents().get(BeaconEventType.METADATA_PROVIDER_CREATED.name()).longValue() == 1 + beaconDataService.getBeaconEvents().get(BeaconEventType.METADATA_FILTER_CREATED.name()).longValue() == 1 } @WithMockAdmin @@ -386,6 +403,7 @@ class MetadataResolversControllerIntegrationTests extends AbstractBaseDataJpaTes then: updatedResultFromPUT == updatedResultFromGET + beaconDataService.getBeaconEvents().get(BeaconEventType.METADATA_PROVIDER_MODIFIED.name()).longValue() == 1 } @TestConfiguration