Upgrade testing frameworks to latest not-vulnerable versions
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / impl / instance / PolicyTargetsUpdateOperationTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.openecomp.sdc.be.components.impl.instance;
22
23 import org.junit.Before;
24 import org.junit.Test;
25 import org.junit.runner.RunWith;
26 import org.mockito.ArgumentCaptor;
27 import org.mockito.Captor;
28 import org.mockito.Mock;
29 import org.mockito.junit.MockitoJUnitRunner;
30 import org.openecomp.sdc.be.components.impl.policy.PolicyTargetsUpdateHandler;
31 import org.openecomp.sdc.be.components.impl.policy.PolicyTargetsUpdater;
32 import org.openecomp.sdc.be.components.utils.ComponentInstanceBuilder;
33 import org.openecomp.sdc.be.components.utils.PolicyDefinitionBuilder;
34 import org.openecomp.sdc.be.components.utils.ResourceBuilder;
35 import org.openecomp.sdc.be.dao.api.ActionStatus;
36 import org.openecomp.sdc.be.model.Component;
37 import org.openecomp.sdc.be.model.ComponentInstance;
38 import org.openecomp.sdc.be.model.PolicyDefinition;
39 import org.openecomp.sdc.be.model.Resource;
40 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
41 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
42
43 import java.util.List;
44 import java.util.stream.Stream;
45
46 import static org.assertj.core.api.Assertions.assertThat;
47 import static org.mockito.ArgumentMatchers.anyList;
48 import static org.mockito.ArgumentMatchers.eq;
49 import static org.mockito.Mockito.verifyNoInteractions;
50 import static org.mockito.Mockito.when;
51 import static org.openecomp.sdc.be.components.impl.utils.TestGenerationUtils.getComponentsUtils;
52
53 @RunWith(MockitoJUnitRunner.class)
54 public class PolicyTargetsUpdateOperationTest {
55
56     private static final String CONTAINER_ID = "containerId";
57
58     private PolicyTargetsUpdateOperation policyTargetsUpdateOperation;
59     @Mock
60     private ToscaOperationFacade toscaOperationFacade;
61
62     @Captor
63     private ArgumentCaptor<List<PolicyDefinition>> updatedPoliciesCaptor;
64     private PolicyDefinition policyWithInstanceTarget1, policyWithInstanceTarget2, policyWithInstanceTarget3;
65     private Resource container;
66
67     @Before
68     public void setUp() throws Exception {
69         policyWithInstanceTarget1 = createPolicyWithCmptInstAsTargets("policy1", "inst1", "inst2");
70         policyWithInstanceTarget2 = createPolicyWithCmptInstAsTargets("policy2", "inst1", "inst2", "inst3");
71         policyWithInstanceTarget3 = createPolicyWithCmptInstAsTargets("policy3", "inst1", "inst3");
72         container = new ResourceBuilder()
73                 .addPolicy(policyWithInstanceTarget1)
74                 .addPolicy(policyWithInstanceTarget2)
75                 .addPolicy(policyWithInstanceTarget3)
76                 .setUniqueId(CONTAINER_ID)
77                 .build();
78         PolicyTargetsUpdateHandler policyTargetsUpdateHandler = new PolicyTargetsUpdateHandler(toscaOperationFacade, getComponentsUtils(), new PolicyTargetsUpdater());
79         policyTargetsUpdateOperation = new PolicyTargetsUpdateOperation(policyTargetsUpdateHandler);
80     }
81
82     @Test
83     public void onChangeVersion_whenNoPolicies_returnActionOk() {
84         Component container = new Resource();
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         verifyNoInteractions(toscaOperationFacade);
90     }
91
92     @Test
93     public void onChangeVersion_whenNoCmptInstancePolicies_returnOk() {
94         PolicyDefinition policy = PolicyDefinitionBuilder.create().addGroupTarget("someGroup").build();
95         Component container = new ResourceBuilder().addPolicy(policy).build();
96         ComponentInstance prevVersion = new ComponentInstanceBuilder().setId("prevVersion").build();
97         ComponentInstance newVersion = new ComponentInstanceBuilder().setId("newVersion").build();
98         ActionStatus operationStatus = policyTargetsUpdateOperation.onChangeVersion(container, prevVersion, newVersion);
99         assertThat(operationStatus).isEqualTo(ActionStatus.OK);
100         verifyNoInteractions(toscaOperationFacade);
101     }
102
103     @Test
104     public void onChangeVersion_whenNoPoliciesWithPrevInstanceAsTarget_returnActionOk() {
105         ComponentInstance prevVersion = new ComponentInstanceBuilder().setId("prevVersion").build();
106         ComponentInstance newVersion = new ComponentInstanceBuilder().setId("newVersion").build();
107         ActionStatus operationStatus = policyTargetsUpdateOperation.onChangeVersion(container, prevVersion, newVersion);
108         assertThat(operationStatus).isEqualTo(ActionStatus.OK);
109         verifyNoInteractions(toscaOperationFacade);
110     }
111
112     @Test
113     public void onChangeVersion_replacePrevCmptInstanceIdWithNewInstanceIdAndUpdatePolicies() {
114         ComponentInstance prevVersion = new ComponentInstanceBuilder().setId("inst2").build();
115         ComponentInstance newVersion = new ComponentInstanceBuilder().setId("inst2New").build();
116         when(toscaOperationFacade.updatePoliciesOfComponent(eq(CONTAINER_ID), updatedPoliciesCaptor.capture())).thenReturn(StorageOperationStatus.OK);
117         ActionStatus updatePoliciesRes = policyTargetsUpdateOperation.onChangeVersion(container, prevVersion, newVersion);
118         assertThat(updatePoliciesRes).isEqualTo(ActionStatus.OK);
119         List<PolicyDefinition> updatedPolicies = updatedPoliciesCaptor.getValue();
120         verifyUpdatedPolicies(updatedPolicies, policyWithInstanceTarget1, policyWithInstanceTarget2);//policy3 does not have "inst2" as target, no update needed
121         verifyUpdatedPolicyTargets(policyWithInstanceTarget1, "inst1", "inst2New");
122         verifyUpdatedPolicyTargets(policyWithInstanceTarget2, "inst1", "inst2New", "inst3");
123     }
124
125     @Test
126     public void onChangeVersion_whenUpdateOfPoliciesFails_propagateTheFailure() {
127         ComponentInstance prevVersion = new ComponentInstanceBuilder().setId("inst2").build();
128         ComponentInstance newVersion = new ComponentInstanceBuilder().setId("inst2New").build();
129         when(toscaOperationFacade.updatePoliciesOfComponent(eq(CONTAINER_ID), anyList())).thenReturn(StorageOperationStatus.GENERAL_ERROR);
130         ActionStatus updatePoliciesRes = policyTargetsUpdateOperation.onChangeVersion(container, prevVersion, newVersion);
131         assertThat(updatePoliciesRes).isEqualTo(ActionStatus.GENERAL_ERROR);
132     }
133
134     @Test
135     public void onDeleteInstance_whenNoPolicies_returnActionOk() {
136         Component container = new Resource();
137         ActionStatus operationStatus = policyTargetsUpdateOperation.onDelete(container, "instToDel");
138         assertThat(operationStatus).isEqualTo(ActionStatus.OK);
139         verifyNoInteractions(toscaOperationFacade);
140     }
141
142     @Test
143     public void onDeleteInstance_whenNoCmptInstancePolicies_returnOk() {
144         PolicyDefinition policy = PolicyDefinitionBuilder.create().addGroupTarget("someGroup").build();
145         Component container = new ResourceBuilder().addPolicy(policy).build();
146         ActionStatus operationStatus = policyTargetsUpdateOperation.onDelete(container, "instToDel");
147         assertThat(operationStatus).isEqualTo(ActionStatus.OK);
148         verifyNoInteractions(toscaOperationFacade);
149     }
150
151     @Test
152     public void onDeleteInstance_whenNoPoliciesWithInstanceAsTarget_returnActionOk() {
153         ActionStatus operationStatus = policyTargetsUpdateOperation.onDelete(container, "instToDel");
154         assertThat(operationStatus).isEqualTo(ActionStatus.OK);
155         verifyNoInteractions(toscaOperationFacade);
156     }
157
158     @Test
159     public void onDeleteInstance_removeDeletedTargetFromPolicies() {
160         when(toscaOperationFacade.updatePoliciesOfComponent(eq(CONTAINER_ID), updatedPoliciesCaptor.capture())).thenReturn(StorageOperationStatus.OK);
161         ActionStatus operationStatus = policyTargetsUpdateOperation.onDelete(container, "inst2");
162         assertThat(operationStatus).isEqualTo(ActionStatus.OK);
163         List<PolicyDefinition> updatedPolicies = updatedPoliciesCaptor.getValue();
164         verifyUpdatedPolicies(updatedPolicies, policyWithInstanceTarget1, policyWithInstanceTarget2);
165         verifyUpdatedPolicyTargets(policyWithInstanceTarget1, "inst1");
166         verifyUpdatedPolicyTargets(policyWithInstanceTarget2, "inst1", "inst3");
167     }
168
169     @Test
170     public void onDeleteInstance_whenFailingToUpdatePolicies_propagateTheError() {
171         when(toscaOperationFacade.updatePoliciesOfComponent(eq(CONTAINER_ID), anyList())).thenReturn(StorageOperationStatus.GENERAL_ERROR);
172         ActionStatus operationStatus = policyTargetsUpdateOperation.onDelete(container, "inst2");
173         assertThat(operationStatus).isEqualTo(ActionStatus.GENERAL_ERROR);
174     }
175
176     private void verifyUpdatedPolicyTargets(PolicyDefinition updatedPolicy, String ... expectedCmptInstanceTargetIds) {
177         assertThat(updatedPolicy.resolveComponentInstanceTargets())
178                 .containsExactlyInAnyOrder(expectedCmptInstanceTargetIds);
179     }
180
181     private void verifyUpdatedPolicies(List<PolicyDefinition> updatedPolicies, PolicyDefinition ... expectedUpdatedPolicies) {
182         assertThat(updatedPolicies)
183                 .usingElementComparatorOnFields("targets")
184                 .containsExactlyInAnyOrder(expectedUpdatedPolicies);
185     }
186
187     private PolicyDefinition createPolicyWithCmptInstAsTargets(String uniqueId, String ... instId) {
188         PolicyDefinitionBuilder policyDefinitionBuilder = PolicyDefinitionBuilder.create();
189         Stream.of(instId).forEach(policyDefinitionBuilder::addComponentInstanceTarget);
190         return policyDefinitionBuilder.setUniqueId(uniqueId).build();
191     }
192
193 }