From 3670d579b1bdc26fe044791e7dc5972888f02977 Mon Sep 17 00:00:00 2001 From: Dmitriy Kopylenko Date: Mon, 17 Jun 2019 16:00:01 -0400 Subject: [PATCH] SHIBUI-1263(1319) wip... --- ...tityDescriptorEnversVersioningTests.groovy | 4 + ...tadataResolverEnversVersioningTests.groovy | 94 +++++++++++++++++++ .../LocalDynamicMetadataResolver.java | 3 + .../envers/EnversTestsSupport.groovy | 15 ++- 4 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/repository/envers/MetadataResolverEnversVersioningTests.groovy diff --git a/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/repository/envers/EntityDescriptorEnversVersioningTests.groovy b/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/repository/envers/EntityDescriptorEnversVersioningTests.groovy index 05e3ad139..b7f31270a 100644 --- a/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/repository/envers/EntityDescriptorEnversVersioningTests.groovy +++ b/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/repository/envers/EntityDescriptorEnversVersioningTests.groovy @@ -179,6 +179,10 @@ class EntityDescriptorEnversVersioningTests extends Specification { getRevisionEntityForRevisionIndex(entityDescriptorHistory, 0).timestamp > 0L getModifiedEntityNames(entityDescriptorHistory, 0).sort() == expectedModifiedPersistentEntities.sort() + + + + when: representation = new EntityDescriptorRepresentation().with { it.organization = new OrganizationRepresentation(name: 'orgUpdated', displayName: 'display org Updated', url: 'http://org2.edu') diff --git a/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/repository/envers/MetadataResolverEnversVersioningTests.groovy b/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/repository/envers/MetadataResolverEnversVersioningTests.groovy new file mode 100644 index 000000000..3a6fe394b --- /dev/null +++ b/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/repository/envers/MetadataResolverEnversVersioningTests.groovy @@ -0,0 +1,94 @@ +package edu.internet2.tier.shibboleth.admin.ui.repository.envers + +import edu.internet2.tier.shibboleth.admin.ui.configuration.CoreShibUiConfiguration +import edu.internet2.tier.shibboleth.admin.ui.configuration.InternationalizationConfiguration +import edu.internet2.tier.shibboleth.admin.ui.configuration.SearchConfiguration +import edu.internet2.tier.shibboleth.admin.ui.configuration.TestConfiguration +import edu.internet2.tier.shibboleth.admin.ui.domain.* +import edu.internet2.tier.shibboleth.admin.ui.domain.frontend.* +import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.DynamicMetadataResolverAttributes +import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.LocalDynamicMetadataResolver +import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolver +import edu.internet2.tier.shibboleth.admin.ui.opensaml.OpenSamlObjects +import edu.internet2.tier.shibboleth.admin.ui.repository.EntityDescriptorRepository +import edu.internet2.tier.shibboleth.admin.ui.repository.MetadataResolverRepository +import edu.internet2.tier.shibboleth.admin.ui.service.EntityDescriptorService +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.boot.autoconfigure.domain.EntityScan +import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest +import org.springframework.data.jpa.repository.config.EnableJpaRepositories +import org.springframework.test.context.ContextConfiguration +import org.springframework.transaction.PlatformTransactionManager +import spock.lang.Specification + +import javax.persistence.EntityManager + +import static edu.internet2.tier.shibboleth.admin.ui.repository.envers.EnversTestsSupport.* + +/** + * Testing metadata resolver envers versioning + */ +@DataJpaTest +@ContextConfiguration(classes = [CoreShibUiConfiguration, InternationalizationConfiguration, SearchConfiguration, TestConfiguration]) +@EnableJpaRepositories(basePackages = ["edu.internet2.tier.shibboleth.admin.ui"]) +@EntityScan("edu.internet2.tier.shibboleth.admin.ui") +class MetadataResolverEnversVersioningTests extends Specification { + + @Autowired + MetadataResolverRepository metadataResolverRepository + + @Autowired + EntityManager entityManager + + @Autowired + PlatformTransactionManager txMgr + + @Autowired + OpenSamlObjects openSamlObjects + + def "test versioning of LocalDynamicMetadataResolver"() { + setup: + def expectedModifiedPersistentEntities = [LocalDynamicMetadataResolver.name] + + when: + LocalDynamicMetadataResolver resolver = new LocalDynamicMetadataResolver(name: 'ldmr').with { + it.dynamicMetadataResolverAttributes = new DynamicMetadataResolverAttributes() + it + } + def resolverHistory = updateAndGetRevisionHistoryOfMetadataResolver(resolver, + metadataResolverRepository, + LocalDynamicMetadataResolver, + txMgr, + entityManager) + + then: + resolverHistory.size() == 1 + getTargetEntityForRevisionIndex(resolverHistory, 0).name == 'ldmr' + getTargetEntityForRevisionIndex(resolverHistory, 0).dynamicMetadataResolverAttributes.refreshDelayFactor == 0.75 + getRevisionEntityForRevisionIndex(resolverHistory, 0).principalUserName == 'anonymousUser' + getRevisionEntityForRevisionIndex(resolverHistory, 0).timestamp > 0L + getModifiedEntityNames(resolverHistory, 0).sort() == expectedModifiedPersistentEntities.sort() + + when: + resolver.name = 'ldmr_UPDATED' + resolver.dynamicMetadataResolverAttributes.refreshDelayFactor = 1.00 + resolverHistory = updateAndGetRevisionHistoryOfMetadataResolver(resolver, + metadataResolverRepository, + LocalDynamicMetadataResolver, + txMgr, + entityManager) + + then: + resolverHistory.size() == 2 + getTargetEntityForRevisionIndex(resolverHistory, 1).name == 'ldmr_UPDATED' + getTargetEntityForRevisionIndex(resolverHistory, 1).dynamicMetadataResolverAttributes.refreshDelayFactor == 1.00 + getRevisionEntityForRevisionIndex(resolverHistory, 1).principalUserName == 'anonymousUser' + getRevisionEntityForRevisionIndex(resolverHistory, 1).timestamp > 0L + + //Check the original revision is intact + getTargetEntityForRevisionIndex(resolverHistory, 0).name == 'ldmr' + getTargetEntityForRevisionIndex(resolverHistory, 0).dynamicMetadataResolverAttributes.refreshDelayFactor == 0.75 + getRevisionEntityForRevisionIndex(resolverHistory, 0).principalUserName == 'anonymousUser' + getRevisionEntityForRevisionIndex(resolverHistory, 0).timestamp > 0L + } +} diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/LocalDynamicMetadataResolver.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/LocalDynamicMetadataResolver.java index 6b722803a..49cc09642 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/LocalDynamicMetadataResolver.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/LocalDynamicMetadataResolver.java @@ -8,11 +8,14 @@ import javax.persistence.Embedded; import javax.persistence.Entity; +import org.hibernate.envers.Audited; + @Entity @EqualsAndHashCode(callSuper = true) @Getter @Setter @ToString +@Audited public class LocalDynamicMetadataResolver extends MetadataResolver { public LocalDynamicMetadataResolver() { type = "LocalDynamicMetadataResolver"; diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/repository/envers/EnversTestsSupport.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/repository/envers/EnversTestsSupport.groovy index ca447e7f0..2052cf9d1 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/repository/envers/EnversTestsSupport.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/repository/envers/EnversTestsSupport.groovy @@ -2,7 +2,9 @@ package edu.internet2.tier.shibboleth.admin.ui.repository.envers import edu.internet2.tier.shibboleth.admin.ui.domain.EntityDescriptor import edu.internet2.tier.shibboleth.admin.ui.domain.frontend.EntityDescriptorRepresentation +import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolver import edu.internet2.tier.shibboleth.admin.ui.repository.EntityDescriptorRepository +import edu.internet2.tier.shibboleth.admin.ui.repository.MetadataResolverRepository import edu.internet2.tier.shibboleth.admin.ui.service.EntityDescriptorService import org.hibernate.envers.AuditReaderFactory import org.hibernate.envers.query.AuditEntity @@ -36,10 +38,21 @@ class EnversTestsSupport { doInExplicitTransaction(txMgr) { edr.save(ed) } - getRevisionHistoryForEntityType(em, EntityDescriptor, ed.resourceId) } + static updateAndGetRevisionHistoryOfMetadataResolver(MetadataResolver mr, + MetadataResolverRepository mrr, + Class < ? > type, + PlatformTransactionManager + txMgr, EntityManager em) { + + doInExplicitTransaction(txMgr) { + mrr.save(mr) + } + getRevisionHistoryForEntityType(em, type, mr.resourceId) + } + static getRevisionHistoryForEntityType(EntityManager em, Class entityType, String resourceId) { def auditReader = AuditReaderFactory.get(em) AuditQuery auditQuery = auditReader