re base code
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / impl / instance / PolicyTargetsUpdateOperationTest.java
@@ -1,14 +1,4 @@
-package org.openecomp.sdc.be.components.impl.version;
-
-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;
-
-import java.util.List;
-import java.util.stream.Stream;
+package org.openecomp.sdc.be.components.impl.instance;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -17,6 +7,8 @@ import org.mockito.ArgumentCaptor;
 import org.mockito.Captor;
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
+import org.openecomp.sdc.be.components.impl.policy.PolicyTargetsUpdateHandler;
+import org.openecomp.sdc.be.components.impl.policy.PolicyTargetsUpdater;
 import org.openecomp.sdc.be.components.utils.ComponentInstanceBuilder;
 import org.openecomp.sdc.be.components.utils.PolicyDefinitionBuilder;
 import org.openecomp.sdc.be.components.utils.ResourceBuilder;
@@ -28,6 +20,16 @@ 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)
 public class PolicyTargetsUpdateOperationTest {
 
@@ -39,25 +41,26 @@ public class PolicyTargetsUpdateOperationTest {
 
     @Captor
     private ArgumentCaptor<List<PolicyDefinition>> updatedPoliciesCaptor;
-    private PolicyDefinition policy1, policy2, policy3;
+    private PolicyDefinition policyWithInstanceTarget1, policyWithInstanceTarget2, policyWithInstanceTarget3;
     private Resource container;
 
     @Before
     public void setUp() throws Exception {
-        policy1 = createPolicyWithCmptInstAsTargets("policy1", "inst1", "inst2");
-        policy2 = createPolicyWithCmptInstAsTargets("policy2", "inst1", "inst2", "inst3");
-        policy3 = createPolicyWithCmptInstAsTargets("policy3", "inst1", "inst3");
+        policyWithInstanceTarget1 = createPolicyWithCmptInstAsTargets("policy1", "inst1", "inst2");
+        policyWithInstanceTarget2 = createPolicyWithCmptInstAsTargets("policy2", "inst1", "inst2", "inst3");
+        policyWithInstanceTarget3 = createPolicyWithCmptInstAsTargets("policy3", "inst1", "inst3");
         container = new ResourceBuilder()
-                .addPolicy(policy1)
-                .addPolicy(policy2)
-                .addPolicy(policy3)
+                .addPolicy(policyWithInstanceTarget1)
+                .addPolicy(policyWithInstanceTarget2)
+                .addPolicy(policyWithInstanceTarget3)
                 .setUniqueId(CONTAINER_ID)
                 .build();
-        policyTargetsUpdateOperation = new PolicyTargetsUpdateOperation(toscaOperationFacade, getComponentsUtils());
+        PolicyTargetsUpdateHandler policyTargetsUpdateHandler = new PolicyTargetsUpdateHandler(toscaOperationFacade, getComponentsUtils(), new PolicyTargetsUpdater());
+        policyTargetsUpdateOperation = new PolicyTargetsUpdateOperation(policyTargetsUpdateHandler);
     }
 
     @Test
-    public void whenNoPolicies_returnActionOk() {
+    public void onChangeVersion_whenNoPolicies_returnActionOk() {
         Component container = new Resource();
         ComponentInstance prevVersion = new ComponentInstanceBuilder().setId("prevVersion").build();
         ComponentInstance newVersion = new ComponentInstanceBuilder().setId("newVersion").build();
@@ -67,7 +70,7 @@ public class PolicyTargetsUpdateOperationTest {
     }
 
     @Test
-    public void whenNoCmptInstancePolicies_returnOk() {
+    public void onChangeVersion_whenNoCmptInstancePolicies_returnOk() {
         PolicyDefinition policy = PolicyDefinitionBuilder.create().addGroupTarget("someGroup").build();
         Component container = new ResourceBuilder().addPolicy(policy).build();
         ComponentInstance prevVersion = new ComponentInstanceBuilder().setId("prevVersion").build();
@@ -78,7 +81,7 @@ public class PolicyTargetsUpdateOperationTest {
     }
 
     @Test
-    public void whenNoPoliciesWithPrevInstanceAsTarget_returnActionOk() {
+    public void onChangeVersion_whenNoPoliciesWithPrevInstanceAsTarget_returnActionOk() {
         ComponentInstance prevVersion = new ComponentInstanceBuilder().setId("prevVersion").build();
         ComponentInstance newVersion = new ComponentInstanceBuilder().setId("newVersion").build();
         ActionStatus operationStatus = policyTargetsUpdateOperation.onChangeVersion(container, prevVersion, newVersion);
@@ -87,20 +90,20 @@ public class PolicyTargetsUpdateOperationTest {
     }
 
     @Test
-    public void replacePrevCmptInstanceIdWithNewInstanceIdAndUpdatePolicies() {
+    public void onChangeVersion_replacePrevCmptInstanceIdWithNewInstanceIdAndUpdatePolicies() {
         ComponentInstance prevVersion = new ComponentInstanceBuilder().setId("inst2").build();
         ComponentInstance newVersion = new ComponentInstanceBuilder().setId("inst2New").build();
         when(toscaOperationFacade.updatePoliciesOfComponent(eq(CONTAINER_ID), updatedPoliciesCaptor.capture())).thenReturn(StorageOperationStatus.OK);
         ActionStatus updatePoliciesRes = policyTargetsUpdateOperation.onChangeVersion(container, prevVersion, newVersion);
         assertThat(updatePoliciesRes).isEqualTo(ActionStatus.OK);
         List<PolicyDefinition> updatedPolicies = updatedPoliciesCaptor.getValue();
-        verifyUpdatedPolicies(updatedPolicies, policy1, policy2);//policy3 does not have "inst2" as target, no update needed
-        verifyUpdatedPolicyTargets(policy1, "inst1", "inst2New");
-        verifyUpdatedPolicyTargets(policy2, "inst1", "inst2New", "inst3");
+        verifyUpdatedPolicies(updatedPolicies, policyWithInstanceTarget1, policyWithInstanceTarget2);//policy3 does not have "inst2" as target, no update needed
+        verifyUpdatedPolicyTargets(policyWithInstanceTarget1, "inst1", "inst2New");
+        verifyUpdatedPolicyTargets(policyWithInstanceTarget2, "inst1", "inst2New", "inst3");
     }
 
     @Test
-    public void whenUpdateOfPoliciesFails_propagateTheFailure() {
+    public void onChangeVersion_whenUpdateOfPoliciesFails_propagateTheFailure() {
         ComponentInstance prevVersion = new ComponentInstanceBuilder().setId("inst2").build();
         ComponentInstance newVersion = new ComponentInstanceBuilder().setId("inst2New").build();
         when(toscaOperationFacade.updatePoliciesOfComponent(eq(CONTAINER_ID), anyList())).thenReturn(StorageOperationStatus.GENERAL_ERROR);
@@ -108,6 +111,48 @@ public class PolicyTargetsUpdateOperationTest {
         assertThat(updatePoliciesRes).isEqualTo(ActionStatus.GENERAL_ERROR);
     }
 
+    @Test
+    public void onDeleteInstance_whenNoPolicies_returnActionOk() {
+        Component container = new Resource();
+        ActionStatus operationStatus = policyTargetsUpdateOperation.onDelete(container, "instToDel");
+        assertThat(operationStatus).isEqualTo(ActionStatus.OK);
+        verifyZeroInteractions(toscaOperationFacade);
+    }
+
+    @Test
+    public void onDeleteInstance_whenNoCmptInstancePolicies_returnOk() {
+        PolicyDefinition policy = PolicyDefinitionBuilder.create().addGroupTarget("someGroup").build();
+        Component container = new ResourceBuilder().addPolicy(policy).build();
+        ActionStatus operationStatus = policyTargetsUpdateOperation.onDelete(container, "instToDel");
+        assertThat(operationStatus).isEqualTo(ActionStatus.OK);
+        verifyZeroInteractions(toscaOperationFacade);
+    }
+
+    @Test
+    public void onDeleteInstance_whenNoPoliciesWithInstanceAsTarget_returnActionOk() {
+        ActionStatus operationStatus = policyTargetsUpdateOperation.onDelete(container, "instToDel");
+        assertThat(operationStatus).isEqualTo(ActionStatus.OK);
+        verifyZeroInteractions(toscaOperationFacade);
+    }
+
+    @Test
+    public void onDeleteInstance_removeDeletedTargetFromPolicies() {
+        when(toscaOperationFacade.updatePoliciesOfComponent(eq(CONTAINER_ID), updatedPoliciesCaptor.capture())).thenReturn(StorageOperationStatus.OK);
+        ActionStatus operationStatus = policyTargetsUpdateOperation.onDelete(container, "inst2");
+        assertThat(operationStatus).isEqualTo(ActionStatus.OK);
+        List<PolicyDefinition> updatedPolicies = updatedPoliciesCaptor.getValue();
+        verifyUpdatedPolicies(updatedPolicies, policyWithInstanceTarget1, policyWithInstanceTarget2);
+        verifyUpdatedPolicyTargets(policyWithInstanceTarget1, "inst1");
+        verifyUpdatedPolicyTargets(policyWithInstanceTarget2, "inst1", "inst3");
+    }
+
+    @Test
+    public void onDeleteInstance_whenFailingToUpdatePolicies_propagateTheError() {
+        when(toscaOperationFacade.updatePoliciesOfComponent(eq(CONTAINER_ID), anyList())).thenReturn(StorageOperationStatus.GENERAL_ERROR);
+        ActionStatus operationStatus = policyTargetsUpdateOperation.onDelete(container, "inst2");
+        assertThat(operationStatus).isEqualTo(ActionStatus.GENERAL_ERROR);
+    }
+
     private void verifyUpdatedPolicyTargets(PolicyDefinition updatedPolicy, String ... expectedCmptInstanceTargetIds) {
         assertThat(updatedPolicy.resolveComponentInstanceTargets())
                 .containsExactlyInAnyOrder(expectedCmptInstanceTargetIds);
@@ -124,4 +169,5 @@ public class PolicyTargetsUpdateOperationTest {
         Stream.of(instId).forEach(policyDefinitionBuilder::addComponentInstanceTarget);
         return policyDefinitionBuilder.setUniqueId(uniqueId).build();
     }
+
 }
\ No newline at end of file