Skip to content

Commit

Permalink
[SHIBUI-661]
Browse files Browse the repository at this point in the history
Cleanup and refactoring. Added tests for XML generation for
CONDITION_SCRIPT and REGEX filter target types.
  • Loading branch information
Bill Smith committed Aug 23, 2018
1 parent e23486c commit 68a56b7
Show file tree
Hide file tree
Showing 5 changed files with 88 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ class JPAMetadataResolverServiceImpl implements MetadataResolverService {
EntityAttributesFilterTarget.EntityAttributesFilterTargetType.REGEX) {
script = generateJavaScriptRegexScript(filter.entityAttributesFilterTarget.value[0])
}
mkp.yieldUnescaped("<![CDATA[${script}]]>")
mkp.yieldUnescaped("\n<![CDATA[\n${script}\n]]>\n")
}
}
break
Expand All @@ -204,7 +204,7 @@ class JPAMetadataResolverServiceImpl implements MetadataResolverService {
private String generateJavaScriptRegexScript(String regex) {
return """
"use strict";
${regex}.test(input.getEntityID());"""
${regex}.test(input.getEntityID());\n"""
}

void constructXmlNodeForFilter(EntityRoleWhiteListFilter filter, def markupBuilderDelegate) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,32 @@ class JPAMetadataResolverServiceImplTests extends Specification {
!diff.hasDifferences()
}

def 'test generating EntityAttributesFilter xml snippet with condition script'() {
given:
def filter = testObjectGenerator.entityAttributesFilterWithConditionScript()

when:
genXmlSnippet(markupBuilder) {
JPAMetadataResolverServiceImpl.cast(metadataResolverService).constructXmlNodeForFilter(filter, it)
}

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

def 'test generating EntityAttributesFilter xml snippet with regex'() {
given:
def filter = testObjectGenerator.entityAttributesFilterWithRegex()

when:
genXmlSnippet(markupBuilder) {
JPAMetadataResolverServiceImpl.cast(metadataResolverService).constructXmlNodeForFilter(filter, it)
}

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

def 'test generating EntityRoleWhitelistFilter xml snippet'() {
given:
def filter = testObjectGenerator.entityRoleWhitelistFilter()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,24 @@ class TestObjectGenerator {
}
}

EntityAttributesFilter entityAttributesFilterWithConditionScript() {
new EntityAttributesFilter().with {
it.name = 'EntityAttributes'
it.setEntityAttributesFilterTarget(buildEntityAttributesFilterTargetWithConditionScript())
it.intoTransientRepresentation()
it
}
}

EntityAttributesFilter entityAttributesFilterWithRegex() {
new EntityAttributesFilter().with {
it.name = 'EntityAttributes'
it.setEntityAttributesFilterTarget(buildEntityAttributesFilterTargetWithRegex())
it.intoTransientRepresentation()
it
}
}

RequiredValidUntilFilter requiredValidUntilFilter() {
return new RequiredValidUntilFilter().with {
it.maxValidityInterval = 'P14D'
Expand Down Expand Up @@ -305,12 +323,32 @@ class TestObjectGenerator {
EntityAttributesFilterTarget buildEntityAttributesFilterTarget() {
EntityAttributesFilterTarget entityAttributesFilterTarget = new EntityAttributesFilterTarget()

entityAttributesFilterTarget.setSingleValue(generator.randomStringList())
entityAttributesFilterTarget.setSingleValue(generator.randomString())
entityAttributesFilterTarget.setEntityAttributesFilterTargetType(randomFilterTargetType())

return entityAttributesFilterTarget
}

EntityAttributesFilterTarget buildEntityAttributesFilterTargetWithConditionScript() {
EntityAttributesFilterTarget entityAttributesFilterTarget = new EntityAttributesFilterTarget()

entityAttributesFilterTarget.setSingleValue("Pretend this is JavaScript.")
entityAttributesFilterTarget.setEntityAttributesFilterTargetType(
EntityAttributesFilterTarget.EntityAttributesFilterTargetType.CONDITION_SCRIPT)

return entityAttributesFilterTarget
}

EntityAttributesFilterTarget buildEntityAttributesFilterTargetWithRegex() {
EntityAttributesFilterTarget entityAttributesFilterTarget = new EntityAttributesFilterTarget()

entityAttributesFilterTarget.setSingleValue("/foo.*/") // JavaScript-style regex
entityAttributesFilterTarget.setEntityAttributesFilterTargetType(
EntityAttributesFilterTarget.EntityAttributesFilterTargetType.REGEX)

return entityAttributesFilterTarget
}

FilterTargetRepresentation buildFilterTargetRepresentation() {
FilterTargetRepresentation representation = new FilterTargetRepresentation()

Expand Down
14 changes: 14 additions & 0 deletions backend/src/test/resources/conf/661.2.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<MetadataProvider id='ShibbolethMetadata' xmlns='urn:mace:shibboleth:2.0:metadata' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:type='ChainingMetadataProvider' xsi:schemaLocation='urn:mace:shibboleth:2.0:metadata http://shibboleth.net/schema/idp/shibboleth-metadata.xsd urn:mace:shibboleth:2.0:resource http://shibboleth.net/schema/idp/shibboleth-resource.xsd urn:mace:shibboleth:2.0:security http://shibboleth.net/schema/idp/shibboleth-security.xsd urn:oasis:names:tc:SAML:2.0:metadata http://docs.oasis-open.org/security/saml/v2.0/saml-schema-metadata-2.0.xsd urn:oasis:names:tc:SAML:2.0:assertion http://docs.oasis-open.org/security/saml/v2.0/saml-schema-assertion-2.0.xsd'>
<MetadataFilter xsi:type='EntityAttributes'>
<ConditionScript>
<Script>
<![CDATA[
"use strict";
/foo.*/.test(input.getEntityID());
]]>
</Script>
</ConditionScript>
</MetadataFilter>
</MetadataProvider>
7 changes: 7 additions & 0 deletions backend/src/test/resources/conf/661.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<MetadataProvider id='ShibbolethMetadata' xmlns='urn:mace:shibboleth:2.0:metadata' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:type='ChainingMetadataProvider' xsi:schemaLocation='urn:mace:shibboleth:2.0:metadata http://shibboleth.net/schema/idp/shibboleth-metadata.xsd urn:mace:shibboleth:2.0:resource http://shibboleth.net/schema/idp/shibboleth-resource.xsd urn:mace:shibboleth:2.0:security http://shibboleth.net/schema/idp/shibboleth-security.xsd urn:oasis:names:tc:SAML:2.0:metadata http://docs.oasis-open.org/security/saml/v2.0/saml-schema-metadata-2.0.xsd urn:oasis:names:tc:SAML:2.0:assertion http://docs.oasis-open.org/security/saml/v2.0/saml-schema-assertion-2.0.xsd'>
<MetadataFilter xsi:type='EntityAttributes'>
<ConditionScript>
<Script><![CDATA[Pretend this is JavaScript.]]></Script>
</ConditionScript>
</MetadataFilter>
</MetadataProvider>

0 comments on commit 68a56b7

Please sign in to comment.