1 package org.openecomp.sdc.be.components.impl.instance;
3 import org.junit.Before;
5 import org.junit.runner.RunWith;
6 import org.mockito.ArgumentCaptor;
7 import org.mockito.Captor;
8 import org.mockito.Mock;
9 import org.mockito.junit.MockitoJUnitRunner;
10 import org.openecomp.sdc.be.components.impl.policy.PolicyTargetsUpdateHandler;
11 import org.openecomp.sdc.be.components.impl.policy.PolicyTargetsUpdater;
12 import org.openecomp.sdc.be.components.utils.ComponentInstanceBuilder;
13 import org.openecomp.sdc.be.components.utils.PolicyDefinitionBuilder;
14 import org.openecomp.sdc.be.components.utils.ResourceBuilder;
15 import org.openecomp.sdc.be.dao.api.ActionStatus;
16 import org.openecomp.sdc.be.model.Component;
17 import org.openecomp.sdc.be.model.ComponentInstance;
18 import org.openecomp.sdc.be.model.PolicyDefinition;
19 import org.openecomp.sdc.be.model.Resource;
20 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
21 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
23 import java.util.List;
24 import java.util.stream.Stream;
26 import static org.assertj.core.api.Assertions.assertThat;
27 import static org.mockito.ArgumentMatchers.anyList;
28 import static org.mockito.ArgumentMatchers.eq;
29 import static org.mockito.Mockito.verifyZeroInteractions;
30 import static org.mockito.Mockito.when;
31 import static org.openecomp.sdc.be.components.impl.utils.TestGenerationUtils.getComponentsUtils;
33 @RunWith(MockitoJUnitRunner.class)
34 public class PolicyTargetsUpdateOperationTest {
36 private static final String CONTAINER_ID = "containerId";
38 private PolicyTargetsUpdateOperation policyTargetsUpdateOperation;
40 private ToscaOperationFacade toscaOperationFacade;
43 private ArgumentCaptor<List<PolicyDefinition>> updatedPoliciesCaptor;
44 private PolicyDefinition policyWithInstanceTarget1, policyWithInstanceTarget2, policyWithInstanceTarget3;
45 private Resource container;
48 public void setUp() throws Exception {
49 policyWithInstanceTarget1 = createPolicyWithCmptInstAsTargets("policy1", "inst1", "inst2");
50 policyWithInstanceTarget2 = createPolicyWithCmptInstAsTargets("policy2", "inst1", "inst2", "inst3");
51 policyWithInstanceTarget3 = createPolicyWithCmptInstAsTargets("policy3", "inst1", "inst3");
52 container = new ResourceBuilder()
53 .addPolicy(policyWithInstanceTarget1)
54 .addPolicy(policyWithInstanceTarget2)
55 .addPolicy(policyWithInstanceTarget3)
56 .setUniqueId(CONTAINER_ID)
58 PolicyTargetsUpdateHandler policyTargetsUpdateHandler = new PolicyTargetsUpdateHandler(toscaOperationFacade, getComponentsUtils(), new PolicyTargetsUpdater());
59 policyTargetsUpdateOperation = new PolicyTargetsUpdateOperation(policyTargetsUpdateHandler);
63 public void onChangeVersion_whenNoPolicies_returnActionOk() {
64 Component container = new Resource();
65 ComponentInstance prevVersion = new ComponentInstanceBuilder().setId("prevVersion").build();
66 ComponentInstance newVersion = new ComponentInstanceBuilder().setId("newVersion").build();
67 ActionStatus operationStatus = policyTargetsUpdateOperation.onChangeVersion(container, prevVersion, newVersion);
68 assertThat(operationStatus).isEqualTo(ActionStatus.OK);
69 verifyZeroInteractions(toscaOperationFacade);
73 public void onChangeVersion_whenNoCmptInstancePolicies_returnOk() {
74 PolicyDefinition policy = PolicyDefinitionBuilder.create().addGroupTarget("someGroup").build();
75 Component container = new ResourceBuilder().addPolicy(policy).build();
76 ComponentInstance prevVersion = new ComponentInstanceBuilder().setId("prevVersion").build();
77 ComponentInstance newVersion = new ComponentInstanceBuilder().setId("newVersion").build();
78 ActionStatus operationStatus = policyTargetsUpdateOperation.onChangeVersion(container, prevVersion, newVersion);
79 assertThat(operationStatus).isEqualTo(ActionStatus.OK);
80 verifyZeroInteractions(toscaOperationFacade);
84 public void onChangeVersion_whenNoPoliciesWithPrevInstanceAsTarget_returnActionOk() {
85 ComponentInstance prevVersion = new ComponentInstanceBuilder().setId("prevVersion").build();
86 ComponentInstance newVersion = new ComponentInstanceBuilder().setId("newVersion").build();
87 ActionStatus operationStatus = policyTargetsUpdateOperation.onChangeVersion(container, prevVersion, newVersion);
88 assertThat(operationStatus).isEqualTo(ActionStatus.OK);
89 verifyZeroInteractions(toscaOperationFacade);
93 public void onChangeVersion_replacePrevCmptInstanceIdWithNewInstanceIdAndUpdatePolicies() {
94 ComponentInstance prevVersion = new ComponentInstanceBuilder().setId("inst2").build();
95 ComponentInstance newVersion = new ComponentInstanceBuilder().setId("inst2New").build();
96 when(toscaOperationFacade.updatePoliciesOfComponent(eq(CONTAINER_ID), updatedPoliciesCaptor.capture())).thenReturn(StorageOperationStatus.OK);
97 ActionStatus updatePoliciesRes = policyTargetsUpdateOperation.onChangeVersion(container, prevVersion, newVersion);
98 assertThat(updatePoliciesRes).isEqualTo(ActionStatus.OK);
99 List<PolicyDefinition> updatedPolicies = updatedPoliciesCaptor.getValue();
100 verifyUpdatedPolicies(updatedPolicies, policyWithInstanceTarget1, policyWithInstanceTarget2);//policy3 does not have "inst2" as target, no update needed
101 verifyUpdatedPolicyTargets(policyWithInstanceTarget1, "inst1", "inst2New");
102 verifyUpdatedPolicyTargets(policyWithInstanceTarget2, "inst1", "inst2New", "inst3");
106 public void onChangeVersion_whenUpdateOfPoliciesFails_propagateTheFailure() {
107 ComponentInstance prevVersion = new ComponentInstanceBuilder().setId("inst2").build();
108 ComponentInstance newVersion = new ComponentInstanceBuilder().setId("inst2New").build();
109 when(toscaOperationFacade.updatePoliciesOfComponent(eq(CONTAINER_ID), anyList())).thenReturn(StorageOperationStatus.GENERAL_ERROR);
110 ActionStatus updatePoliciesRes = policyTargetsUpdateOperation.onChangeVersion(container, prevVersion, newVersion);
111 assertThat(updatePoliciesRes).isEqualTo(ActionStatus.GENERAL_ERROR);
115 public void onDeleteInstance_whenNoPolicies_returnActionOk() {
116 Component container = new Resource();
117 ActionStatus operationStatus = policyTargetsUpdateOperation.onDelete(container, "instToDel");
118 assertThat(operationStatus).isEqualTo(ActionStatus.OK);
119 verifyZeroInteractions(toscaOperationFacade);
123 public void onDeleteInstance_whenNoCmptInstancePolicies_returnOk() {
124 PolicyDefinition policy = PolicyDefinitionBuilder.create().addGroupTarget("someGroup").build();
125 Component container = new ResourceBuilder().addPolicy(policy).build();
126 ActionStatus operationStatus = policyTargetsUpdateOperation.onDelete(container, "instToDel");
127 assertThat(operationStatus).isEqualTo(ActionStatus.OK);
128 verifyZeroInteractions(toscaOperationFacade);
132 public void onDeleteInstance_whenNoPoliciesWithInstanceAsTarget_returnActionOk() {
133 ActionStatus operationStatus = policyTargetsUpdateOperation.onDelete(container, "instToDel");
134 assertThat(operationStatus).isEqualTo(ActionStatus.OK);
135 verifyZeroInteractions(toscaOperationFacade);
139 public void onDeleteInstance_removeDeletedTargetFromPolicies() {
140 when(toscaOperationFacade.updatePoliciesOfComponent(eq(CONTAINER_ID), updatedPoliciesCaptor.capture())).thenReturn(StorageOperationStatus.OK);
141 ActionStatus operationStatus = policyTargetsUpdateOperation.onDelete(container, "inst2");
142 assertThat(operationStatus).isEqualTo(ActionStatus.OK);
143 List<PolicyDefinition> updatedPolicies = updatedPoliciesCaptor.getValue();
144 verifyUpdatedPolicies(updatedPolicies, policyWithInstanceTarget1, policyWithInstanceTarget2);
145 verifyUpdatedPolicyTargets(policyWithInstanceTarget1, "inst1");
146 verifyUpdatedPolicyTargets(policyWithInstanceTarget2, "inst1", "inst3");
150 public void onDeleteInstance_whenFailingToUpdatePolicies_propagateTheError() {
151 when(toscaOperationFacade.updatePoliciesOfComponent(eq(CONTAINER_ID), anyList())).thenReturn(StorageOperationStatus.GENERAL_ERROR);
152 ActionStatus operationStatus = policyTargetsUpdateOperation.onDelete(container, "inst2");
153 assertThat(operationStatus).isEqualTo(ActionStatus.GENERAL_ERROR);
156 private void verifyUpdatedPolicyTargets(PolicyDefinition updatedPolicy, String ... expectedCmptInstanceTargetIds) {
157 assertThat(updatedPolicy.resolveComponentInstanceTargets())
158 .containsExactlyInAnyOrder(expectedCmptInstanceTargetIds);
161 private void verifyUpdatedPolicies(List<PolicyDefinition> updatedPolicies, PolicyDefinition ... expectedUpdatedPolicies) {
162 assertThat(updatedPolicies)
163 .usingElementComparatorOnFields("targets")
164 .containsExactlyInAnyOrder(expectedUpdatedPolicies);
167 private PolicyDefinition createPolicyWithCmptInstAsTargets(String uniqueId, String ... instId) {
168 PolicyDefinitionBuilder policyDefinitionBuilder = PolicyDefinitionBuilder.create();
169 Stream.of(instId).forEach(policyDefinitionBuilder::addComponentInstanceTarget);
170 return policyDefinitionBuilder.setUniqueId(uniqueId).build();