1 package org.openecomp.sdc.be.components.impl.version;
3 import static org.assertj.core.api.Assertions.assertThat;
4 import static org.mockito.ArgumentMatchers.anyList;
5 import static org.mockito.ArgumentMatchers.eq;
6 import static org.mockito.Mockito.verifyZeroInteractions;
7 import static org.mockito.Mockito.when;
8 import static org.openecomp.sdc.be.components.impl.utils.TestGenerationUtils.getComponentsUtils;
10 import java.util.List;
11 import java.util.stream.Stream;
13 import org.junit.Before;
14 import org.junit.Test;
15 import org.junit.runner.RunWith;
16 import org.mockito.ArgumentCaptor;
17 import org.mockito.Captor;
18 import org.mockito.Mock;
19 import org.mockito.junit.MockitoJUnitRunner;
20 import org.openecomp.sdc.be.components.utils.ComponentInstanceBuilder;
21 import org.openecomp.sdc.be.components.utils.PolicyDefinitionBuilder;
22 import org.openecomp.sdc.be.components.utils.ResourceBuilder;
23 import org.openecomp.sdc.be.dao.api.ActionStatus;
24 import org.openecomp.sdc.be.model.Component;
25 import org.openecomp.sdc.be.model.ComponentInstance;
26 import org.openecomp.sdc.be.model.PolicyDefinition;
27 import org.openecomp.sdc.be.model.Resource;
28 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
29 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
31 @RunWith(MockitoJUnitRunner.class)
32 public class PolicyTargetsUpdateOperationTest {
34 private static final String CONTAINER_ID = "containerId";
36 private PolicyTargetsUpdateOperation policyTargetsUpdateOperation;
38 private ToscaOperationFacade toscaOperationFacade;
41 private ArgumentCaptor<List<PolicyDefinition>> updatedPoliciesCaptor;
42 private PolicyDefinition policy1, policy2, policy3;
43 private Resource container;
46 public void setUp() throws Exception {
47 policy1 = createPolicyWithCmptInstAsTargets("policy1", "inst1", "inst2");
48 policy2 = createPolicyWithCmptInstAsTargets("policy2", "inst1", "inst2", "inst3");
49 policy3 = createPolicyWithCmptInstAsTargets("policy3", "inst1", "inst3");
50 container = new ResourceBuilder()
54 .setUniqueId(CONTAINER_ID)
56 policyTargetsUpdateOperation = new PolicyTargetsUpdateOperation(toscaOperationFacade, getComponentsUtils());
60 public void whenNoPolicies_returnActionOk() {
61 Component container = new Resource();
62 ComponentInstance prevVersion = new ComponentInstanceBuilder().setId("prevVersion").build();
63 ComponentInstance newVersion = new ComponentInstanceBuilder().setId("newVersion").build();
64 ActionStatus operationStatus = policyTargetsUpdateOperation.onChangeVersion(container, prevVersion, newVersion);
65 assertThat(operationStatus).isEqualTo(ActionStatus.OK);
66 verifyZeroInteractions(toscaOperationFacade);
70 public void whenNoCmptInstancePolicies_returnOk() {
71 PolicyDefinition policy = PolicyDefinitionBuilder.create().addGroupTarget("someGroup").build();
72 Component container = new ResourceBuilder().addPolicy(policy).build();
73 ComponentInstance prevVersion = new ComponentInstanceBuilder().setId("prevVersion").build();
74 ComponentInstance newVersion = new ComponentInstanceBuilder().setId("newVersion").build();
75 ActionStatus operationStatus = policyTargetsUpdateOperation.onChangeVersion(container, prevVersion, newVersion);
76 assertThat(operationStatus).isEqualTo(ActionStatus.OK);
77 verifyZeroInteractions(toscaOperationFacade);
81 public void whenNoPoliciesWithPrevInstanceAsTarget_returnActionOk() {
82 ComponentInstance prevVersion = new ComponentInstanceBuilder().setId("prevVersion").build();
83 ComponentInstance newVersion = new ComponentInstanceBuilder().setId("newVersion").build();
84 ActionStatus operationStatus = policyTargetsUpdateOperation.onChangeVersion(container, prevVersion, newVersion);
85 assertThat(operationStatus).isEqualTo(ActionStatus.OK);
86 verifyZeroInteractions(toscaOperationFacade);
90 public void replacePrevCmptInstanceIdWithNewInstanceIdAndUpdatePolicies() {
91 ComponentInstance prevVersion = new ComponentInstanceBuilder().setId("inst2").build();
92 ComponentInstance newVersion = new ComponentInstanceBuilder().setId("inst2New").build();
93 when(toscaOperationFacade.updatePoliciesOfComponent(eq(CONTAINER_ID), updatedPoliciesCaptor.capture())).thenReturn(StorageOperationStatus.OK);
94 ActionStatus updatePoliciesRes = policyTargetsUpdateOperation.onChangeVersion(container, prevVersion, newVersion);
95 assertThat(updatePoliciesRes).isEqualTo(ActionStatus.OK);
96 List<PolicyDefinition> updatedPolicies = updatedPoliciesCaptor.getValue();
97 verifyUpdatedPolicies(updatedPolicies, policy1, policy2);//policy3 does not have "inst2" as target, no update needed
98 verifyUpdatedPolicyTargets(policy1, "inst1", "inst2New");
99 verifyUpdatedPolicyTargets(policy2, "inst1", "inst2New", "inst3");
103 public void whenUpdateOfPoliciesFails_propagateTheFailure() {
104 ComponentInstance prevVersion = new ComponentInstanceBuilder().setId("inst2").build();
105 ComponentInstance newVersion = new ComponentInstanceBuilder().setId("inst2New").build();
106 when(toscaOperationFacade.updatePoliciesOfComponent(eq(CONTAINER_ID), anyList())).thenReturn(StorageOperationStatus.GENERAL_ERROR);
107 ActionStatus updatePoliciesRes = policyTargetsUpdateOperation.onChangeVersion(container, prevVersion, newVersion);
108 assertThat(updatePoliciesRes).isEqualTo(ActionStatus.GENERAL_ERROR);
111 private void verifyUpdatedPolicyTargets(PolicyDefinition updatedPolicy, String ... expectedCmptInstanceTargetIds) {
112 assertThat(updatedPolicy.resolveComponentInstanceTargets())
113 .containsExactlyInAnyOrder(expectedCmptInstanceTargetIds);
116 private void verifyUpdatedPolicies(List<PolicyDefinition> updatedPolicies, PolicyDefinition ... expectedUpdatedPolicies) {
117 assertThat(updatedPolicies)
118 .usingElementComparatorOnFields("targets")
119 .containsExactlyInAnyOrder(expectedUpdatedPolicies);
122 private PolicyDefinition createPolicyWithCmptInstAsTargets(String uniqueId, String ... instId) {
123 PolicyDefinitionBuilder policyDefinitionBuilder = PolicyDefinitionBuilder.create();
124 Stream.of(instId).forEach(policyDefinitionBuilder::addComponentInstanceTarget);
125 return policyDefinitionBuilder.setUniqueId(uniqueId).build();