Upgrade testing frameworks to latest not-vulnerable versions
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / merge / instance / ComponentInstanceCapabilitiesMergeBLTest.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.merge.instance;
22
23 import com.google.common.collect.ImmutableMap;
24 import fj.data.Either;
25 import org.junit.Before;
26 import org.junit.Test;
27 import org.junit.runner.RunWith;
28 import org.mockito.ArgumentCaptor;
29 import org.mockito.Captor;
30 import org.mockito.Mock;
31 import org.mockito.Mockito;
32 import org.mockito.junit.MockitoJUnitRunner;
33 import org.openecomp.sdc.be.auditing.impl.AuditingManager;
34 import org.openecomp.sdc.be.components.merge.capability.SimpleCapabilityResolver;
35 import org.openecomp.sdc.be.components.merge.property.DataDefinitionsValuesMergingBusinessLogic;
36 import org.openecomp.sdc.be.components.utils.CapabilityDefinitionBuilder;
37 import org.openecomp.sdc.be.components.utils.ComponentInstanceBuilder;
38 import org.openecomp.sdc.be.components.utils.ComponentInstancePropertyBuilder;
39 import org.openecomp.sdc.be.components.utils.ResourceBuilder;
40 import org.openecomp.sdc.be.config.ConfigurationManager;
41 import org.openecomp.sdc.be.dao.api.ActionStatus;
42 import org.openecomp.sdc.be.impl.ComponentsUtils;
43 import org.openecomp.sdc.be.model.CapabilityDefinition;
44 import org.openecomp.sdc.be.model.ComponentInstance;
45 import org.openecomp.sdc.be.model.ComponentInstanceProperty;
46 import org.openecomp.sdc.be.model.ComponentParametersView;
47 import org.openecomp.sdc.be.model.Resource;
48 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
49 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
50 import org.openecomp.sdc.common.api.ConfigurationSource;
51 import org.openecomp.sdc.common.impl.ExternalConfiguration;
52 import org.openecomp.sdc.common.impl.FSConfigurationSource;
53
54 import java.util.Arrays;
55 import java.util.Collections;
56 import java.util.List;
57
58 import static java.util.Collections.emptyMap;
59 import static java.util.Collections.singletonList;
60 import static org.assertj.core.api.Assertions.assertThat;
61 import static org.mockito.ArgumentMatchers.any;
62 import static org.mockito.ArgumentMatchers.anyList;
63 import static org.mockito.ArgumentMatchers.eq;
64 import static org.mockito.Mockito.times;
65 import static org.mockito.Mockito.verify;
66 import static org.mockito.Mockito.verifyNoMoreInteractions;
67 import static org.mockito.Mockito.verifyNoInteractions;
68 import static org.mockito.Mockito.when;
69
70 @RunWith(MockitoJUnitRunner.class)
71 public class ComponentInstanceCapabilitiesMergeBLTest {
72
73     private static final String INSTANCE1 = "inst1";
74     private static final String INSTANCE2 = "inst2";
75
76     private ComponentCapabilitiesPropertiesMergeBL testInstance;
77     private ComponentsUtils componentsUtils;
78     @Mock
79     private SimpleCapabilityResolver capabilityResolver;
80     @Mock
81     private ToscaOperationFacade toscaOperationFacade;
82     @Mock
83     private DataDefinitionsValuesMergingBusinessLogic dataDefinitionsValuesMergingBusinessLogic;
84     @Captor
85     private ArgumentCaptor<List<ComponentInstanceProperty>> prevCapPropertiesCaptor;
86     @Captor
87     private ArgumentCaptor<List<ComponentInstanceProperty>> currCapPropertiesCaptor;
88     @Captor
89     private ArgumentCaptor<ComponentParametersView> getCurrResourceFilterCapture;
90
91     private CapabilityDefinition oldCap;
92     private CapabilityDefinition oldCap2;
93     private CapabilityDefinition newCap;
94     private CapabilityDefinition newCap2;
95
96     private ComponentParametersView getCapabilitiesPropsFilter;
97
98     protected static ConfigurationManager configurationManager = null;
99
100     @Before
101     public void setUp() throws Exception {
102         oldCap = new CapabilityDefinitionBuilder()
103                 .setOwnerId(INSTANCE1)
104                 .setOwnerName(INSTANCE1)
105                 .setId("cap1")
106                 .setType("type1")
107                 .setName("cap1")
108                 .addProperty(new ComponentInstancePropertyBuilder().setName("prop1").build())
109                 .addProperty(new ComponentInstancePropertyBuilder().setName("prop2").build())
110                 .build();
111
112         oldCap2 = new CapabilityDefinitionBuilder()
113                 .setOwnerId(INSTANCE2)
114                 .setOwnerName(INSTANCE2)
115                 .setId("cap2")
116                 .setType("type1")
117                 .setName("cap2")
118                 .addProperty(new ComponentInstancePropertyBuilder().setName("prop1").build())
119                 .build();
120
121         newCap = new CapabilityDefinitionBuilder()
122                 .setOwnerId(INSTANCE1)
123                 .setOwnerName(INSTANCE1)
124                 .setId("cap1")
125                 .setType("type1")
126                 .setName("cap1")
127                 .addProperty(new ComponentInstancePropertyBuilder().setName("prop1").build())
128                 .build();
129
130         newCap2 = new CapabilityDefinitionBuilder()
131                 .setOwnerId(INSTANCE2)
132                 .setOwnerName(INSTANCE2)
133                 .setId("cap2")
134                 .setType("type1")
135                 .setName("cap2")
136                 .addProperty(new ComponentInstancePropertyBuilder().setName("prop2").build())
137                 .addProperty(new ComponentInstancePropertyBuilder().setName("prop3").build())
138                 .build();
139
140         getCapabilitiesPropsFilter = new ComponentParametersView();
141         getCapabilitiesPropsFilter.disableAll();
142         getCapabilitiesPropsFilter.setIgnoreComponentInstances(false);
143         getCapabilitiesPropsFilter.setIgnoreCapabilities(false);
144         getCapabilitiesPropsFilter.setIgnoreCapabiltyProperties(false);
145         getCapabilitiesPropsFilter.setIgnoreGroups(false);
146
147         ExternalConfiguration.setAppName("catalog-be");
148         String appConfigDir = "src/test/resources/config/catalog-be";
149         ConfigurationSource configurationSource = new FSConfigurationSource(ExternalConfiguration.getChangeListener(), appConfigDir);
150         ConfigurationManager configurationManager = new ConfigurationManager(configurationSource);
151         componentsUtils = new ComponentsUtils(Mockito.mock(AuditingManager.class));
152         testInstance = new ComponentCapabilitiesPropertiesMergeBL(dataDefinitionsValuesMergingBusinessLogic, toscaOperationFacade, componentsUtils, capabilityResolver);
153     }
154
155     @Test
156     public void mergeCapabilityProperties_singleCapability() {
157         ComponentInstance prevInst1 = new ComponentInstanceBuilder().addCapability(oldCap).setName(oldCap.getOwnerName()).build();
158         ComponentInstance newInst1 = new ComponentInstanceBuilder().addCapability(newCap).setName(newCap.getOwnerName()).build();
159         Resource prevResource = new ResourceBuilder().addComponentInstance(prevInst1).build();
160         Resource newResource = new ResourceBuilder().addComponentInstance(newInst1).build();
161         when(toscaOperationFacade.getToscaElement(eq(newResource.getUniqueId()), getCurrResourceFilterCapture.capture())).thenReturn(Either.left(newResource));
162         when(capabilityResolver.resolvePrevCapIdToNewCapability(prevInst1, newInst1)).thenReturn(ImmutableMap.of(oldCap, newCap));
163         when(toscaOperationFacade.updateComponentCalculatedCapabilitiesProperties(newResource)).thenReturn(StorageOperationStatus.OK);
164
165         ActionStatus actionStatus = testInstance.mergeComponents(prevResource, newResource);
166
167         assertThat(actionStatus).isEqualTo(ActionStatus.OK);
168         verify(dataDefinitionsValuesMergingBusinessLogic).mergeInstanceDataDefinitions(prevCapPropertiesCaptor.capture(), currCapPropertiesCaptor.capture());
169         assertThat(prevCapPropertiesCaptor.getValue()).extracting("name").containsExactly("prop1", "prop2");
170         assertThat(currCapPropertiesCaptor.getValue()).extracting("name").containsExactly("prop1");
171         assertThat(getCurrResourceFilterCapture.getValue()).isEqualToComparingFieldByField(getCapabilitiesPropsFilter);
172     }
173
174     @Test
175     public void mergeCapabilityProperties_failToGetResourceWithPropsCapabilities() {
176         Resource currResource = new ResourceBuilder().setUniqueId("rid").build();
177         when(toscaOperationFacade.getToscaElement(eq(currResource.getUniqueId()), any(ComponentParametersView.class))).thenReturn(Either.right(StorageOperationStatus.NOT_FOUND));
178         ActionStatus actionStatus = testInstance.mergeComponents(new Resource(), currResource);
179         assertThat(actionStatus).isEqualTo(ActionStatus.RESOURCE_NOT_FOUND);
180     }
181
182     @Test
183     public void mergeCapabilityProperties_multipleCapabilitiesToMerge() {
184         ComponentInstance prevInst1 = new ComponentInstanceBuilder().addCapability(oldCap).setName(oldCap.getOwnerName()).build();
185         ComponentInstance prevInst2 = new ComponentInstanceBuilder().addCapability(oldCap2).setName(oldCap2.getOwnerName()).build();
186
187         ComponentInstance currInst1 = new ComponentInstanceBuilder().addCapability(newCap).setName(newCap.getOwnerName()).build();
188         ComponentInstance currInst2 = new ComponentInstanceBuilder().addCapability(newCap2).setName(newCap2.getOwnerName()).build();
189
190         Resource currResource = new ResourceBuilder().addComponentInstance(currInst1).addComponentInstance(currInst2).build();
191         Resource prevResource = new ResourceBuilder().addComponentInstance(prevInst1).addComponentInstance(prevInst2).build();
192         when(toscaOperationFacade.getToscaElement(eq(currResource.getUniqueId()), any(ComponentParametersView.class))).thenReturn(Either.left(currResource));
193         when(capabilityResolver.resolvePrevCapIdToNewCapability(prevInst1, currInst1)).thenReturn(ImmutableMap.of(oldCap, newCap));
194         when(capabilityResolver.resolvePrevCapIdToNewCapability(prevInst2, currInst2)).thenReturn(ImmutableMap.of(oldCap2, newCap2));
195         when(toscaOperationFacade.updateComponentCalculatedCapabilitiesProperties(currResource)).thenReturn(StorageOperationStatus.OK);
196         ActionStatus actionStatus = testInstance.mergeComponents(prevResource, currResource);
197         assertThat(actionStatus).isEqualTo(ActionStatus.OK);
198         verify(dataDefinitionsValuesMergingBusinessLogic, times(2)).mergeInstanceDataDefinitions(anyList(), anyList());
199     }
200
201     @Test
202     public void mergeCapabilityProperties_noNewCapabilitiesResolved() {
203         ComponentInstance prevInst1 = new ComponentInstanceBuilder().addCapability(oldCap).setName(oldCap.getOwnerName()).build();
204         ComponentInstance newInst1 = new ComponentInstanceBuilder().setName(oldCap.getOwnerName()).build();
205         Resource prevResource = new ResourceBuilder().addComponentInstance(prevInst1).build();
206         Resource newResource = new ResourceBuilder().addComponentInstance(newInst1).build();
207         when(toscaOperationFacade.getToscaElement(eq(newResource.getUniqueId()), any(ComponentParametersView.class))).thenReturn(Either.left(newResource));
208         when(capabilityResolver.resolvePrevCapIdToNewCapability(prevInst1, newInst1)).thenReturn(emptyMap());
209         when(toscaOperationFacade.updateComponentCalculatedCapabilitiesProperties(newResource)).thenReturn(StorageOperationStatus.OK);
210         ActionStatus actionStatus = testInstance.mergeComponents(prevResource, newResource);
211         assertThat(actionStatus).isEqualTo(ActionStatus.OK);
212         verifyNoInteractions(dataDefinitionsValuesMergingBusinessLogic);
213     }
214
215     @Test
216     public void mergeCapabilityProperties_noPrevCapabilitiesToMerge() {
217         Resource newResource = new Resource();
218         Resource prevResource = new Resource();
219         when(toscaOperationFacade.getToscaElement(eq(newResource.getUniqueId()), any(ComponentParametersView.class))).thenReturn(Either.left(newResource));
220         verifyNoMoreInteractions(toscaOperationFacade);
221         ActionStatus actionStatus = testInstance.mergeComponents(prevResource, newResource);
222         assertThat(actionStatus).isEqualTo(ActionStatus.OK);
223         verifyNoInteractions(dataDefinitionsValuesMergingBusinessLogic);
224     }
225
226     @Test
227     public void mergeCapabilityProperties_failedToUpdateComponent() {
228         ComponentInstance inst1 = new ComponentInstanceBuilder().addCapability(oldCap).setName(oldCap.getOwnerName()).build();
229         Resource newResource = new Resource();
230         Resource prevResource = new ResourceBuilder().addComponentInstance(inst1).build();
231         when(toscaOperationFacade.getToscaElement(eq(newResource.getUniqueId()), any(ComponentParametersView.class))).thenReturn(Either.left(newResource));
232         when(toscaOperationFacade.updateComponentCalculatedCapabilitiesProperties(newResource)).thenReturn(StorageOperationStatus.GENERAL_ERROR);
233         ActionStatus actionStatus = testInstance.mergeComponents(prevResource, newResource);
234         assertThat(actionStatus).isEqualTo(ActionStatus.GENERAL_ERROR);
235     }
236
237     ////////////////////////////
238     @Test
239     public void mergeInstanceCapabilityProperties_singleCap() {
240         List<CapabilityDefinition> previousInstanceCapabilities = Collections.singletonList(oldCap);
241         ComponentInstance inst1 = new ComponentInstanceBuilder().addCapability(newCap).setId(newCap.getOwnerId()).build();
242         Resource container = new ResourceBuilder().addComponentInstance(inst1).build();
243         Resource origInstanceNode = new Resource();
244         when(toscaOperationFacade.updateComponentInstanceCapabilityProperties(container, newCap.getOwnerId())).thenReturn(StorageOperationStatus.OK);
245         when(capabilityResolver.resolvePrevCapToNewCapability(container, origInstanceNode, INSTANCE1, previousInstanceCapabilities)).thenReturn(ImmutableMap.of(oldCap, newCap));
246         ActionStatus actionStatus = testInstance.mergeComponentInstanceCapabilities(container, origInstanceNode, INSTANCE1, previousInstanceCapabilities);
247         assertThat(actionStatus).isEqualTo(ActionStatus.OK);
248         verify(dataDefinitionsValuesMergingBusinessLogic).mergeInstanceDataDefinitions(prevCapPropertiesCaptor.capture(), currCapPropertiesCaptor.capture());
249
250         assertThat(prevCapPropertiesCaptor.getValue()).extracting("name").containsExactly("prop1", "prop2");
251         assertThat(currCapPropertiesCaptor.getValue()).extracting("name").containsExactly("prop1");
252     }
253
254     @Test
255     public void mergeInstanceCapabilityProperties() {
256         List<CapabilityDefinition> previousInstanceCapabilities = Arrays.asList(oldCap, oldCap2);
257         ComponentInstance inst1 = new ComponentInstanceBuilder().addCapability(newCap).addCapability(newCap2).setId(newCap.getOwnerId()).build();
258         Resource container = new ResourceBuilder().addComponentInstance(inst1).build();
259         Resource origInstanceNode = new Resource();
260         when(capabilityResolver.resolvePrevCapToNewCapability(container, origInstanceNode, INSTANCE1, previousInstanceCapabilities)).thenReturn(ImmutableMap.of(oldCap, newCap, oldCap2, newCap2));
261         when(toscaOperationFacade.updateComponentInstanceCapabilityProperties(container, INSTANCE1)).thenReturn(StorageOperationStatus.OK);
262         ActionStatus actionStatus = testInstance.mergeComponentInstanceCapabilities(container, origInstanceNode, INSTANCE1, previousInstanceCapabilities);
263         assertThat(actionStatus).isEqualTo(ActionStatus.OK);
264         verify(dataDefinitionsValuesMergingBusinessLogic, times(2)).mergeInstanceDataDefinitions(anyList(), anyList());
265     }
266
267     @Test
268     public void mergeInstanceCapabilityProperties_emptyCapabilitiesList() {
269         ActionStatus actionStatus = testInstance.mergeComponentInstanceCapabilities(new Resource(), new Resource(),  "instanceId", Collections.emptyList());
270         assertThat(actionStatus).isEqualTo(ActionStatus.OK);
271         verifyNoInteractions(toscaOperationFacade, dataDefinitionsValuesMergingBusinessLogic, capabilityResolver);
272     }
273
274     @Test
275     public void mergeInstanceCapabilityProperties_failedToUpdateComponent() {
276         Resource container = new Resource();
277         Resource resource = new Resource();
278         List<CapabilityDefinition> capList = singletonList(oldCap);
279         when(capabilityResolver.resolvePrevCapToNewCapability(container, resource, INSTANCE1, capList)).thenReturn(ImmutableMap.of(oldCap, newCap));
280         when(toscaOperationFacade.updateComponentInstanceCapabilityProperties(container, INSTANCE1)).thenReturn(StorageOperationStatus.GENERAL_ERROR);
281         ActionStatus actionStatus = testInstance.mergeComponentInstanceCapabilities(container, resource, INSTANCE1, capList);
282         assertThat(actionStatus).isEqualTo(ActionStatus.GENERAL_ERROR);
283     }
284
285     @Test
286     public void mergeInstanceCapabilityProperties_noNewCapabilitiesFound() {
287         Resource container = new Resource();
288         Resource resource = new Resource();
289         List<CapabilityDefinition> prevCapabilities = singletonList(oldCap);
290         when(capabilityResolver.resolvePrevCapToNewCapability(container, resource, INSTANCE1, prevCapabilities)).thenReturn(emptyMap());
291         when(toscaOperationFacade.updateComponentInstanceCapabilityProperties(container, INSTANCE1)).thenReturn(StorageOperationStatus.OK);
292         ActionStatus actionStatus = testInstance.mergeComponentInstanceCapabilities(container, resource, INSTANCE1, prevCapabilities);
293         assertThat(actionStatus).isEqualTo(ActionStatus.OK);
294         verifyNoInteractions(dataDefinitionsValuesMergingBusinessLogic);
295     }
296 }