From 464844370fbc142bb94f2c9aa384519bf2921d4c Mon Sep 17 00:00:00 2001 From: Dmitriy Kopylenko Date: Wed, 18 Sep 2019 17:22:45 -0400 Subject: [PATCH 1/5] SHIBUI-1500 --- ...lerVersionEndpointsIntegrationTests.groovy | 18 +++++++++++++++ .../controller/MetadataFiltersController.java | 4 +++- .../ui/domain/resolvers/MetadataResolver.java | 6 +++++ ...taFiltersControllerIntegrationTests.groovy | 23 ++++++++++++++++++- 4 files changed, 49 insertions(+), 2 deletions(-) diff --git a/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolverControllerVersionEndpointsIntegrationTests.groovy b/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolverControllerVersionEndpointsIntegrationTests.groovy index aaa0a1095..2c02ee4b4 100644 --- a/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolverControllerVersionEndpointsIntegrationTests.groovy +++ b/backend/src/enversTest/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolverControllerVersionEndpointsIntegrationTests.groovy @@ -2,6 +2,7 @@ package edu.internet2.tier.shibboleth.admin.ui.controller 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.resolvers.DynamicHttpMetadataResolver import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.FileBackedHttpMetadataResolver import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.FilesystemMetadataResolver @@ -136,6 +137,23 @@ class MetadataResolverControllerVersionEndpointsIntegrationTests extends Specifi noExceptionThrown() } + def "SHIBUI-1500"() { + MetadataResolver mr = new FileBackedHttpMetadataResolver(name: 'shibui-1500') + mr = repository.save(mr) + + when: 'add a filter' + def filter = new EntityRoleWhiteListFilter(name: 'shibui-1500', retainedRoles: ['role1']) + mr.addFilter(filter) + mr = repository.save(mr) + + def allVersions = getAllMetadataResolverVersions(mr.resourceId, List) + def mrv1 = getMetadataResolverForVersion(mr.resourceId, allVersions.body[0].id, MetadataResolver) + def mrv2 = getMetadataResolverForVersion(mr.resourceId, allVersions.body[1].id, MetadataResolver) + + then: + (mrv1.getBody() as MetadataResolver).modifiedDate < (mrv2.getBody() as MetadataResolver).modifiedDate + } + private getAllMetadataResolverVersions(String resourceId, responseType) { this.restTemplate.getForEntity(resourceUriFor(ALL_VERSIONS_URI, resourceId), responseType) } 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 cbf5051ba..b640f6362 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 @@ -80,7 +80,7 @@ public ResponseEntity getOne(@PathVariable String metadataResolverId, @PathVa @PostMapping("/Filters") public ResponseEntity create(@PathVariable String metadataResolverId, @RequestBody MetadataFilter createdFilter) { MetadataResolver metadataResolver = findResolverOrThrowHttp404(metadataResolverId); - metadataResolver.getMetadataFilters().add(createdFilter); + metadataResolver.addFilter(createdFilter); MetadataResolver persistedMr = repository.save(metadataResolver); // we reload the filters here after save @@ -153,6 +153,8 @@ public ResponseEntity delete(@PathVariable String metadataResolverId, throw HTTP_404_CLIENT_ERROR_EXCEPTION.get(); } resolver.setMetadataFilters(updatedFilters); + //To support envers versioning from MetadataResolver side + resolver.markAsModified(); repository.save(resolver); filterRepository.delete(filterToDelete); diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataResolver.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataResolver.java index dc30d40d8..9e67a5549 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataResolver.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataResolver.java @@ -91,6 +91,12 @@ public int getVersion() { return this.hashCode(); } + public void addFilter(MetadataFilter metadataFilter) { + //To make sure that Spring Data auditing infrastructure recognizes update and "touched" modifiedDate + markAsModified(); + this.metadataFilters.add(metadataFilter); + } + public void markAsModified() { this.versionModifiedTimestamp = System.currentTimeMillis(); } 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 206421f49..098e7ac2b 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 @@ -188,6 +188,27 @@ class MetadataFiltersControllerIntegrationTests extends Specification { resolverResult_3.body.metadataFilters.size == 5 } + def "POST new Filter updates resolver's modifiedDate - SHIBUI-1500"() { + given: 'MetadataResolver with attached entity attributes is available in data store' + def resolver = generator.buildRandomMetadataResolverOfType('FileBacked') + def filter = generator.entityAttributesFilter() + def resolverResourceId = resolver.resourceId + metadataResolverRepository.save(resolver) + MetadataResolver openSamlRepresentation = metadataResolverConverterService.convertToOpenSamlRepresentation(resolver) + OpenSamlChainingMetadataResolverUtil.updateChainingMetadataResolver((OpenSamlChainingMetadataResolver) chainingMetadataResolver, openSamlRepresentation) + + when: 'Resolver without filter is fetched' + def result = this.restTemplate.getForEntity("$BASE_URI/$resolverResourceId", String) + def originalModifiedDate = jsonSlurper.parseText(result.body).modifiedDate + + and: 'POST call is made with new filter' + result = restTemplate.postForEntity("$BASE_URI/$resolverResourceId/Filters", filter, String) + def afterFilterAddedModifiedDate = jsonSlurper.parseText(result.body).modifiedDate + + then: + originalModifiedDate < afterFilterAddedModifiedDate + } + private HttpEntity createRequestHttpEntityFor(Closure jsonBodySupplier) { new HttpEntity(jsonBodySupplier(), ['Content-Type': 'application/json'] as HttpHeaders) } @@ -203,4 +224,4 @@ class MetadataFiltersControllerIntegrationTests extends Specification { } } } -} \ No newline at end of file +} From 643da2c7a1411e9ed8afd288cb28d4ec0e9224cc Mon Sep 17 00:00:00 2001 From: Bill Smith Date: Thu, 19 Sep 2019 15:56:24 -0700 Subject: [PATCH 2/5] SHIBUI-1505 Commented out the integratioTest / Selenium section. --- Jenkinsfile | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index d19cae2ac..bde811fb4 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -17,23 +17,24 @@ pipeline { } } - stage('Run Selenium tests') { - when { - expression { - return (GIT_BRANCH.startsWith('PR') || GIT_BRANCH.endsWith('-QA')) - } - } - steps { - sh ''' - ./gradlew integrationTest -Dselenium.host=jenkins - ''' - } - post { - always { - junit 'backend/build/test-results/integrationTest/**/*.xml' - } - } - } +# Commented out, for the time being, per SHIBUI-1505 +# stage('Run Selenium tests') { +# when { +# expression { +# return (GIT_BRANCH.startsWith('PR') || GIT_BRANCH.endsWith('-QA')) +# } +# } +# steps { +# sh ''' +# ./gradlew integrationTest -Dselenium.host=jenkins +# ''' +# } +# post { +# always { +# junit 'backend/build/test-results/integrationTest/**/*.xml' +# } +# } +# } stage('Build Docker images') { when { From 4f1748d8752782d5edb23ef09678a7d9170c2ae4 Mon Sep 17 00:00:00 2001 From: Bill Smith Date: Thu, 19 Sep 2019 16:00:43 -0700 Subject: [PATCH 3/5] SHIBUI-1505 Updated comment format to hopefully be accurate this time. --- Jenkinsfile | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index bde811fb4..0c3b7a279 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -17,25 +17,25 @@ pipeline { } } -# Commented out, for the time being, per SHIBUI-1505 -# stage('Run Selenium tests') { -# when { -# expression { -# return (GIT_BRANCH.startsWith('PR') || GIT_BRANCH.endsWith('-QA')) -# } -# } -# steps { -# sh ''' -# ./gradlew integrationTest -Dselenium.host=jenkins -# ''' -# } -# post { -# always { -# junit 'backend/build/test-results/integrationTest/**/*.xml' -# } -# } -# } - +/* Commented out, for the time being, per SHIBUI-1505 + stage('Run Selenium tests') { + when { + expression { + return (GIT_BRANCH.startsWith('PR') || GIT_BRANCH.endsWith('-QA')) + } + } + steps { + sh ''' + ./gradlew integrationTest -Dselenium.host=jenkins + ''' + } + post { + always { + junit 'backend/build/test-results/integrationTest/**/*.xml' + } + } + } +*/ stage('Build Docker images') { when { expression { From 8b3d2f5e0ab150da5c96cd812ff6fb2b65952860 Mon Sep 17 00:00:00 2001 From: Bill Smith Date: Thu, 19 Sep 2019 16:05:54 -0700 Subject: [PATCH 4/5] SHIBUI-1505 Another comment fix. --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 0c3b7a279..1eadd28b3 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -31,7 +31,7 @@ pipeline { } post { always { - junit 'backend/build/test-results/integrationTest/**/*.xml' +// junit 'backend/build/test-results/integrationTest/**/*.xml' } } } From 18b01ec63c6dcca56fa973dacf199a25ffc6a6ba Mon Sep 17 00:00:00 2001 From: Bill Smith Date: Thu, 19 Sep 2019 16:07:23 -0700 Subject: [PATCH 5/5] SHIBUI-1505 You win, Jenkins. --- Jenkinsfile | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 1eadd28b3..56a4ea3f5 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -17,25 +17,6 @@ pipeline { } } -/* Commented out, for the time being, per SHIBUI-1505 - stage('Run Selenium tests') { - when { - expression { - return (GIT_BRANCH.startsWith('PR') || GIT_BRANCH.endsWith('-QA')) - } - } - steps { - sh ''' - ./gradlew integrationTest -Dselenium.host=jenkins - ''' - } - post { - always { -// junit 'backend/build/test-results/integrationTest/**/*.xml' - } - } - } -*/ stage('Build Docker images') { when { expression {