-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
SHIBUI-521(622): metadata resolver validation facility wip...
- Loading branch information
Showing
7 changed files
with
179 additions
and
4 deletions.
There are no files selected for viewing
27 changes: 27 additions & 0 deletions
27
...nternet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataResolverValidationService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
package edu.internet2.tier.shibboleth.admin.ui.domain.resolvers; | ||
|
||
import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolverValidator.ValidationResult; | ||
|
||
import java.util.ArrayList; | ||
import java.util.List; | ||
import java.util.Optional; | ||
|
||
public class MetadataResolverValidationService<T extends MetadataResolver> { | ||
|
||
private List<MetadataResolverValidator> validators; | ||
|
||
public MetadataResolverValidationService(List<MetadataResolverValidator> validators) { | ||
this.validators = validators != null ? validators : new ArrayList<>(); | ||
} | ||
|
||
@SuppressWarnings("Uncheked") | ||
public ValidationResult validateIfNecessary(T metadataResolver) { | ||
Optional<MetadataResolverValidator> validator = | ||
this.validators | ||
.stream() | ||
.filter(v -> v.supports(metadataResolver)) | ||
.findFirst(); | ||
return validator.isPresent() ? validator.get().validate(metadataResolver) : new ValidationResult(null); | ||
|
||
} | ||
} |
25 changes: 25 additions & 0 deletions
25
...va/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/MetadataResolverValidator.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
package edu.internet2.tier.shibboleth.admin.ui.domain.resolvers; | ||
|
||
public interface MetadataResolverValidator<T extends MetadataResolver> { | ||
|
||
boolean supports(T resolver); | ||
|
||
ValidationResult validate(T resolver); | ||
|
||
class ValidationResult { | ||
|
||
public ValidationResult(String errorMessage) { | ||
this.errorMessage = errorMessage; | ||
} | ||
|
||
private String errorMessage; | ||
|
||
public String getErrorMessage() { | ||
return errorMessage; | ||
} | ||
|
||
public boolean isValid() { | ||
return this.errorMessage == null; | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
2 changes: 1 addition & 1 deletion
2
.../EntityAttributesFilterTargetTests.groovy → .../EntityAttributesFilterTargetTests.groovy
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
2 changes: 1 addition & 1 deletion
2
...morphicFiltersJacksonHandlingTests.groovy → ...morphicFiltersJacksonHandlingTests.groovy
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
93 changes: 93 additions & 0 deletions
93
...2/tier/shibboleth/admin/ui/domain/resolvers/MetadataResolverValidationServiceTests.groovy
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,93 @@ | ||
package edu.internet2.tier.shibboleth.admin.ui.domain.resolvers | ||
|
||
import spock.lang.Specification | ||
import spock.lang.Subject | ||
|
||
import static edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolverValidator.* | ||
|
||
/** | ||
* @author Dmitriy Kopylenko | ||
*/ | ||
class MetadataResolverValidationServiceTests extends Specification { | ||
|
||
def "Validation service with no available validators always returns default valid result"() { | ||
given: 'Sample metadata resolver and validation service with no validators' | ||
def resolver = Mock(MetadataResolver) | ||
@Subject | ||
def validationService = new MetadataResolverValidationService(null) | ||
|
||
when: 'Validation call is made' | ||
def validationResult = validationService.validateIfNecessary(resolver) | ||
|
||
then: | ||
validationResult.valid | ||
} | ||
|
||
def "Validation service with one validator not supporting the type of resolver returns default valid result"() { | ||
given: 'Sample metadata resolver and validation service with one validator not supporting that type' | ||
def resolver = Mock(MetadataResolver) | ||
def validator = Mock(MetadataResolverValidator) | ||
validator.supports(_) >> false | ||
@Subject | ||
def validationService = new MetadataResolverValidationService([validator]) | ||
|
||
when: 'Validation call is made' | ||
def validationResult = validationService.validateIfNecessary(resolver) | ||
|
||
then: | ||
validationResult.valid | ||
} | ||
|
||
def "Validation service with one validator supporting the type of resolver but fails its validation"() { | ||
given: 'Sample metadata resolver and validation service with one validator supporting that type' | ||
def resolver = Mock(MetadataResolver) | ||
def validator = Mock(MetadataResolverValidator) | ||
validator.supports(_) >> true | ||
validator.validate(_) >> new ValidationResult('Invalid') | ||
@Subject | ||
def validationService = new MetadataResolverValidationService([validator]) | ||
|
||
when: 'Validation call is made' | ||
def validationResult = validationService.validateIfNecessary(resolver) | ||
|
||
then: | ||
!validationResult.valid | ||
} | ||
|
||
def "Validation service with with two validators supporting the type of resolver, first fails, second passes validation"() { | ||
given: 'Sample metadata resolver and validation service with two validators supporting that type' | ||
def resolver = Mock(MetadataResolver) | ||
def validator1 = Mock(MetadataResolverValidator) | ||
validator1.supports(_) >> true | ||
validator1.validate(_) >> new ValidationResult('Invalid') | ||
def validator2 = Mock(MetadataResolverValidator) | ||
validator2.supports(_) >> true | ||
validator2.validate(_) >> new ValidationResult(null) | ||
@Subject | ||
def validationService = new MetadataResolverValidationService([validator1, validator2]) | ||
|
||
when: 'Validation call is made' | ||
def validationResult = validationService.validateIfNecessary(resolver) | ||
|
||
then: 'Result depends on list order of validators if all of them support the resolver type. This would be considered a mis-configuration' | ||
!validationResult.valid | ||
} | ||
|
||
def "Validation service with with two validators, only one supporting the type of resolver, passes validation"() { | ||
given: 'Sample metadata resolver and validation service with two validators, with one supporting that type' | ||
def resolver = Mock(MetadataResolver) | ||
def validator1 = Mock(MetadataResolverValidator) | ||
validator1.supports(_) >> false | ||
def validator2 = Mock(MetadataResolverValidator) | ||
validator2.supports(_) >> true | ||
validator2.validate(_) >> new ValidationResult(null) | ||
@Subject | ||
def validationService = new MetadataResolverValidationService([validator1, validator2]) | ||
|
||
when: 'Validation call is made' | ||
def validationResult = validationService.validateIfNecessary(resolver) | ||
|
||
then: | ||
validationResult.valid | ||
} | ||
} |
2 changes: 1 addition & 1 deletion
2
...rphicResolversJacksonHandlingTests.groovy → ...rphicResolversJacksonHandlingTests.groovy
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters