Skip to content

Commit

Permalink
[SHIBUI-520]
Browse files Browse the repository at this point in the history
Added/updated tests.
  • Loading branch information
Bill Smith committed Jun 28, 2018
1 parent 7655c7d commit c571dd4
Show file tree
Hide file tree
Showing 5 changed files with 97 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,8 @@
@JsonSubTypes({@JsonSubTypes.Type(value = LocalDynamicMetadataResolver.class, name = "LocalDynamicMetadataResolver"),
@JsonSubTypes.Type(value = FileBackedHttpMetadataResolver.class, name = "FileBackedHttpMetadataResolver"),
@JsonSubTypes.Type(value = DynamicHttpMetadataResolver.class, name = "DynamicHttpMetadataResolver"),
@JsonSubTypes.Type(value = FilesystemMetadataResolver.class, name = "FilesystemMetadataResolver")})
@JsonSubTypes.Type(value = FilesystemMetadataResolver.class, name = "FilesystemMetadataResolver"),
@JsonSubTypes.Type(value = ResourceBackedMetadataResolver.class, name = "ResourceBackedMetadataResolver")})
public class MetadataResolver extends AbstractAuditable {

@JsonProperty("@type")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,10 @@
@ToString
public class ResourceBackedMetadataResolver extends MetadataResolver {

public ResourceBackedMetadataResolver() {
type = "ResourceBackedMetadataResolver";
}

@Embedded
private ReloadableMetadataResolverAttributes reloadableMetadataResolverAttributes;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
package edu.internet2.tier.shibboleth.admin.ui.controller

import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.databind.SerializationFeature
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.repository.MetadataResolverRepository
import edu.internet2.tier.shibboleth.admin.ui.util.TestObjectGenerator
import edu.internet2.tier.shibboleth.admin.util.AttributeUtility
import groovy.json.JsonOutput
import groovy.json.JsonSlurper
import org.opensaml.saml.metadata.resolver.MetadataResolver
Expand All @@ -18,6 +22,7 @@ import org.springframework.http.HttpHeaders
import org.springframework.test.context.ActiveProfiles

import spock.lang.Specification
import spock.lang.Unroll

import static org.springframework.http.HttpMethod.PUT

Expand All @@ -34,10 +39,22 @@ class MetadataResolversControllerIntegrationTests extends Specification {
@Autowired
MetadataResolverRepository metadataResolverRepository

@Autowired
AttributeUtility attributeUtility

ObjectMapper mapper
TestObjectGenerator generator

JsonSlurper jsonSlurper = new JsonSlurper()

static BASE_URI = '/api/MetadataResolvers'

def setup() {
generator = new TestObjectGenerator(attributeUtility)
mapper = new ObjectMapper()
mapper.enable(SerializationFeature.INDENT_OUTPUT)
}

def cleanup() {
metadataResolverRepository.deleteAll()
}
Expand Down Expand Up @@ -130,24 +147,31 @@ class MetadataResolversControllerIntegrationTests extends Specification {
result.statusCodeValue == 404
}

def "POST new DynamicHttpMetadataResolver -> /api/MetadataResolvers"() {
@Unroll
def "POST new DynamicHttpMetadataResolver of type #resolverType -> /api/MetadataResolvers"(String resolverType) {
given: 'New MetadataResolver JSON representation'
def resolver = [name: 'Test DynamicHttpMetadataResolver', '@type': 'DynamicHttpMetadataResolver']
def resolver = generator.buildRandomMetadataResolverOfType(resolverType)

when: 'POST request is made with new DynamicHttpMetadataResolver JSON representation'
def result = this.restTemplate.postForEntity(BASE_URI, createRequestHttpEntityFor { JsonOutput.toJson(resolver) }, String)
def result = this.restTemplate.postForEntity(BASE_URI, createRequestHttpEntityFor { mapper.writeValueAsString(resolver) }, String)

then:
result.statusCodeValue == 201
result.headers.Location[0].contains(BASE_URI)

where:
resolverType | _
'DynamicHttp' | _
'FileBacked' | _
'LocalDynamic' | _
'ResourceBacked' | _
'Filesystem' | _
}

def "PUT concrete MetadataResolver with updated changes -> /api/MetadataResolvers/{resourceId}"() {
@Unroll
def "PUT concrete MetadataResolver of type #resolverType with updated changes -> /api/MetadataResolvers/{resourceId}"(String resolverType) {
given: 'One resolver is available in data store'
def resolver = new DynamicHttpMetadataResolver().with {
it.name = 'Test DynamicHttpMetadataResolver'
it
}
def resolver = generator.buildRandomMetadataResolverOfType(resolverType)
def resolverResourceId = resolver.resourceId
metadataResolverRepository.save(resolver)

Expand All @@ -171,6 +195,13 @@ class MetadataResolversControllerIntegrationTests extends Specification {
then:
updatedResolverMap.name == 'Updated DynamicHttpMetadataResolver'

where:
resolverType | _
'DynamicHttp' | _
'FileBacked' | _
'LocalDynamic' | _
'ResourceBacked' | _
'Filesystem' | _
}

def "PUT concrete MetadataResolver with version conflict -> /api/MetadataResolvers/{resourceId}"() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,19 @@ class JPAMetadataResolverServiceImplTests extends Specification {
generatedXmlIsTheSameAsExpectedXml('/conf/546-classpath.xml', domBuilder.parseText(writer.toString()))
}

def 'test generating FilesystemMetadataResolver xml snippet'() {
given:
def resolver = testObjectGenerator.filesystemMetadataResolver()

when:
genXmlSnippet(markupBuilder) {
JPAMetadataResolverServiceImpl.cast(metadataResolverService).constructXmlNodeForResolver(resolver, it) {}
}

then:
generatedXmlIsTheSameAsExpectedXml('/conf/520.xml', domBuilder.parseText(writer.toString()))
}

static genXmlSnippet(MarkupBuilder xml, Closure xmlNodeGenerator) {
xml.MetadataProvider('id': 'ShibbolethMetadata',
'xmlns': 'urn:mace:shibboleth:2.0:metadata',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -376,6 +376,45 @@ class TestObjectGenerator {
return contactPerson
}

MetadataResolver buildRandomMetadataResolverOfType(String metadataResolverType) {
def randomResolver
switch (metadataResolverType) {
case 'DynamicHttp':
randomResolver = dynamicHttpMetadataResolver()
break
case 'FileBacked':
randomResolver = fileBackedHttpMetadataResolver()
break
case 'LocalDynamic':
randomResolver = localDynamicMetadataResolver()
break
case 'ResourceBacked':
randomResolver = resourceBackedMetadataResolverForSVN()
break
case 'Filesystem':
randomResolver = filesystemMetadataResolver()
break;
default:
throw new RuntimeException("Did you forget to create a TestObjectGenerator.<type>MetadataResolver method for resolverType: ${metadataResolverType} ?");
}
randomResolver
}

FilesystemMetadataResolver filesystemMetadataResolver() {
new FilesystemMetadataResolver().with {
it.name = 'FilesystemMetadata'
it.metadataFile = 'some metadata filename'

it.reloadableMetadataResolverAttributes = new ReloadableMetadataResolverAttributes().with {
it.minRefreshDelay = 'PT5M'
it.maxRefreshDelay = 'PT1H'
it.refreshDelayFactor = 0.75
it
}
it
}
}

FileBackedHttpMetadataResolver fileBackedHttpMetadataResolver() {
new FileBackedHttpMetadataResolver().with {
it.name = 'HTTPMetadata'
Expand Down

0 comments on commit c571dd4

Please sign in to comment.