diff options
author | Ittay Stern <ittay.stern@att.com> | 2020-01-27 19:09:19 +0200 |
---|---|---|
committer | Ittay Stern <ittay.stern@att.com> | 2020-01-28 12:13:46 +0200 |
commit | abb69004c16707e1dafa7a75050e8c026de9fe31 (patch) | |
tree | cced9ccdb8582665042b955db17c964562c9a5bb /vid-app-common | |
parent | 657353741044c8cda2bbca64e2fc235837428f25 (diff) |
RoleValidatorsComposer composite several RoleValidators together
Issue-ID: VID-758
Change-Id: I7bd5a4ebc8a0a451716af09cc76e6db6cd5362f7
Signed-off-by: Ittay Stern <ittay.stern@att.com>
Diffstat (limited to 'vid-app-common')
-rw-r--r-- | vid-app-common/src/main/java/org/onap/vid/roles/RoleValidatorsComposer.kt | 16 | ||||
-rw-r--r-- | vid-app-common/src/test/java/org/onap/vid/roles/RoleValidatorsComposerTest.java | 110 |
2 files changed, 126 insertions, 0 deletions
diff --git a/vid-app-common/src/main/java/org/onap/vid/roles/RoleValidatorsComposer.kt b/vid-app-common/src/main/java/org/onap/vid/roles/RoleValidatorsComposer.kt new file mode 100644 index 000000000..873622389 --- /dev/null +++ b/vid-app-common/src/main/java/org/onap/vid/roles/RoleValidatorsComposer.kt @@ -0,0 +1,16 @@ +package org.onap.vid.roles + +class RoleValidatorsComposer(private vararg val roleValidators: RoleValidator) : RoleValidator { + + constructor(roleValidators: Collection<RoleValidator>) : this(*roleValidators.toTypedArray()) + + override fun isServicePermitted(p: WithPermissionProperties): Boolean = + roleValidators.any { it.isServicePermitted(p) } + + override fun isSubscriberPermitted(subscriberName: String?): Boolean = + roleValidators.any { it.isSubscriberPermitted(subscriberName) } + + override fun isTenantPermitted(globalCustomerId: String?, serviceType: String?, tenantName: String?): Boolean = + roleValidators.any { it.isTenantPermitted(globalCustomerId, serviceType, tenantName) } + +} diff --git a/vid-app-common/src/test/java/org/onap/vid/roles/RoleValidatorsComposerTest.java b/vid-app-common/src/test/java/org/onap/vid/roles/RoleValidatorsComposerTest.java new file mode 100644 index 000000000..91ea953fb --- /dev/null +++ b/vid-app-common/src/test/java/org/onap/vid/roles/RoleValidatorsComposerTest.java @@ -0,0 +1,110 @@ +/*- + * ============LICENSE_START======================================================= + * VID + * ================================================================================ + * Copyright (C) 2017 - 2020 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.vid.roles; + +import static java.util.stream.Collectors.toList; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verifyZeroInteractions; +import static org.mockito.Mockito.withSettings; + +import com.google.common.collect.ImmutableSet; +import java.util.function.Function; +import java.util.stream.Stream; +import org.testng.annotations.BeforeMethod; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; + +public class RoleValidatorsComposerTest { + + private RoleValidator alwaysTrueRoles; + private RoleValidator alwaysFalseRoles; + + @DataProvider + public static Object[][] allInterfaceFunctions() { + return Stream.<Function<RoleValidator, Boolean>>of( + (RoleValidator o) -> o.isSubscriberPermitted("subscriberId"), + (RoleValidator o) -> o.isServicePermitted(new PermissionProperties("subscriberId", "serviceType")), + (RoleValidator o) -> o.isTenantPermitted("subscriberId", "serviceType", "tenantName") + ).map(it -> new Object[]{it}).collect(toList()).toArray(new Object[][]{}); + } + + @BeforeMethod + public void setUp() { + alwaysTrueRoles = mock(RoleValidator.class, withSettings().defaultAnswer(o -> true)); + alwaysFalseRoles = mock(RoleValidator.class); + } + + @Test(dataProvider = "allInterfaceFunctions") + public void emptyComposite_returnsFalse(Function<RoleValidator, Boolean> interfaceFunction) { + RoleValidatorsComposer underTest = new RoleValidatorsComposer(); + + assertThat( + interfaceFunction.apply(underTest), + is(false) + ); + + } + + @Test(dataProvider = "allInterfaceFunctions") + public void falseAndTrueComposite_returnsTrue(Function<RoleValidator, Boolean> interfaceFunction) { + RoleValidatorsComposer underTest = + new RoleValidatorsComposer(alwaysFalseRoles, alwaysFalseRoles, alwaysTrueRoles); + + assertThat( + interfaceFunction.apply(underTest), + is(true) + ); + } + + @Test(dataProvider = "allInterfaceFunctions") + public void trueAndFalseComposite_returnsTrueAndShortCircuits(Function<RoleValidator, Boolean> interfaceFunction) { + RoleValidatorsComposer underTest = new RoleValidatorsComposer(alwaysTrueRoles, alwaysFalseRoles); + + assertThat( + interfaceFunction.apply(underTest), + is(true) + ); + + verifyZeroInteractions(alwaysFalseRoles); + } + + @Test(dataProvider = "allInterfaceFunctions") + public void falseAndFalseComposite_returnsFalse(Function<RoleValidator, Boolean> interfaceFunction) { + RoleValidatorsComposer underTest = new RoleValidatorsComposer(alwaysFalseRoles, alwaysFalseRoles); + + assertThat( + interfaceFunction.apply(underTest), + is(false) + ); + } + + @Test + public void secondaryConstructor_givenSetIfValidators_returnsTrue() { + RoleValidatorsComposer underTest = new RoleValidatorsComposer( + ImmutableSet.of(alwaysTrueRoles) + ); + + assertThat(underTest.isSubscriberPermitted("anything"), is(true)); + } + +} |