From 2dd17752c25cc97122d75942eb3d660622760e91 Mon Sep 17 00:00:00 2001 From: chasegawa Date: Sun, 5 Sep 2021 11:33:51 -0700 Subject: [PATCH] master merge to 1743 test fixes --- backend/build.gradle | 19 +- .../JPAMetadataResolverServiceImpl.groovy | 152 +-------------- .../admin/ui/security/model/Group.java | 3 +- .../admin/ui/security/model/User.java | 1 - .../listener/GroupUpdatedEntityListener.java | 3 +- .../listener/UserUpdatedEntityListener.java | 3 +- .../ui/security/service/GroupServiceImpl.java | 1 + .../admin/ui/AbstractBaseDataJpaTest.groovy | 13 +- .../ui/BaseDataJpaTestConfiguration.groovy | 10 +- .../admin/ui/ResetsDatabaseTrait.groovy | 2 +- .../EntityDescriptorControllerTests.groovy | 5 +- ...DescriptorOwnershipIntegrationTests.groovy | 81 +------- ...ResolversControllerIntegrationTests.groovy | 16 +- ...ymorphicFiltersJacksonHandlingTests.groovy | 9 +- ...orphicResolversJacksonHandlingTests.groovy | 117 +----------- .../UsersControllerIntegrationTests.groovy | 13 +- ...JPAMetadataResolverServiceImplTests.groovy | 23 +-- ...JPAEntityDescriptorServiceImplTests.groovy | 5 +- .../service/JPAFilterServiceImplTests.groovy | 21 +- .../JPAFilterTargetServiceImplTests.groovy | 11 +- ...JPAMetadataResolverServiceImplTests.groovy | 6 +- ...ntityDescriptorConversionUtilsTests.groovy | 28 +-- .../admin/ui/util/TestObjectGenerator.groovy | 179 +++++++++--------- .../unicon/shibui/pac4j/AddNewUserFilter.java | 3 +- .../metadata/wizard/MetadataSourceWizard.js | 6 +- 25 files changed, 195 insertions(+), 535 deletions(-) diff --git a/backend/build.gradle b/backend/build.gradle index 92ea35284..cc42536b8 100644 --- a/backend/build.gradle +++ b/backend/build.gradle @@ -47,6 +47,23 @@ configurations { def generatedSrcDir = new File(buildDir, 'generated/src/main/java') +//test { +// exclude 'edu/internet2/tier/shibboleth/admin/ui/configuration/*.class' +// exclude 'edu/internet2/tier/shibboleth/admin/ui/controller/*.class' +// exclude 'edu/internet2/tier/shibboleth/admin/ui/domain/*.class' +// exclude 'edu/internet2/tier/shibboleth/admin/ui/domain/filters/*.class' +// exclude 'edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/*.class' +// exclude 'edu/internet2/tier/shibboleth/admin/ui/domain/versioning/*.class' +// exclude 'edu/internet2/tier/shibboleth/admin/ui/repository/*.class' +// exclude 'edu/internet2/tier/shibboleth/admin/ui/scheduled/*.class' +// exclude 'edu/internet2/tier/shibboleth/admin/ui/security/controller/*.class' +// exclude 'edu/internet2/tier/shibboleth/admin/ui/security/repository/*.class' +//// exclude 'edu/internet2/tier/shibboleth/admin/ui/security/service/*.class' +//// exclude 'edu/internet2/tier/shibboleth/admin/ui/security/springsecurity/*.class' +// exclude 'edu/internet2/tier/shibboleth/admin/ui/service/*.class' +// exclude 'edu/internet2/tier/shibboleth/admin/ui/util/*.class' +//} + sourceSets { main { groovy { @@ -353,4 +370,4 @@ dockerRun { daemonize true command '--spring.profiles.include=very-dangerous,dev', '--shibui.default-password={noop}password' clean true -} +} \ No newline at end of file diff --git a/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImpl.groovy b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImpl.groovy index 4b97efa3e..e9faeb69c 100644 --- a/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImpl.groovy +++ b/backend/src/main/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImpl.groovy @@ -77,150 +77,6 @@ class JPAMetadataResolverServiceImpl implements MetadataResolverService { private UserService userService // TODO: enhance - @Override - void reloadFilters(String metadataResolverResourceId) { - OpenSamlChainingMetadataResolver chainingMetadataResolver = (OpenSamlChainingMetadataResolver) metadataResolver - MetadataResolver targetMetadataResolver = chainingMetadataResolver.getResolvers().find { - it.id == metadataResolverResourceId - } - edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolver jpaMetadataResolver = metadataResolverRepository.findByResourceId(metadataResolverResourceId) - - if (targetMetadataResolver && targetMetadataResolver.getMetadataFilter() instanceof MetadataFilterChain) { - MetadataFilterChain metadataFilterChain = (MetadataFilterChain) targetMetadataResolver.getMetadataFilter() - - List metadataFilters = new ArrayList<>() - - // set up namespace protection - if (shibUIConfiguration.protectedAttributeNamespaces && shibUIConfiguration.protectedAttributeNamespaces.size() > 0 && targetMetadataResolver && jpaMetadataResolver.type in ['FileBackedHttpMetadataResolver', 'DynamicHttpMetadataResolver']) { - def target = new org.opensaml.saml.metadata.resolver.filter.impl.EntityAttributesFilter() - target.attributeFilter = new ScriptedPredicate(new EvaluableScript(protectedNamespaceScript())) - metadataFilters.add(target) - } - - for (edu.internet2.tier.shibboleth.admin.ui.domain.filters.MetadataFilter metadataFilter : jpaMetadataResolver.getMetadataFilters()) { - if (metadataFilter instanceof EntityAttributesFilter) { - EntityAttributesFilter entityAttributesFilter = (EntityAttributesFilter) metadataFilter - - org.opensaml.saml.metadata.resolver.filter.impl.EntityAttributesFilter target = new org.opensaml.saml.metadata.resolver.filter.impl.EntityAttributesFilter() - Map, Collection> rules = new HashMap<>() - switch (entityAttributesFilter.getEntityAttributesFilterTarget().getEntityAttributesFilterTargetType()) { - case EntityAttributesFilterTarget.EntityAttributesFilterTargetType.ENTITY: - rules.put( - new EntityIdPredicate(entityAttributesFilter.getEntityAttributesFilterTarget().getValue()), - (List) (List) entityAttributesFilter.getAttributes() - ) - break - case EntityAttributesFilterTarget.EntityAttributesFilterTargetType.CONDITION_SCRIPT: - rules.put(new ScriptedPredicate(new EvaluableScript(entityAttributesFilter.entityAttributesFilterTarget.value[0])), - (List) (List) entityAttributesFilter.getAttributes()) - break - case EntityAttributesFilterTarget.EntityAttributesFilterTargetType.REGEX: - rules.put(new ScriptedPredicate(new EvaluableScript(generateJavaScriptRegexScript(entityAttributesFilter.entityAttributesFilterTarget.value[0]))), - (List) (List) entityAttributesFilter.getAttributes()) - break - default: - // do nothing, we'd have exploded elsewhere previously. - break - } - target.setRules(rules) - metadataFilters.add(target) - } - if (metadataFilter instanceof NameIdFormatFilter) { - NameIdFormatFilter nameIdFormatFilter = NameIdFormatFilter.cast(metadataFilter) - NameIDFormatFilter openSamlTargetFilter = new OpenSamlNameIdFormatFilter() - openSamlTargetFilter.removeExistingFormats = nameIdFormatFilter.removeExistingFormats == null ? false : nameIdFormatFilter.removeExistingFormats - Map, Collection> predicateRules = [:] - def type = nameIdFormatFilter.nameIdFormatFilterTarget.nameIdFormatFilterTargetType - def values = nameIdFormatFilter.nameIdFormatFilterTarget.value - switch (type) { - case ENTITY: - predicateRules[new EntityIdPredicate(values)] = nameIdFormatFilter.formats - break - case CONDITION_SCRIPT: - predicateRules[new ScriptedPredicate(new EvaluableScript(values[0]))] = nameIdFormatFilter.formats - break - case REGEX: - predicateRules[new ScriptedPredicate(new EvaluableScript(generateJavaScriptRegexScript(values[0])))] = nameIdFormatFilter.formats - break - default: - // do nothing, we'd have exploded elsewhere previously. - break - } - openSamlTargetFilter.rules = predicateRules - metadataFilters << openSamlTargetFilter - } - } - metadataFilterChain.setFilters(metadataFilters) - } - - if (targetMetadataResolver != null && targetMetadataResolver instanceof Refilterable) { - (Refilterable) targetMetadataResolver.refilter() - } else { - //TODO: Do something here if we need to refilter other non-Batch resolvers - log.warn("Target resolver is not a Refilterable resolver. Skipping refilter()") - } - } - - private String protectedNamespaceScript() { - return """(function (attribute) { - "use strict"; - var namespaces = [${shibUIConfiguration.protectedAttributeNamespaces.collect({"\"${it}\""}).join(', ')}]; - // check the parameter - if (attribute === null) { return true; } - for (var i in namespaces) { - if (attribute.getName().startsWith(namespaces[i])) { - return false; - } - } - return true; - }(input));""" - } - - // TODO: enhance - @Override - Document generateConfiguration() { - // TODO: this can probably be a better writer - new StringWriter().withCloseable { writer -> - def xml = new MarkupBuilder(writer) - xml.omitEmptyAttributes = true - xml.omitNullAttributes = true - - xml.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' - ) { - - - resolversPositionOrderContainerService.allMetadataResolversInDefinedOrderOrUnordered.each { - edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.MetadataResolver mr -> - //TODO: We do not currently marshall the internal incommon chaining resolver (with BaseMetadataResolver type) - if ((mr.type != 'BaseMetadataResolver') && (mr.enabled)) { - constructXmlNodeForResolver(mr, delegate) { - //TODO: enhance - def didNamespaceProtectionFilter = !(shibUIConfiguration.protectedAttributeNamespaces && shibUIConfiguration.protectedAttributeNamespaces.size() > 0) - def doNamespaceProtectionFilter = { def filter -> - if (mr.type in ['FileBackedMetadataResolver', 'DynamicHttpMetadataResolver'] && (filter == null || filter instanceof EntityAttributesFilter) && !didNamespaceProtectionFilter) { - constructXmlNodeForEntityAttributeNamespaceProtection(delegate) - didNamespaceProtectionFilter = true - } - } - mr.metadataFilters.each { edu.internet2.tier.shibboleth.admin.ui.domain.filters.MetadataFilter filter -> - doNamespaceProtectionFilter() - constructXmlNodeForFilter(filter, delegate) - } - doNamespaceProtectionFilter() - } - } - } - } - return DOMBuilder.newInstance().parseText(writer.toString()) - } - } - @Autowired - private UserService userService - void constructXmlNodeForEntityAttributeNamespaceProtection(def markupBuilderDelegate) { markupBuilderDelegate.MetadataFilter('xsi:type': 'EntityAttributes') { AttributeFilterScript() { @@ -269,6 +125,7 @@ class JPAMetadataResolverServiceImpl implements MetadataResolverService { } } + // TODO: enhance void constructXmlNodeForFilter(EntityRoleWhiteListFilter filter, def markupBuilderDelegate) { if (!filter.retainedRoles?.isEmpty()) { markupBuilderDelegate.MetadataFilter( @@ -283,7 +140,6 @@ class JPAMetadataResolverServiceImpl implements MetadataResolverService { } } - void constructXmlNodeForFilter(NameIdFormatFilter filter, def markupBuilderDelegate) { def type = filter.nameIdFormatFilterTarget.nameIdFormatFilterTargetType markupBuilderDelegate.MetadataFilter( @@ -346,6 +202,7 @@ class JPAMetadataResolverServiceImpl implements MetadataResolverService { } } + void constructXmlNodeForResolver(DynamicHttpMetadataResolver resolver, def markupBuilderDelegate, Closure childNodes) { markupBuilderDelegate.MetadataProvider(id: resolver.xmlId, 'xsi:type': 'DynamicHTTPMetadataProvider', @@ -685,7 +542,7 @@ class JPAMetadataResolverServiceImpl implements MetadataResolverService { if (metadataFilter instanceof NameIdFormatFilter) { NameIdFormatFilter nameIdFormatFilter = NameIdFormatFilter.cast(metadataFilter) NameIDFormatFilter openSamlTargetFilter = new OpenSamlNameIdFormatFilter() - openSamlTargetFilter.removeExistingFormats = nameIdFormatFilter.removeExistingFormats + openSamlTargetFilter.removeExistingFormats = nameIdFormatFilter.removeExistingFormats == null ? false : nameIdFormatFilter.removeExistingFormats Map, Collection> predicateRules = [:] def type = nameIdFormatFilter.nameIdFormatFilterTarget.nameIdFormatFilterTargetType def values = nameIdFormatFilter.nameIdFormatFilterTarget.value @@ -733,7 +590,7 @@ class JPAMetadataResolverServiceImpl implements MetadataResolverService { throw new MetadataFileNotFoundException("message.file-doesnt-exist") } try { - OpenSamlChainingMetadataResolverUtil.updateChainingMetadataResolver((OpenSamlChainingMetadataResolver) chainingMetadataResolver, openSamlRepresentation); + OpenSamlChainingMetadataResolverUtil.updateChainingMetadataResolver((OpenSamlChainingMetadataResolver) chainingMetadataResolver, openSamlRepresentation) } catch (Throwable e) { throw new InitializationException(e); @@ -748,5 +605,4 @@ class JPAMetadataResolverServiceImpl implements MetadataResolverService { } } -} } \ No newline at end of file diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/model/Group.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/model/Group.java index 29016d8cc..7eb8718f3 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/model/Group.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/model/Group.java @@ -23,7 +23,7 @@ @EntityListeners(GroupUpdatedEntityListener.class) @Entity(name = "user_groups") public class Group implements Owner { - public static final String DEFAULT_REGEX = "/(?:)/"; //non-capturing + public static final String DEFAULT_REGEX = "^.+$"; //everything @Transient @JsonIgnore @@ -78,7 +78,6 @@ public void registerLoader(ILazyLoaderHelper lazyLoaderHelper) { public Set getOwnedItems() { if (lazyLoaderHelper != null) { lazyLoaderHelper.loadOwnedItems(this); - lazyLoaderHelper = null; } return ownedItems; } diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/model/User.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/model/User.java index 81d9505c0..d96a18be8 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/model/User.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/model/User.java @@ -129,7 +129,6 @@ public String getRole() { public Set getUserGroups() { if (lazyLoaderHelper != null) { lazyLoaderHelper.loadGroups(this); - lazyLoaderHelper = null; } return userGroups; } diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/model/listener/GroupUpdatedEntityListener.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/model/listener/GroupUpdatedEntityListener.java index c6e56ec62..d477ae78c 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/model/listener/GroupUpdatedEntityListener.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/model/listener/GroupUpdatedEntityListener.java @@ -18,7 +18,7 @@ public class GroupUpdatedEntityListener implements ILazyLoaderHelper { * @see https://stackoverflow.com/questions/12155632/injecting-a-spring-dependency-into-a-jpa-entitylistener */ @Autowired - public void init(OwnershipRepository repo) { + public static void init(OwnershipRepository repo) { GroupUpdatedEntityListener.ownershipRepository = repo; } @@ -36,7 +36,6 @@ public synchronized void groupSavedOrFetched(Group group) { public void loadOwnedItems(Group group) { Set ownedItems = ownershipRepository.findAllByOwner(group); group.setOwnedItems(ownedItems); - group.registerLoader(null); // once loaded, remove the helper from the group } } \ No newline at end of file diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/model/listener/UserUpdatedEntityListener.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/model/listener/UserUpdatedEntityListener.java index a53260486..9e01c41d9 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/model/listener/UserUpdatedEntityListener.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/model/listener/UserUpdatedEntityListener.java @@ -22,7 +22,7 @@ public class UserUpdatedEntityListener implements ILazyLoaderHelper { * @see https://stackoverflow.com/questions/12155632/injecting-a-spring-dependency-into-a-jpa-entitylistener */ @Autowired - public void init(OwnershipRepository repo, GroupsRepository groupRepo) { + public static void init(OwnershipRepository repo, GroupsRepository groupRepo) { UserUpdatedEntityListener.ownershipRepository = repo; UserUpdatedEntityListener.groupRepository = groupRepo; } @@ -51,6 +51,5 @@ public void loadGroups(User user) { groups.add(userGroup); }); user.setGroups(groups); - user.setLazyLoaderHelper(null); } } \ No newline at end of file diff --git a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/service/GroupServiceImpl.java b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/service/GroupServiceImpl.java index 4749a5401..3a1dfd029 100644 --- a/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/service/GroupServiceImpl.java +++ b/backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/security/service/GroupServiceImpl.java @@ -63,6 +63,7 @@ public void deleteDefinition(String resourceId) throws EntityNotFoundException, @Override public boolean doesStringMatchGroupPattern(String groupId, String uri) { Group group = find(groupId); + //@TODO change matching to rhino return Pattern.matches(group.getValidationRegex(), uri); } diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/AbstractBaseDataJpaTest.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/AbstractBaseDataJpaTest.groovy index 29206f86d..da12d8bc2 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/AbstractBaseDataJpaTest.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/AbstractBaseDataJpaTest.groovy @@ -2,6 +2,9 @@ package edu.internet2.tier.shibboleth.admin.ui import edu.internet2.tier.shibboleth.admin.ui.security.model.Role import edu.internet2.tier.shibboleth.admin.ui.security.model.User +import edu.internet2.tier.shibboleth.admin.ui.security.model.listener.GroupUpdatedEntityListener +import edu.internet2.tier.shibboleth.admin.ui.security.model.listener.UserUpdatedEntityListener +import edu.internet2.tier.shibboleth.admin.ui.security.repository.GroupsRepository import edu.internet2.tier.shibboleth.admin.ui.security.repository.OwnershipRepository import edu.internet2.tier.shibboleth.admin.ui.security.repository.RoleRepository import edu.internet2.tier.shibboleth.admin.ui.security.repository.UserRepository @@ -17,6 +20,9 @@ import spock.lang.Specification import javax.persistence.EntityManager +// The commented out lines show how to run the JPA tests using a file back h2 db - typically you'd switch if you want +// to access the db during testing to see what is happening in the db. Additionally, you have to use the file version of h2 +// if you want to use the reset, as the in mem version won't allow multiple different access connections to be created. //@DataJpaTest (properties = ["spring.datasource.url=jdbc:h2:file:/tmp/myApplicationDb;AUTO_SERVER=TRUE", // "spring.datasource.username=sa", // "spring.datasource.password=", @@ -26,10 +32,13 @@ import javax.persistence.EntityManager @ContextConfiguration(classes = [BaseDataJpaTestConfiguration]) @EnableJpaRepositories(basePackages = ["edu.internet2.tier.shibboleth.admin.ui"]) @EntityScan("edu.internet2.tier.shibboleth.admin.ui") -abstract class AbstractBaseDataJpaTest extends Specification implements ResetsDatabase { +abstract class AbstractBaseDataJpaTest extends Specification implements ResetsDatabaseTrait { @Autowired EntityManager entityManager + @Autowired + GroupsRepository groupRepository + @Autowired GroupServiceForTesting groupService @@ -74,6 +83,8 @@ abstract class AbstractBaseDataJpaTest extends Specification implements ResetsDa } createAdminUser() + GroupUpdatedEntityListener.init(ownershipRepository) + UserUpdatedEntityListener.init(ownershipRepository, groupRepository) } def cleanup() { diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/BaseDataJpaTestConfiguration.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/BaseDataJpaTestConfiguration.groovy index c3657ef42..0555f713b 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/BaseDataJpaTestConfiguration.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/BaseDataJpaTestConfiguration.groovy @@ -10,6 +10,7 @@ import edu.internet2.tier.shibboleth.admin.ui.security.repository.GroupsReposito import edu.internet2.tier.shibboleth.admin.ui.security.repository.OwnershipRepository import edu.internet2.tier.shibboleth.admin.ui.security.service.GroupServiceForTesting import edu.internet2.tier.shibboleth.admin.ui.security.service.GroupServiceImpl +import edu.internet2.tier.shibboleth.admin.ui.util.TestObjectGenerator import edu.internet2.tier.shibboleth.admin.util.AttributeUtility import edu.internet2.tier.shibboleth.admin.util.ModelRepresentationConversions import org.springframework.context.annotation.Bean @@ -20,7 +21,8 @@ import org.springframework.context.annotation.Primary @Configuration @Import([ShibUIConfiguration.class, CustomPropertiesConfiguration.class, SearchConfiguration.class]) -@ComponentScan(basePackages=[ "edu.internet2.tier.shibboleth.admin.ui.service", "edu.internet2.tier.shibboleth.admin.ui.security.service" ]) +@ComponentScan(basePackages=[ "edu.internet2.tier.shibboleth.admin.ui.service", "edu.internet2.tier.shibboleth.admin.ui.security.service", + "edu.internet2.tier.shibboleth.admin.ui.security.model.listener"]) class BaseDataJpaTestConfiguration { @Bean AttributeUtility attributeUtility(OpenSamlObjects openSamlObjects) { @@ -59,6 +61,12 @@ class BaseDataJpaTestConfiguration { return result } + @Bean + @Primary + TestObjectGenerator testObjectGenerator (AttributeUtility attributeUtility, CustomPropertiesConfiguration customPropertiesConfiguration) { + return new TestObjectGenerator(attributeUtility, customPropertiesConfiguration) + } + @Bean UserUpdatedEntityListener userUpdatedEntityListener(OwnershipRepository ownershipRepository, GroupsRepository groupRepo) { UserUpdatedEntityListener listener = new UserUpdatedEntityListener() diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/ResetsDatabaseTrait.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/ResetsDatabaseTrait.groovy index ded212e42..d99fb85e7 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/ResetsDatabaseTrait.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/ResetsDatabaseTrait.groovy @@ -2,7 +2,7 @@ package edu.internet2.tier.shibboleth.admin.ui import groovy.sql.Sql -trait ResetsDatabase { +trait ResetsDatabaseTrait { static final String H2_BACKUP_LOCATION = '/tmp/h2backup.sql' void dbsetup() { diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/EntityDescriptorControllerTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/EntityDescriptorControllerTests.groovy index c844c0070..c43ffe4f9 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/EntityDescriptorControllerTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/EntityDescriptorControllerTests.groovy @@ -61,6 +61,9 @@ class EntityDescriptorControllerTests extends AbstractBaseDataJpaTest { @Autowired EntityService entityService + @Autowired + TestObjectGenerator generator + @Autowired OpenSamlObjects openSamlObjects @@ -68,7 +71,6 @@ class EntityDescriptorControllerTests extends AbstractBaseDataJpaTest { JPAEntityDescriptorServiceImpl jpaEntityDescriptorService RandomGenerator randomGenerator - TestObjectGenerator generator def mapper def mockRestTemplate = Mock(RestTemplate) def mockMvc @@ -88,7 +90,6 @@ class EntityDescriptorControllerTests extends AbstractBaseDataJpaTest { gb.setValidationRegex("^(?:https?:\\/\\/)?(?:[^.]+\\.)?shib\\.org(\\/.*)?\$") gb = groupService.createGroup(gb) - generator = new TestObjectGenerator() randomGenerator = new RandomGenerator() mapper = new ObjectMapper() diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/EntityDescriptorOwnershipIntegrationTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/EntityDescriptorOwnershipIntegrationTests.groovy index 59510ac27..6462482d0 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/EntityDescriptorOwnershipIntegrationTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/EntityDescriptorOwnershipIntegrationTests.groovy @@ -3,10 +3,12 @@ package edu.internet2.tier.shibboleth.admin.ui.controller import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.databind.SerializationFeature import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule +import edu.internet2.tier.shibboleth.admin.ui.AbstractBaseDataJpaTest 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.EntityDescriptor import edu.internet2.tier.shibboleth.admin.ui.domain.frontend.EntityDescriptorRepresentation import edu.internet2.tier.shibboleth.admin.ui.opensaml.OpenSamlObjects import edu.internet2.tier.shibboleth.admin.ui.repository.EntityDescriptorRepository @@ -23,6 +25,7 @@ import edu.internet2.tier.shibboleth.admin.ui.security.service.UserService import edu.internet2.tier.shibboleth.admin.ui.service.EntityDescriptorVersionService import edu.internet2.tier.shibboleth.admin.ui.service.EntityService import edu.internet2.tier.shibboleth.admin.ui.service.JPAEntityDescriptorServiceImpl +import edu.internet2.tier.shibboleth.admin.ui.util.WithMockAdmin import edu.internet2.tier.shibboleth.admin.util.EntityDescriptorConversionUtils import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.autoconfigure.domain.EntityScan @@ -51,47 +54,22 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. /** * Test to recreate an issue discovered while trying to validate fixes for other bugs - SHIBUI-2033 */ -@DataJpaTest -@ContextConfiguration(classes=[CoreShibUiConfiguration, SearchConfiguration, TestConfiguration, InternationalizationConfiguration, LocalConfig]) -@EnableJpaRepositories(basePackages = ["edu.internet2.tier.shibboleth.admin.ui"]) -@EntityScan("edu.internet2.tier.shibboleth.admin.ui") -@ActiveProfiles(["edoi-test"]) @Stepwise -class EntityDescriptorOwnershipIntegrationTests extends Specification { +class EntityDescriptorOwnershipIntegrationTests extends AbstractBaseDataJpaTest { @Autowired EntityDescriptorRepository entityDescriptorRepository - @Autowired - EntityManager entityManager - @Autowired EntityService entityService - - @Autowired - GroupServiceForTesting groupService - - @Autowired - OwnershipRepository ownershipRepository - + @Autowired - RoleRepository roleRepository + OpenSamlObjects openSamlObjects @Autowired JPAEntityDescriptorServiceImpl service - - @Autowired - UserRepository userRepository - - @Autowired - UserService userService def mockRestTemplate = Mock(RestTemplate) - def openSamlObjects = new OpenSamlObjects().with { - init() - it - } - Group cuGroup = new Group().with { it.name = "College Users" it.resourceId = "cu-group" @@ -105,8 +83,6 @@ class EntityDescriptorOwnershipIntegrationTests extends Specification { @Transactional def setup() { - groupService.clearAllForTesting() - EntityDescriptorVersionService versionService = Mock() controller = new EntityDescriptorController(versionService) controller.openSamlObjects = openSamlObjects @@ -115,26 +91,6 @@ class EntityDescriptorOwnershipIntegrationTests extends Specification { mockMvc = MockMvcBuilders.standaloneSetup(controller).build() - if (roleRepository.count() == 0) { - def roles = [new Role().with { - name = 'ROLE_ADMIN' - it - }, new Role().with { - name = 'ROLE_USER' - it - }, new Role().with { - name = 'ROLE_ENABLE' - it - }] - roles.each { - roleRepository.save(it) - } - } - - Optional adminRole = roleRepository.findByName("ROLE_ADMIN") - User adminUser = new User(username: "admin", roles: [adminRole.get()], password: "foo") - userService.save(adminUser) - Optional userRole = roleRepository.findByName("ROLE_USER") User user = new User(username: "someUser", roles:[userRole.get()], password: "foo") userService.save(user) @@ -143,7 +99,7 @@ class EntityDescriptorOwnershipIntegrationTests extends Specification { EntityDescriptorConversionUtils.setEntityService(entityService) } - @WithMockUser(value = "admin", roles = ["ADMIN"]) + @WithMockAdmin def "The test scenario"() { when:"step 1 - create new group" cuGroup = groupService.createGroup(cuGroup) @@ -185,11 +141,8 @@ class EntityDescriptorOwnershipIntegrationTests extends Specification { ownershipRepository.findAllByOwner(Group.ADMIN_GROUP).size() == 2 // admin user + entity descriptor when: "step 4 - change ownership of the ED" - String contentAsString = result.andReturn().getResponse().getContentAsString() - def mapper = new ObjectMapper() - mapper.enable(SerializationFeature.INDENT_OUTPUT) - mapper.registerModule(new JavaTimeModule()) - EntityDescriptorRepresentation edRep = mapper.readValue(contentAsString, EntityDescriptorRepresentation.class) + EntityDescriptor ed = entityDescriptorRepository.findByEntityID(expectedEntityId) + EntityDescriptorRepresentation edRep = service.createRepresentationFromDescriptor(ed) edRep.setIdOfOwner(cuGroup.getOwnerId()) service.update(edRep) @@ -197,20 +150,4 @@ class EntityDescriptorOwnershipIntegrationTests extends Specification { ownershipRepository.findAllByOwner(cuGroup).size() == 2 // someUser + entity descriptor ownershipRepository.findAllByOwner(Group.ADMIN_GROUP).size() == 1 // admin user } - - @org.springframework.boot.test.context.TestConfiguration - @Profile(value = "edoi-test") - static class LocalConfig { - @Bean - @Primary - GroupServiceForTesting groupServiceForTesting(GroupsRepository repo, OwnershipRepository ownershipRepository) { - GroupServiceForTesting result = new GroupServiceForTesting(new GroupServiceImpl().with { - it.groupRepository = repo - it.ownershipRepository = ownershipRepository - return it - }) - result.ensureAdminGroupExists() - return result - } - } } \ No newline at end of file diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolversControllerIntegrationTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolversControllerIntegrationTests.groovy index 1348f9a36..6eaf954f7 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolversControllerIntegrationTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/controller/MetadataResolversControllerIntegrationTests.groovy @@ -7,6 +7,7 @@ import edu.internet2.tier.shibboleth.admin.ui.AbstractBaseDataJpaTest import edu.internet2.tier.shibboleth.admin.ui.configuration.CustomPropertiesConfiguration import edu.internet2.tier.shibboleth.admin.ui.configuration.EntitiesVersioningConfiguration import edu.internet2.tier.shibboleth.admin.ui.configuration.MetadataResolverConfiguration +import edu.internet2.tier.shibboleth.admin.ui.configuration.MetadataResolverConverterConfiguration import edu.internet2.tier.shibboleth.admin.ui.configuration.MetadataResolverValidationConfiguration import edu.internet2.tier.shibboleth.admin.ui.configuration.PlaceholderResolverComponentsConfiguration import edu.internet2.tier.shibboleth.admin.ui.configuration.ShibUIConfiguration @@ -41,6 +42,7 @@ import org.springframework.http.converter.json.MappingJackson2HttpMessageConvert import org.springframework.test.context.ContextConfiguration import org.springframework.test.web.servlet.MockMvc import org.springframework.test.web.servlet.MvcResult +import org.springframework.test.web.servlet.setup.MockMvcBuilders import org.springframework.transaction.annotation.Transactional import spock.lang.Unroll @@ -374,20 +376,6 @@ class MetadataResolversControllerIntegrationTests extends AbstractBaseDataJpaTes return new DirectoryServiceImpl() } - @Bean - JPAMetadataResolverServiceImpl jpaMetadataResolverService(MetadataResolver metadataResolver, MetadataResolverRepository metadataResolverRepository, - OpenSamlObjects openSamlObjects, MetadataResolversPositionOrderContainerService resolversPositionOrderContainerService, - ShibUIConfiguration shibUIConfiguration) { - return new JPAMetadataResolverServiceImpl().with { - it.metadataResolver = metadataResolver - it.metadataResolverRepository = metadataResolverRepository - it.openSamlObjects = openSamlObjects - it.resolversPositionOrderContainerService = resolversPositionOrderContainerService - it.shibUIConfiguration = shibUIConfiguration - it - } - } - @Bean MetadataResolversController metadataResolversController(MetadataResolverRepository metadataResolverRepository, MetadataResolverValidationService metadataResolverValidationService, MetadataResolverService metadataResolverService, MetadataResolversPositionOrderContainerService positionOrderContainerService, diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/filters/PolymorphicFiltersJacksonHandlingTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/filters/PolymorphicFiltersJacksonHandlingTests.groovy index 89a285ad8..b3950f786 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/filters/PolymorphicFiltersJacksonHandlingTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/filters/PolymorphicFiltersJacksonHandlingTests.groovy @@ -3,27 +3,20 @@ package edu.internet2.tier.shibboleth.admin.ui.domain.filters import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.databind.SerializationFeature import edu.internet2.tier.shibboleth.admin.ui.AbstractBaseDataJpaTest -import edu.internet2.tier.shibboleth.admin.ui.configuration.CustomPropertiesConfiguration import edu.internet2.tier.shibboleth.admin.ui.util.TestObjectGenerator import edu.internet2.tier.shibboleth.admin.ui.util.WithMockAdmin -import edu.internet2.tier.shibboleth.admin.util.AttributeUtility import org.springframework.beans.factory.annotation.Autowired class PolymorphicFiltersJacksonHandlingTests extends AbstractBaseDataJpaTest { - @Autowired - AttributeUtility attributeUtility @Autowired - CustomPropertiesConfiguration customPropertiesConfiguration + TestObjectGenerator testObjectGenerator ObjectMapper mapper - TestObjectGenerator testObjectGenerator def setup() { mapper = new ObjectMapper() mapper.enable(SerializationFeature.INDENT_OUTPUT) - - testObjectGenerator = new TestObjectGenerator(attributeUtility, customPropertiesConfiguration) } @WithMockAdmin diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/PolymorphicResolversJacksonHandlingTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/PolymorphicResolversJacksonHandlingTests.groovy index f0df3716d..d9a1ead3a 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/PolymorphicResolversJacksonHandlingTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/domain/resolvers/PolymorphicResolversJacksonHandlingTests.groovy @@ -3,28 +3,20 @@ package edu.internet2.tier.shibboleth.admin.ui.domain.resolvers import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.databind.SerializationFeature import edu.internet2.tier.shibboleth.admin.ui.AbstractBaseDataJpaTest -import edu.internet2.tier.shibboleth.admin.ui.configuration.CustomPropertiesConfiguration import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityAttributesFilter import edu.internet2.tier.shibboleth.admin.ui.domain.filters.EntityRoleWhiteListFilter import edu.internet2.tier.shibboleth.admin.ui.util.TestObjectGenerator -import edu.internet2.tier.shibboleth.admin.util.AttributeUtility import org.springframework.beans.factory.annotation.Autowired class PolymorphicResolversJacksonHandlingTests extends AbstractBaseDataJpaTest { @Autowired - AttributeUtility attributeUtility - - @Autowired - CustomPropertiesConfiguration customPropertiesConfiguration + TestObjectGenerator testObjectGenerator ObjectMapper mapper - TestObjectGenerator testObjectGenerator def setup() { mapper = new ObjectMapper() mapper.enable(SerializationFeature.INDENT_OUTPUT) - - testObjectGenerator = new TestObjectGenerator(attributeUtility, customPropertiesConfiguration) } def "Correct polymorphic serialization of LocalDynamicMetadataResolver"() { @@ -233,113 +225,12 @@ class PolymorphicResolversJacksonHandlingTests extends AbstractBaseDataJpaTest { def "Correct polymorphic serialization of FileBackedHttpMetadataResolver"() { given: - MetadataResolver resolver = new FileBackedHttpMetadataResolver().with { - it.httpMetadataResolverAttributes = new HttpMetadataResolverAttributes() - it.reloadableMetadataResolverAttributes = new ReloadableMetadataResolverAttributes() - it.metadataFilters = [testObjectGenerator.entityAttributesFilter(), testObjectGenerator.entityRoleWhitelistFilter()] - it - } - def givenResolverJson = """ - { - "createdDate" : null, - "modifiedDate" : null, - "createdBy" : null, - "modifiedBy" : null, - "name" : null, - "resourceId" : "f3e615d5-960b-4fed-bff6-86fc4620be95", - "requireValidMetadata" : true, - "failFastInitialization" : true, - "sortKey" : null, - "criterionPredicateRegistryRef" : null, - "useDefaultPredicateRegistry" : true, - "satisfyAnyPredicates" : false, - "metadataFilters" : [ { - "createdDate" : null, - "modifiedDate" : null, - "createdBy" : null, - "modifiedBy" : null, - "name" : "EntityAttributes", - "resourceId" : "4149cc5f-137e-4045-9369-8fedafcdd8c8", - "filterEnabled" : false, - "version" : -1249726767, - "entityAttributesFilterTarget" : { - "createdDate" : null, - "modifiedDate" : null, - "createdBy" : null, - "modifiedBy" : null, - "entityAttributesFilterTargetType" : "CONDITION_SCRIPT", - "value" : [ "6EksoLF7Q0" ], - "audId" : null - }, - "attributeRelease" : [ ], - "relyingPartyOverrides" : { - "signAssertion" : false, - "dontSignResponse" : true, - "turnOffEncryption" : false, - "useSha" : false, - "ignoreAuthenticationMethod" : false, - "omitNotBefore" : false, - "responderId" : "3267361e-7d8c-45d2-92ce-7642dc3bb432", - "nameIdFormats" : [ "baHO7CzFHH" ], - "authenticationMethods" : [ ] - }, - "audId" : null, - "@type" : "EntityAttributes" - }, { - "createdDate" : null, - "modifiedDate" : null, - "createdBy" : null, - "modifiedBy" : null, - "name" : "EntityRoleWhiteList", - "resourceId" : "75117ec7-c74a-45cb-b216-cbbc9118fe70", - "filterEnabled" : false, - "version" : 0, - "removeRolelessEntityDescriptors" : true, - "removeEmptyEntitiesDescriptors" : true, - "retainedRoles" : [ "role1", "role2" ], - "audId" : null, - "@type" : "EntityRoleWhiteList" - } ], - "version" : 0, - "metadataURL" : null, - "backingFile" : null, - "initializeFromBackupFile" : true, - "backupFileInitNextRefreshDelay" : null, - "reloadableMetadataResolverAttributes" : { - "parserPoolRef" : null, - "taskTimerRef" : null, - "minRefreshDelay" : null, - "maxRefreshDelay" : null, - "refreshDelayFactor" : null, - "indexesRef" : null, - "resolveViaPredicatesOnly" : null, - "expirationWarningThreshold" : null - }, - "httpMetadataResolverAttributes" : { - "httpClientRef" : null, - "connectionRequestTimeout" : null, - "connectionTimeout" : null, - "socketTimeout" : null, - "disregardTLSCertificate" : false, - "tlsTrustEngineRef" : null, - "httpClientSecurityParametersRef" : null, - "proxyHost" : null, - "proxyPort" : null, - "proxyUser" : null, - "proxyPassword" : null, - "httpCaching" : null, - "httpCacheDirectory" : null, - "httpMaxCacheEntries" : null, - "httpMaxCacheEntrySize" : null - }, - "audId" : null, - "@type" : "FileBackedHttpMetadataResolver" - } - """ + MetadataResolver resolver = testObjectGenerator.buildFileBackedHttpMetadataResolver() + def resolverJson = mapper.writeValueAsString(resolver) when: //println mapper.writeValueAsString(resolver) - def deSerializedResolver = mapper.readValue(givenResolverJson, MetadataResolver) + def deSerializedResolver = mapper.readValue(resolverJson, MetadataResolver) def json = mapper.writeValueAsString(deSerializedResolver) println(json) def roundTripResolver = mapper.readValue(json, MetadataResolver) diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/security/controller/UsersControllerIntegrationTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/security/controller/UsersControllerIntegrationTests.groovy index b07a304ab..4805dcaae 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/security/controller/UsersControllerIntegrationTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/security/controller/UsersControllerIntegrationTests.groovy @@ -27,8 +27,13 @@ import org.springframework.web.util.NestedServletException import java.time.LocalDateTime import java.time.format.DateTimeFormatter -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.* -import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.* +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.patch +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status @ContextConfiguration(classes=[UCILocalConfig]) @Rollback @@ -140,12 +145,12 @@ class UsersControllerIntegrationTests extends AbstractBaseDataJpaTest { .andExpect(jsonPath("\$.[1].emailAddress").value("peter@institution.edu")) .andExpect(jsonPath("\$.[1].role").value("ROLE_USER")) .andExpect(jsonPath("\$.[1].groupId").value("nonadmin")) - .andExpect(jsonPath("\$.[1].userGroups.[0].validationRegex").value("/(?:)/")) + .andExpect(jsonPath("\$.[1].userGroups.[0].validationRegex").value(Group.DEFAULT_REGEX)) .andExpect(jsonPath("\$.[2].username").value("none")) .andExpect(jsonPath("\$.[2].emailAddress").value("badboy@institution.edu")) .andExpect(jsonPath("\$.[2].role").value("ROLE_NONE")) .andExpect(jsonPath("\$.[2].groupId").value("none")) - .andExpect(jsonPath("\$.[2].userGroups.[0].validationRegex").value("/(?:)/")) + .andExpect(jsonPath("\$.[2].userGroups.[0].validationRegex").value(Group.DEFAULT_REGEX)) .andExpect(jsonPath("\$.[3].username").value("anonymousUser")) .andExpect(jsonPath("\$.[3].emailAddress").value("anon@institution.edu")) .andExpect(jsonPath("\$.[3].role").value("ROLE_ADMIN")) diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/IncommonJPAMetadataResolverServiceImplTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/IncommonJPAMetadataResolverServiceImplTests.groovy index f5230c410..a44b4beed 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/IncommonJPAMetadataResolverServiceImplTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/IncommonJPAMetadataResolverServiceImplTests.groovy @@ -1,14 +1,12 @@ package edu.internet2.tier.shibboleth.admin.ui.service import edu.internet2.tier.shibboleth.admin.ui.AbstractBaseDataJpaTest -import edu.internet2.tier.shibboleth.admin.ui.configuration.ShibUIConfiguration import edu.internet2.tier.shibboleth.admin.ui.domain.XSString 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.filters.RequiredValidUntilFilter import edu.internet2.tier.shibboleth.admin.ui.domain.filters.SignatureValidationFilter -import edu.internet2.tier.shibboleth.admin.ui.opensaml.OpenSamlObjects import edu.internet2.tier.shibboleth.admin.ui.repository.MetadataResolverRepository import edu.internet2.tier.shibboleth.admin.ui.repository.MetadataResolversPositionOrderContainerRepository import edu.internet2.tier.shibboleth.admin.ui.util.TestObjectGenerator @@ -20,7 +18,7 @@ import org.springframework.boot.test.context.TestConfiguration import org.springframework.context.annotation.Bean import org.springframework.test.context.ContextConfiguration -import static edu.internet2.tier.shibboleth.admin.ui.util.TestHelpers.* +import static edu.internet2.tier.shibboleth.admin.ui.util.TestHelpers.generatedXmlIsTheSameAsExpectedXml @ContextConfiguration(classes = [IJPAMRSILocalConfig]) class IncommonJPAMetadataResolverServiceImplTests extends AbstractBaseDataJpaTest { @@ -96,25 +94,6 @@ class IncommonJPAMetadataResolverServiceImplTests extends AbstractBaseDataJpaTes @TestConfiguration private static class IJPAMRSILocalConfig { -// @Bean -// DirectoryService directoryService() { -// return new DirectoryServiceImpl() -// } - - @Bean - JPAMetadataResolverServiceImpl jpaMetadataResolverService(MetadataResolver metadataResolver, MetadataResolverRepository metadataResolverRepository, - OpenSamlObjects openSamlObjects, MetadataResolversPositionOrderContainerService resolversPositionOrderContainerService, - ShibUIConfiguration shibUIConfiguration) { - return new JPAMetadataResolverServiceImpl().with { - it.metadataResolver = metadataResolver - it.metadataResolverRepository = metadataResolverRepository - it.openSamlObjects = openSamlObjects - it.resolversPositionOrderContainerService = resolversPositionOrderContainerService - it.shibUIConfiguration = shibUIConfiguration - it - } - } - @Bean MetadataResolver metadataResolver(AttributeUtility attributeUtility, MetadataResolverRepository metadataResolverRepository) { def resolver = new ChainingMetadataResolver().with { diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAEntityDescriptorServiceImplTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAEntityDescriptorServiceImplTests.groovy index e2c8bc5bf..243779b27 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAEntityDescriptorServiceImplTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAEntityDescriptorServiceImplTests.groovy @@ -42,15 +42,16 @@ class JPAEntityDescriptorServiceImplTests extends AbstractBaseDataJpaTest { @Autowired JPAEntityDescriptorServiceImpl service + @Autowired + TestObjectGenerator testObjectGenerator + RandomGenerator generator JacksonTester jacksonTester ObjectMapper mapper = new ObjectMapper() - def testObjectGenerator def setup() { JacksonTester.initFields(this, mapper) generator = new RandomGenerator() - testObjectGenerator = new TestObjectGenerator() EntityDescriptorConversionUtils.openSamlObjects = openSamlObjects EntityDescriptorConversionUtils.entityService = entityService openSamlObjects.init() diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAFilterServiceImplTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAFilterServiceImplTests.groovy index 5c4d192c2..68ca161c1 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAFilterServiceImplTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAFilterServiceImplTests.groovy @@ -1,11 +1,9 @@ package edu.internet2.tier.shibboleth.admin.ui.service import edu.internet2.tier.shibboleth.admin.ui.AbstractBaseDataJpaTest -import edu.internet2.tier.shibboleth.admin.ui.configuration.CustomPropertiesConfiguration import edu.internet2.tier.shibboleth.admin.ui.util.RandomGenerator import edu.internet2.tier.shibboleth.admin.ui.util.TestHelpers import edu.internet2.tier.shibboleth.admin.ui.util.TestObjectGenerator -import edu.internet2.tier.shibboleth.admin.util.AttributeUtility import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.context.TestConfiguration import org.springframework.context.annotation.Bean @@ -18,20 +16,15 @@ import org.springframework.test.context.ContextConfiguration class JPAFilterServiceImplTests extends AbstractBaseDataJpaTest { @Autowired - AttributeUtility attributeUtility - - @Autowired - CustomPropertiesConfiguration customPropertiesConfiguration + JPAFilterServiceImpl filterService @Autowired - JPAFilterServiceImpl filterService + TestObjectGenerator testObjectGenerator RandomGenerator randomGenerator - TestObjectGenerator testObjectGenerator def setup() { randomGenerator = new RandomGenerator() - testObjectGenerator = new TestObjectGenerator(attributeUtility, customPropertiesConfiguration) } def "createFilterFromRepresentation properly creates a filter from a representation"() { @@ -82,16 +75,6 @@ class JPAFilterServiceImplTests extends AbstractBaseDataJpaTest { @TestConfiguration private static class JPAFSIConfig { - @Bean - JPAFilterServiceImpl jpaFilterServiceImpl(EntityDescriptorService entityDescriptorService, EntityService entityService, FilterTargetService filterTargetService) { - return new JPAFilterServiceImpl().with { - it.entityDescriptorService = entityDescriptorService - it.entityService = entityService - it.filterTargetService = filterTargetService - it - } - } - @Bean JPAFilterTargetServiceImpl jpaFilterTargetService() { return new JPAFilterTargetServiceImpl() diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAFilterTargetServiceImplTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAFilterTargetServiceImplTests.groovy index 0ceaaa82e..376e23732 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAFilterTargetServiceImplTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAFilterTargetServiceImplTests.groovy @@ -1,22 +1,23 @@ package edu.internet2.tier.shibboleth.admin.ui.service +import edu.internet2.tier.shibboleth.admin.ui.AbstractBaseDataJpaTest import edu.internet2.tier.shibboleth.admin.ui.util.RandomGenerator import edu.internet2.tier.shibboleth.admin.ui.util.TestObjectGenerator +import org.springframework.beans.factory.annotation.Autowired import spock.lang.Specification /** * @author Bill Smith (wsmith@unicon.net) */ -class JPAFilterTargetServiceImplTests extends Specification { - - RandomGenerator randomGenerator +class JPAFilterTargetServiceImplTests extends AbstractBaseDataJpaTest { + @Autowired TestObjectGenerator testObjectGenerator + RandomGenerator randomGenerator JPAFilterTargetServiceImpl service def setup() { randomGenerator = new RandomGenerator() - testObjectGenerator = new TestObjectGenerator() service = new JPAFilterTargetServiceImpl() } @@ -44,4 +45,4 @@ class JPAFilterTargetServiceImplTests extends Specification { results.type == filterTarget.entityAttributesFilterTargetType.toString() results.version == filterTarget.hashCode() } -} +} \ No newline at end of file diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImplTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImplTests.groovy index 32731c64a..f61d647fe 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImplTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/service/JPAMetadataResolverServiceImplTests.groovy @@ -18,7 +18,6 @@ import edu.internet2.tier.shibboleth.admin.ui.domain.resolvers.opensaml.OpenSaml import edu.internet2.tier.shibboleth.admin.ui.opensaml.OpenSamlObjects 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.xml.DOMBuilder import groovy.xml.MarkupBuilder import net.shibboleth.ext.spring.resource.ResourceHelper @@ -42,8 +41,6 @@ import static edu.internet2.tier.shibboleth.admin.ui.util.TestHelpers.generatedX @ContextConfiguration(classes=[ JPAMRSIConfig, PlaceholderResolverComponentsConfiguration ]) class JPAMetadataResolverServiceImplTests extends AbstractBaseDataJpaTest { - @Autowired - AttributeUtility attributeUtility @Autowired EntityService entityService @@ -66,13 +63,14 @@ class JPAMetadataResolverServiceImplTests extends AbstractBaseDataJpaTest { @Autowired ShibUIConfiguration shibUIConfiguration + @Autowired TestObjectGenerator testObjectGenerator + DOMBuilder domBuilder = DOMBuilder.newInstance() StringWriter writer = new StringWriter() MarkupBuilder markupBuilder def setup() { - testObjectGenerator = new TestObjectGenerator(attributeUtility) markupBuilder = new MarkupBuilder(writer) markupBuilder.omitNullAttributes = true markupBuilder.omitEmptyAttributes = true diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/EntityDescriptorConversionUtilsTests.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/EntityDescriptorConversionUtilsTests.groovy index d6235e632..321ef2b38 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/EntityDescriptorConversionUtilsTests.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/EntityDescriptorConversionUtilsTests.groovy @@ -59,7 +59,7 @@ class EntityDescriptorConversionUtilsTests extends Specification { expected.name = 'testName' when: - def keyDescriptor = createKeyDescriptor('testName', 'signing', 'testValue') + def keyDescriptor = EntityDescriptorConversionUtils.createKeyDescriptor('testName', 'signing', 'testValue') then: assert keyDescriptor == expected @@ -85,8 +85,8 @@ class EntityDescriptorConversionUtilsTests extends Specification { def 'test createKeyDescriptor equality'() { when: - def key1 = createKeyDescriptor('test', 'signing', 'test') - def key2 = createKeyDescriptor('test', 'signing', 'test') + def key1 = EntityDescriptorConversionUtils.createKeyDescriptor('test', 'signing', 'test') + def key2 = EntityDescriptorConversionUtils.createKeyDescriptor('test', 'signing', 'test') then: assert key1 == key2 @@ -605,7 +605,7 @@ class EntityDescriptorConversionUtilsTests extends Specification { it.getRoleDescriptors().add( openSAMLObjects.buildDefaultInstanceOfType(SPSSODescriptor.class).with { it.addKeyDescriptor( - createKeyDescriptor('test', 'signing', 'test')) + utilsUnderTest.createKeyDescriptor('test', 'signing', 'test')) it } ) @@ -629,7 +629,7 @@ class EntityDescriptorConversionUtilsTests extends Specification { starter: openSAMLObjects.buildDefaultInstanceOfType(EntityDescriptor.class).with { it.getRoleDescriptors().add( openSAMLObjects.buildDefaultInstanceOfType(SPSSODescriptor.class).with { - it.addKeyDescriptor(createKeyDescriptor('test', 'signing', 'test')) + it.addKeyDescriptor(utilsUnderTest.createKeyDescriptor('test', 'signing', 'test')) it } ) @@ -638,8 +638,8 @@ class EntityDescriptorConversionUtilsTests extends Specification { expected: openSAMLObjects.buildDefaultInstanceOfType(EntityDescriptor.class).with { it.getRoleDescriptors().add( openSAMLObjects.buildDefaultInstanceOfType(SPSSODescriptor.class).with { - it.addKeyDescriptor(createKeyDescriptor('test', 'signing', 'test')) - it.addKeyDescriptor(createKeyDescriptor('test2', 'encryption', 'test2')) + it.addKeyDescriptor(utilsUnderTest.createKeyDescriptor('test', 'signing', 'test')) + it.addKeyDescriptor(utilsUnderTest.createKeyDescriptor('test2', 'encryption', 'test2')) it } ) @@ -662,8 +662,8 @@ class EntityDescriptorConversionUtilsTests extends Specification { starter: openSAMLObjects.buildDefaultInstanceOfType(EntityDescriptor.class).with { it.getRoleDescriptors().add( openSAMLObjects.buildDefaultInstanceOfType(SPSSODescriptor.class).with { - it.addKeyDescriptor(createKeyDescriptor('test', 'signing', 'test')) - it.addKeyDescriptor(createKeyDescriptor('test2', 'encryption', 'test2')) + it.addKeyDescriptor(utilsUnderTest.createKeyDescriptor('test', 'signing', 'test')) + it.addKeyDescriptor(utilsUnderTest.createKeyDescriptor('test2', 'encryption', 'test2')) it } ) @@ -672,7 +672,7 @@ class EntityDescriptorConversionUtilsTests extends Specification { expected: openSAMLObjects.buildDefaultInstanceOfType(EntityDescriptor.class).with { it.getRoleDescriptors().add( openSAMLObjects.buildDefaultInstanceOfType(SPSSODescriptor.class).with { - it.addKeyDescriptor(createKeyDescriptor('test2', 'encryption', 'test2')) + it.addKeyDescriptor(utilsUnderTest.createKeyDescriptor('test2', 'encryption', 'test2')) it } ) @@ -692,8 +692,8 @@ class EntityDescriptorConversionUtilsTests extends Specification { starter: openSAMLObjects.buildDefaultInstanceOfType(EntityDescriptor.class).with { it.getRoleDescriptors().add( openSAMLObjects.buildDefaultInstanceOfType(SPSSODescriptor.class).with { - it.addKeyDescriptor(createKeyDescriptor('test', 'signing', 'test')) - it.addKeyDescriptor(createKeyDescriptor('test', 'encryption', 'test')) + it.addKeyDescriptor(utilsUnderTest.createKeyDescriptor('test', 'signing', 'test')) + it.addKeyDescriptor(utilsUnderTest.createKeyDescriptor('test', 'encryption', 'test')) it } ) @@ -713,8 +713,8 @@ class EntityDescriptorConversionUtilsTests extends Specification { starter: openSAMLObjects.buildDefaultInstanceOfType(EntityDescriptor.class).with { it.getRoleDescriptors().add( openSAMLObjects.buildDefaultInstanceOfType(SPSSODescriptor.class).with { - it.addKeyDescriptor(createKeyDescriptor('test', 'signing', 'test')) - it.addKeyDescriptor(createKeyDescriptor('test', 'encryption', 'test')) + it.addKeyDescriptor(utilsUnderTest.createKeyDescriptor('test', 'signing', 'test')) + it.addKeyDescriptor(utilsUnderTest.createKeyDescriptor('test', 'encryption', 'test')) it } ) diff --git a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/TestObjectGenerator.groovy b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/TestObjectGenerator.groovy index e91271c81..7ed0709df 100644 --- a/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/TestObjectGenerator.groovy +++ b/backend/src/test/groovy/edu/internet2/tier/shibboleth/admin/ui/util/TestObjectGenerator.groovy @@ -63,25 +63,25 @@ class TestObjectGenerator { this.customPropertiesConfiguration = customPropertiesConfiguration } - DynamicHttpMetadataResolver buildDynamicHttpMetadataResolver() { - def resolver = new DynamicHttpMetadataResolver().with { - it.dynamicMetadataResolverAttributes = buildDynamicMetadataResolverAttributes() - it.httpMetadataResolverAttributes = buildHttpMetadataResolverAttributes() - it.maxConnectionsPerRoute = generator.randomInt(1, 100) - it.maxConnectionsTotal = generator.randomInt(1, 100) - it.supportedContentTypes = generator.randomStringList() - it.name = generator.randomString(10) - it.requireValidMetadata = generator.randomBoolean() - it.failFastInitialization = generator.randomBoolean() - it.sortKey = generator.randomInt(1, 10) - it.criterionPredicateRegistryRef = generator.randomString(10) - it.useDefaultPredicateRegistry = generator.randomBoolean() - it.satisfyAnyPredicates = generator.randomBoolean() - it.metadataFilters = buildAllTypesOfFilterList() - it - } - return resolver - } +// DynamicHttpMetadataResolver buildDynamicHttpMetadataResolver() { +// def resolver = new DynamicHttpMetadataResolver().with { +// it.dynamicMetadataResolverAttributes = buildDynamicMetadataResolverAttributes() +// it.httpMetadataResolverAttributes = buildHttpMetadataResolverAttributes() +// it.maxConnectionsPerRoute = generator.randomInt(1, 100) +// it.maxConnectionsTotal = generator.randomInt(1, 100) +// it.supportedContentTypes = generator.randomStringList() +// it.name = generator.randomString(10) +// it.requireValidMetadata = generator.randomBoolean() +// it.failFastInitialization = generator.randomBoolean() +// it.sortKey = generator.randomInt(1, 10) +// it.criterionPredicateRegistryRef = generator.randomString(10) +// it.useDefaultPredicateRegistry = generator.randomBoolean() +// it.satisfyAnyPredicates = generator.randomBoolean() +// it.metadataFilters = buildAllTypesOfFilterList() +// it +// } +// return resolver +// } HttpMetadataResolverAttributes buildHttpMetadataResolverAttributes() { def attributes = new HttpMetadataResolverAttributes().with { @@ -109,24 +109,24 @@ class TestObjectGenerator { HttpMetadataResolverAttributes.HttpCachingType.values()[generator.randomInt(0, 2)] } - LocalDynamicMetadataResolver buildLocalDynamicMetadataResolver() { - def resolver = new LocalDynamicMetadataResolver().with { - it.dynamicMetadataResolverAttributes = buildDynamicMetadataResolverAttributes() - it.sourceDirectory = generator.randomString(10) - it.sourceKeyGeneratorRef = generator.randomString(10) - it.sourceManagerRef = generator.randomString(10) - it.failFastInitialization = generator.randomBoolean() - it.name = generator.randomString(10) - it.requireValidMetadata = generator.randomBoolean() - it.useDefaultPredicateRegistry = generator.randomBoolean() - it.criterionPredicateRegistryRef = generator.randomString(10) - it.satisfyAnyPredicates = generator.randomBoolean() - it.sortKey = generator.randomInt(1, 10) - it.metadataFilters = buildAllTypesOfFilterList() - it - } - return resolver - } +// LocalDynamicMetadataResolver buildLocalDynamicMetadataResolver() { +// def resolver = new LocalDynamicMetadataResolver().with { +// it.dynamicMetadataResolverAttributes = buildDynamicMetadataResolverAttributes() +// it.sourceDirectory = generator.randomString(10) +// it.sourceKeyGeneratorRef = generator.randomString(10) +// it.sourceManagerRef = generator.randomString(10) +// it.failFastInitialization = generator.randomBoolean() +// it.name = generator.randomString(10) +// it.requireValidMetadata = generator.randomBoolean() +// it.useDefaultPredicateRegistry = generator.randomBoolean() +// it.criterionPredicateRegistryRef = generator.randomString(10) +// it.satisfyAnyPredicates = generator.randomBoolean() +// it.sortKey = generator.randomInt(1, 10) +// it.metadataFilters = buildAllTypesOfFilterList() +// it +// } +// return resolver +// } DynamicMetadataResolverAttributes buildDynamicMetadataResolverAttributes() { def attributes = new DynamicMetadataResolverAttributes().with { @@ -151,13 +151,11 @@ class TestObjectGenerator { List buildAllTypesOfFilterList() { List filterList = new ArrayList<>() - (1..generator.randomInt(4, 10)).each { - filterList.add(buildFilter { entityAttributesFilter() }) - filterList.add(buildFilter { entityRoleWhitelistFilter() }) - filterList.add(buildFilter { signatureValidationFilter() }) - filterList.add(buildFilter { requiredValidUntilFilter() }) - filterList.add(buildFilter { nameIdFormatFilter() }) - } + filterList.add(buildFilter { entityAttributesFilter() }) + filterList.add(buildFilter { entityRoleWhitelistFilter() }) + filterList.add(buildFilter { signatureValidationFilter() }) + filterList.add(buildFilter { requiredValidUntilFilter() }) + filterList.add(buildFilter { nameIdFormatFilter() }) return filterList } @@ -180,7 +178,7 @@ class TestObjectGenerator { randomFilter = nameIdFormatFilter() break default: - throw new RuntimeException("Did you forget to create a TestObjectGenerator.copyOf method for filtertype: ${filterType} ?"); + throw new RuntimeException("Did you forget to create a TestObjectGenerator.copyOf method for filtertype: ${filterType} ?") } randomFilter } @@ -320,33 +318,27 @@ class TestObjectGenerator { List attributes = new ArrayList<>() customPropertiesConfiguration.getOverrides().each { override -> - if (generator.randomBoolean()) { - switch (ModelRepresentationConversions.AttributeTypes.valueOf(override.getDisplayType().toUpperCase())) { - case ModelRepresentationConversions.AttributeTypes.BOOLEAN: - if (override.getPersistType() != null && - override.getPersistType() != override.getDisplayType()) { - attributes.add(attributeUtility.createAttributeWithStringValues(override.getAttributeName(), override.getAttributeFriendlyName(), override.persistValue)) - } else { - attributes.add(attributeUtility.createAttributeWithBooleanValue(override.getAttributeName(), override.getAttributeFriendlyName(), Boolean.valueOf(override.invert) ^ true)) - } - break - case ModelRepresentationConversions.AttributeTypes.INTEGER: - attributes.add(attributeUtility.createAttributeWithIntegerValue(override.getAttributeName(), override.getAttributeFriendlyName(), generator.randomInt(0, 999999))) - break - case ModelRepresentationConversions.AttributeTypes.STRING: - attributes.add(attributeUtility.createAttributeWithStringValues(override.getAttributeName(), override.getAttributeFriendlyName(), generator.randomString(30))) - break - case ModelRepresentationConversions.AttributeTypes.SET: - case ModelRepresentationConversions.AttributeTypes.LIST: - attributes.add(attributeUtility.createAttributeWithStringValues(override.getAttributeName(), override.getAttributeFriendlyName(), generator.randomStringList())) - break - } + switch (ModelRepresentationConversions.AttributeTypes.valueOf(override.getDisplayType().toUpperCase())) { + case ModelRepresentationConversions.AttributeTypes.BOOLEAN: + if (override.getPersistType() != null && override.getPersistType() != override.getDisplayType()) { + attributes.add(attributeUtility.createAttributeWithStringValues(override.getAttributeName(), override.getAttributeFriendlyName(), override.persistValue)) + } else { + attributes.add(attributeUtility.createAttributeWithBooleanValue(override.getAttributeName(), override.getAttributeFriendlyName(), Boolean.valueOf(override.invert) ^ true)) + } + break + case ModelRepresentationConversions.AttributeTypes.INTEGER: + attributes.add(attributeUtility.createAttributeWithIntegerValue(override.getAttributeName(), override.getAttributeFriendlyName(), generator.randomInt(0, 999999))) + break + case ModelRepresentationConversions.AttributeTypes.STRING: + attributes.add(attributeUtility.createAttributeWithStringValues(override.getAttributeName(), override.getAttributeFriendlyName(), generator.randomString(30))) + break + case ModelRepresentationConversions.AttributeTypes.SET: + case ModelRepresentationConversions.AttributeTypes.LIST: + attributes.add(attributeUtility.createAttributeWithStringValues(override.getAttributeName(), override.getAttributeFriendlyName(), generator.randomStringList())) + break } } - if (generator.randomBoolean()) { - attributes.add(attributeUtility.createAttributeWithStringValues(MDDCConstants.RELEASE_ATTRIBUTES, generator.randomStringList())) - } - + attributes.add(attributeUtility.createAttributeWithStringValues(MDDCConstants.RELEASE_ATTRIBUTES, generator.randomStringList())) return attributes } @@ -405,7 +397,6 @@ class TestObjectGenerator { EntityAttributesFilterTarget entityAttributesFilterTarget = new EntityAttributesFilterTarget() entityAttributesFilterTarget.setEntityAttributesFilterTargetType(EntityAttributesFilterTargetType.ENTITY) entityAttributesFilterTarget.setSingleValue(buildEntityAttributesFilterTargetValueByType(EntityAttributesFilterTargetType.ENTITY)) - return entityAttributesFilterTarget } @@ -481,7 +472,7 @@ class TestObjectGenerator { } ContactPerson buildContactPerson() { - ContactPerson contactPerson = new ContactPerson(); + ContactPerson contactPerson = new ContactPerson() contactPerson.setNamespaceURI(generator.randomString(20)) contactPerson.setElementLocalName(generator.randomString(20)) @@ -507,9 +498,9 @@ class TestObjectGenerator { break case 'Filesystem': randomResolver = filesystemMetadataResolver() - break; + break default: - throw new RuntimeException("Did you forget to create a TestObjectGenerator.MetadataResolver method for resolverType: ${metadataResolverType} ?"); + throw new RuntimeException("Did you forget to create a TestObjectGenerator.MetadataResolver method for resolverType: ${metadataResolverType} ?") } randomResolver } @@ -582,25 +573,25 @@ class TestObjectGenerator { } } - ResourceBackedMetadataResolver resourceBackedMetadataResolverForSVN() { - new ResourceBackedMetadataResolver().with { - it.name = 'SVNResourceMetadata' - it.xmlId = 'SVNResourceMetadata' - it.svnMetadataResource = new SvnMetadataResource().with { - it.resourceFile = 'entity.xml' - it.repositoryURL = 'https://svn.example.org/repo/path/to.dir' - it.workingCopyDirectory = '%{idp.home}/metadata/svn' - it - } - it.reloadableMetadataResolverAttributes = new ReloadableMetadataResolverAttributes().with { - it - } - // Changes in MetadataResolver (removing defaults), so adding back those settings here. - it.enabled = Boolean.TRUE - it.doInitialization = Boolean.TRUE - it - } - } +// ResourceBackedMetadataResolver resourceBackedMetadataResolverForSVN() { +// new ResourceBackedMetadataResolver().with { +// it.name = 'SVNResourceMetadata' +// it.xmlId = 'SVNResourceMetadata' +// it.svnMetadataResource = new SvnMetadataResource().with { +// it.resourceFile = 'entity.xml' +// it.repositoryURL = 'https://svn.example.org/repo/path/to.dir' +// it.workingCopyDirectory = '%{idp.home}/metadata/svn' +// it +// } +// it.reloadableMetadataResolverAttributes = new ReloadableMetadataResolverAttributes().with { +// it +// } +// // Changes in MetadataResolver (removing defaults), so adding back those settings here. +// it.enabled = Boolean.TRUE +// it.doInitialization = Boolean.TRUE +// it +// } +// } ResourceBackedMetadataResolver resourceBackedMetadataResolverForClasspath() { new ResourceBackedMetadataResolver().with { @@ -630,7 +621,7 @@ class TestObjectGenerator { resolver.criterionPredicateRegistryRef = generator.randomString(10) resolver.useDefaultPredicateRegistry = generator.randomBoolean() resolver.satisfyAnyPredicates = generator.randomBoolean() - resolver.metadataFilters = [] + resolver.metadataFilters = [entityAttributesFilter(), entityRoleWhitelistFilter()] resolver.reloadableMetadataResolverAttributes = buildReloadableMetadataResolverAttributes() resolver.httpMetadataResolverAttributes = buildHttpMetadataResolverAttributes() return resolver diff --git a/pac4j-module/src/main/java/net/unicon/shibui/pac4j/AddNewUserFilter.java b/pac4j-module/src/main/java/net/unicon/shibui/pac4j/AddNewUserFilter.java index ee440c13f..2d89d3151 100644 --- a/pac4j-module/src/main/java/net/unicon/shibui/pac4j/AddNewUserFilter.java +++ b/pac4j-module/src/main/java/net/unicon/shibui/pac4j/AddNewUserFilter.java @@ -1,6 +1,7 @@ package net.unicon.shibui.pac4j; import edu.internet2.tier.shibboleth.admin.ui.security.exception.GroupExistsConflictException; +import edu.internet2.tier.shibboleth.admin.ui.security.exception.InvalidGroupRegexException; import edu.internet2.tier.shibboleth.admin.ui.security.model.Group; import edu.internet2.tier.shibboleth.admin.ui.security.model.Role; import edu.internet2.tier.shibboleth.admin.ui.security.model.User; @@ -140,7 +141,7 @@ private Set findOrCreateGroups(ArrayList groupNames) { try { groupService.createGroup(g); } - catch (GroupExistsConflictException shouldntHappen) { + catch (GroupExistsConflictException | InvalidGroupRegexException shouldntHappen) { } } result.add(g); diff --git a/ui/src/app/metadata/wizard/MetadataSourceWizard.js b/ui/src/app/metadata/wizard/MetadataSourceWizard.js index 3cf1ad32b..6973f1e9c 100644 --- a/ui/src/app/metadata/wizard/MetadataSourceWizard.js +++ b/ui/src/app/metadata/wizard/MetadataSourceWizard.js @@ -12,14 +12,16 @@ import { useMetadataDefinitionContext, useMetadataSchemaContext, useMetadataDefi import { useMetadataFormDispatcher, setFormDataAction, setFormErrorAction, useMetadataFormData, useMetadataFormErrors } from '../hoc/MetadataFormContext'; import { MetadataConfiguration } from '../component/MetadataConfiguration'; import { Configuration } from '../hoc/Configuration'; -import { useMetadataSources } from '../hooks/api'; +import { useMetadataEntity, useMetadataSources } from '../hooks/api'; +import { Prompt, useHistory } from 'react-router'; +import { removeNull } from '../../core/utility/remove_null'; import Translate from '../../i18n/components/translate'; import { checkChanges } from '../hooks/utility'; import { useUserGroup } from '../../core/user/UserContext'; -export function MetadataSourceWizard ({ onShowNav, onSave, block, loading }) { +export function MetadataSourceWizard ({ onShowNav, onSave, block }) { const { post, loading, response } = useMetadataEntity('source'); const history = useHistory();