aboutsummaryrefslogtreecommitdiffstats
path: root/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/policy/PolicyTargetsUpdateHandlerTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/policy/PolicyTargetsUpdateHandlerTest.java')
-rw-r--r--catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/policy/PolicyTargetsUpdateHandlerTest.java117
1 files changed, 117 insertions, 0 deletions
diff --git a/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/policy/PolicyTargetsUpdateHandlerTest.java b/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/policy/PolicyTargetsUpdateHandlerTest.java
new file mode 100644
index 0000000000..40dc3dbeb1
--- /dev/null
+++ b/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/policy/PolicyTargetsUpdateHandlerTest.java
@@ -0,0 +1,117 @@
+package org.openecomp.sdc.be.components.impl.policy;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.openecomp.sdc.be.components.impl.exceptions.ComponentException;
+import org.openecomp.sdc.be.components.utils.PolicyDefinitionBuilder;
+import org.openecomp.sdc.be.components.utils.ResourceBuilder;
+import org.openecomp.sdc.be.dao.api.ActionStatus;
+import org.openecomp.sdc.be.datatypes.elements.PolicyTargetType;
+import org.openecomp.sdc.be.model.Component;
+import org.openecomp.sdc.be.model.PolicyDefinition;
+import org.openecomp.sdc.be.model.Resource;
+import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
+import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
+
+import java.util.List;
+import java.util.stream.Stream;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.ArgumentMatchers.anyList;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.verifyZeroInteractions;
+import static org.mockito.Mockito.when;
+import static org.openecomp.sdc.be.components.impl.utils.TestGenerationUtils.getComponentsUtils;
+
+@RunWith(MockitoJUnitRunner.class)
+//note that this class only tests group targets, the tests for instance targets are under PolicyTargetsUpdateOperationTest
+public class PolicyTargetsUpdateHandlerTest {
+
+ private static final String CONTAINER_ID = "containerId";
+
+ private PolicyTargetsUpdateHandler testInstance;
+ @Mock
+ private ToscaOperationFacade toscaOperationFacade;
+ @Captor
+ private ArgumentCaptor<List<PolicyDefinition>> updatedPoliciesCaptor;
+ private PolicyDefinition policyWithGroupTarget1, policyWithGroupTarget2, policyWithGroupTarget3;
+ private Resource container;
+
+ @Before
+ public void setUp() throws Exception {
+ policyWithGroupTarget1 = createPolicyWithGroupsAsTargets("policy1", "group1", "group2");
+ policyWithGroupTarget2 = createPolicyWithGroupsAsTargets("policy2", "group1", "group2", "group3");
+ policyWithGroupTarget3 = createPolicyWithGroupsAsTargets("policy3", "group1", "group3");
+ container = new ResourceBuilder()
+ .addPolicy(policyWithGroupTarget1)
+ .addPolicy(policyWithGroupTarget2)
+ .addPolicy(policyWithGroupTarget3)
+ .setUniqueId(CONTAINER_ID)
+ .build();
+ testInstance = new PolicyTargetsUpdateHandler(toscaOperationFacade, getComponentsUtils(), new PolicyTargetsUpdater());
+ }
+
+
+ @Test
+ public void onDeleteInstance_whenNoPolicies_returnActionOk() {
+ Component container = new Resource();
+ testInstance.removePoliciesTargets(container, "groupToDel", PolicyTargetType.GROUPS);
+ verifyZeroInteractions(toscaOperationFacade);
+ }
+
+ @Test
+ public void onDeleteInstance_whenNoPoliciesWithGroupsAsTargets_returnOk() {
+ PolicyDefinition policy = PolicyDefinitionBuilder.create().addComponentInstanceTarget("someInst").build();
+ Component container = new ResourceBuilder().addPolicy(policy).build();
+ testInstance.removePoliciesTargets(container, "groupToDel", PolicyTargetType.GROUPS);
+ verifyZeroInteractions(toscaOperationFacade);
+ }
+
+ @Test
+ public void onDeleteInstance_whenNoPoliciesWithGivenGroupAsTarget_returnActionOk() {
+ testInstance.removePoliciesTargets(container, "groupToDel", PolicyTargetType.GROUPS);
+ verifyZeroInteractions(toscaOperationFacade);
+ }
+
+ @Test
+ public void onDeleteInstance_removeDeletedTargetFromPolicies() {
+ when(toscaOperationFacade.updatePoliciesOfComponent(eq(CONTAINER_ID), updatedPoliciesCaptor.capture())).thenReturn(StorageOperationStatus.OK);
+ testInstance.removePoliciesTargets(container, "group2", PolicyTargetType.GROUPS);
+ List<PolicyDefinition> updatedPolicies = updatedPoliciesCaptor.getValue();
+ verifyUpdatedPolicies(updatedPolicies, policyWithGroupTarget1, policyWithGroupTarget2);
+ verifyUpdatedPolicyTargets(policyWithGroupTarget1, "group1");
+ verifyUpdatedPolicyTargets(policyWithGroupTarget2, "group1", "group3");
+ }
+
+ @Test
+ public void onDeleteInstance_whenFailingToUpdatePolicies_throwException() {
+ when(toscaOperationFacade.updatePoliciesOfComponent(eq(CONTAINER_ID), anyList())).thenReturn(StorageOperationStatus.GENERAL_ERROR);
+ try {
+ testInstance.removePoliciesTargets(container, "group2", PolicyTargetType.GROUPS);
+ } catch (ComponentException e) {
+ assertThat(e.getActionStatus()).isEqualTo(ActionStatus.GENERAL_ERROR);
+ }
+ }
+
+ private void verifyUpdatedPolicyTargets(PolicyDefinition updatedPolicy, String ... expectedCmptInstanceTargetIds) {
+ assertThat(updatedPolicy.resolveGroupTargets())
+ .containsExactlyInAnyOrder(expectedCmptInstanceTargetIds);
+ }
+
+ private void verifyUpdatedPolicies(List<PolicyDefinition> updatedPolicies, PolicyDefinition ... expectedUpdatedPolicies) {
+ assertThat(updatedPolicies)
+ .usingElementComparatorOnFields("targets")
+ .containsExactlyInAnyOrder(expectedUpdatedPolicies);
+ }
+
+ private PolicyDefinition createPolicyWithGroupsAsTargets(String uniqueId, String ... groupId) {
+ PolicyDefinitionBuilder policyDefinitionBuilder = PolicyDefinitionBuilder.create();
+ Stream.of(groupId).forEach(policyDefinitionBuilder::addGroupTarget);
+ return policyDefinitionBuilder.setUniqueId(uniqueId).build();
+ }
+} \ No newline at end of file