1 package org.openecomp.sdc.be.components.merge.instance;
3 import com.google.common.collect.ImmutableMap;
5 import org.junit.Before;
7 import org.junit.runner.RunWith;
8 import org.mockito.ArgumentCaptor;
9 import org.mockito.Captor;
10 import org.mockito.Mock;
11 import org.mockito.Mockito;
12 import org.mockito.junit.MockitoJUnitRunner;
13 import org.openecomp.sdc.be.auditing.impl.AuditingManager;
14 import org.openecomp.sdc.be.components.merge.capability.SimpleCapabilityResolver;
15 import org.openecomp.sdc.be.components.merge.property.DataDefinitionsValuesMergingBusinessLogic;
16 import org.openecomp.sdc.be.components.utils.CapabilityDefinitionBuilder;
17 import org.openecomp.sdc.be.components.utils.ComponentInstanceBuilder;
18 import org.openecomp.sdc.be.components.utils.ComponentInstancePropertyBuilder;
19 import org.openecomp.sdc.be.components.utils.ResourceBuilder;
20 import org.openecomp.sdc.be.config.ConfigurationManager;
21 import org.openecomp.sdc.be.dao.api.ActionStatus;
22 import org.openecomp.sdc.be.impl.ComponentsUtils;
23 import org.openecomp.sdc.be.model.*;
24 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
25 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
26 import org.openecomp.sdc.common.api.ConfigurationSource;
27 import org.openecomp.sdc.common.impl.ExternalConfiguration;
28 import org.openecomp.sdc.common.impl.FSConfigurationSource;
30 import java.util.Arrays;
31 import java.util.Collections;
32 import java.util.List;
34 import static java.util.Collections.emptyMap;
35 import static java.util.Collections.singletonList;
36 import static org.assertj.core.api.Assertions.assertThat;
37 import static org.mockito.ArgumentMatchers.any;
38 import static org.mockito.ArgumentMatchers.anyList;
39 import static org.mockito.ArgumentMatchers.eq;
40 import static org.mockito.Mockito.*;
42 @RunWith(MockitoJUnitRunner.class)
43 public class ComponentInstanceCapabilitiesMergeBLTest {
45 private static final String INSTANCE1 = "inst1";
46 private static final String INSTANCE2 = "inst2";
48 private ComponentCapabilitiesPropertiesMergeBL testInstance;
49 private ComponentsUtils componentsUtils;
51 private SimpleCapabilityResolver capabilityResolver;
53 private ToscaOperationFacade toscaOperationFacade;
55 private DataDefinitionsValuesMergingBusinessLogic dataDefinitionsValuesMergingBusinessLogic;
57 private ArgumentCaptor<List<ComponentInstanceProperty>> prevCapPropertiesCaptor;
59 private ArgumentCaptor<List<ComponentInstanceProperty>> currCapPropertiesCaptor;
61 private ArgumentCaptor<ComponentParametersView> getCurrResourceFilterCapture;
63 private CapabilityDefinition oldCap;
64 private CapabilityDefinition oldCap2;
65 private CapabilityDefinition newCap;
66 private CapabilityDefinition newCap2;
68 private ComponentParametersView getCapabilitiesPropsFilter;
70 protected static ConfigurationManager configurationManager = null;
73 public void setUp() throws Exception {
74 oldCap = new CapabilityDefinitionBuilder()
75 .setOwnerId(INSTANCE1)
76 .setOwnerName(INSTANCE1)
80 .addProperty(new ComponentInstancePropertyBuilder().setName("prop1").build())
81 .addProperty(new ComponentInstancePropertyBuilder().setName("prop2").build())
84 oldCap2 = new CapabilityDefinitionBuilder()
85 .setOwnerId(INSTANCE2)
86 .setOwnerName(INSTANCE2)
90 .addProperty(new ComponentInstancePropertyBuilder().setName("prop1").build())
93 newCap = new CapabilityDefinitionBuilder()
94 .setOwnerId(INSTANCE1)
95 .setOwnerName(INSTANCE1)
99 .addProperty(new ComponentInstancePropertyBuilder().setName("prop1").build())
102 newCap2 = new CapabilityDefinitionBuilder()
103 .setOwnerId(INSTANCE2)
104 .setOwnerName(INSTANCE2)
108 .addProperty(new ComponentInstancePropertyBuilder().setName("prop2").build())
109 .addProperty(new ComponentInstancePropertyBuilder().setName("prop3").build())
112 getCapabilitiesPropsFilter = new ComponentParametersView();
113 getCapabilitiesPropsFilter.disableAll();
114 getCapabilitiesPropsFilter.setIgnoreComponentInstances(false);
115 getCapabilitiesPropsFilter.setIgnoreCapabilities(false);
116 getCapabilitiesPropsFilter.setIgnoreCapabiltyProperties(false);
118 ExternalConfiguration.setAppName("catalog-be");
119 String appConfigDir = "src/test/resources/config/catalog-be";
120 ConfigurationSource configurationSource = new FSConfigurationSource(ExternalConfiguration.getChangeListener(), appConfigDir);
121 ConfigurationManager configurationManager = new ConfigurationManager(configurationSource);
122 componentsUtils = new ComponentsUtils(Mockito.mock(AuditingManager.class));
123 testInstance = new ComponentCapabilitiesPropertiesMergeBL(dataDefinitionsValuesMergingBusinessLogic, toscaOperationFacade, componentsUtils, capabilityResolver);
127 public void mergeCapabilityProperties_singleCapability() {
128 ComponentInstance prevInst1 = new ComponentInstanceBuilder().addCapability(oldCap).setName(oldCap.getOwnerName()).build();
129 ComponentInstance newInst1 = new ComponentInstanceBuilder().addCapability(newCap).setName(newCap.getOwnerName()).build();
130 Resource prevResource = new ResourceBuilder().addComponentInstance(prevInst1).build();
131 Resource newResource = new ResourceBuilder().addComponentInstance(newInst1).build();
132 when(toscaOperationFacade.getToscaElement(eq(newResource.getUniqueId()), getCurrResourceFilterCapture.capture())).thenReturn(Either.left(newResource));
133 when(capabilityResolver.resolvePrevCapIdToNewCapability(prevInst1, newInst1)).thenReturn(ImmutableMap.of(oldCap, newCap));
134 when(toscaOperationFacade.updateComponentCalculatedCapabilitiesProperties(newResource)).thenReturn(StorageOperationStatus.OK);
136 ActionStatus actionStatus = testInstance.mergeComponents(prevResource, newResource);
138 assertThat(actionStatus).isEqualTo(ActionStatus.OK);
139 verify(dataDefinitionsValuesMergingBusinessLogic).mergeInstanceDataDefinitions(prevCapPropertiesCaptor.capture(), currCapPropertiesCaptor.capture());
140 assertThat(prevCapPropertiesCaptor.getValue()).extracting("name").containsExactly("prop1", "prop2");
141 assertThat(currCapPropertiesCaptor.getValue()).extracting("name").containsExactly("prop1");
142 assertThat(getCurrResourceFilterCapture.getValue()).isEqualToComparingFieldByField(getCapabilitiesPropsFilter);
146 public void mergeCapabilityProperties_failToGetResourceWithPropsCapabilities() {
147 Resource currResource = new ResourceBuilder().setUniqueId("rid").build();
148 when(toscaOperationFacade.getToscaElement(eq(currResource.getUniqueId()), any(ComponentParametersView.class))).thenReturn(Either.right(StorageOperationStatus.NOT_FOUND));
149 ActionStatus actionStatus = testInstance.mergeComponents(new Resource(), currResource);
150 assertThat(actionStatus).isEqualTo(ActionStatus.RESOURCE_NOT_FOUND);
154 public void mergeCapabilityProperties_multipleCapabilitiesToMerge() {
155 ComponentInstance prevInst1 = new ComponentInstanceBuilder().addCapability(oldCap).setName(oldCap.getOwnerName()).build();
156 ComponentInstance prevInst2 = new ComponentInstanceBuilder().addCapability(oldCap2).setName(oldCap2.getOwnerName()).build();
158 ComponentInstance currInst1 = new ComponentInstanceBuilder().addCapability(newCap).setName(newCap.getOwnerName()).build();
159 ComponentInstance currInst2 = new ComponentInstanceBuilder().addCapability(newCap2).setName(newCap2.getOwnerName()).build();
161 Resource currResource = new ResourceBuilder().addComponentInstance(currInst1).addComponentInstance(currInst2).build();
162 Resource prevResource = new ResourceBuilder().addComponentInstance(prevInst1).addComponentInstance(prevInst2).build();
163 when(toscaOperationFacade.getToscaElement(eq(currResource.getUniqueId()), any(ComponentParametersView.class))).thenReturn(Either.left(currResource));
164 when(capabilityResolver.resolvePrevCapIdToNewCapability(prevInst1, currInst1)).thenReturn(ImmutableMap.of(oldCap, newCap));
165 when(capabilityResolver.resolvePrevCapIdToNewCapability(prevInst2, currInst2)).thenReturn(ImmutableMap.of(oldCap2, newCap2));
166 when(toscaOperationFacade.updateComponentCalculatedCapabilitiesProperties(currResource)).thenReturn(StorageOperationStatus.OK);
167 ActionStatus actionStatus = testInstance.mergeComponents(prevResource, currResource);
168 assertThat(actionStatus).isEqualTo(ActionStatus.OK);
169 verify(dataDefinitionsValuesMergingBusinessLogic, times(2)).mergeInstanceDataDefinitions(anyList(), anyList());
173 public void mergeCapabilityProperties_noNewCapabilitiesResolved() {
174 ComponentInstance prevInst1 = new ComponentInstanceBuilder().addCapability(oldCap).setName(oldCap.getOwnerName()).build();
175 ComponentInstance newInst1 = new ComponentInstanceBuilder().setName(oldCap.getOwnerName()).build();
176 Resource prevResource = new ResourceBuilder().addComponentInstance(prevInst1).build();
177 Resource newResource = new ResourceBuilder().addComponentInstance(newInst1).build();
178 when(toscaOperationFacade.getToscaElement(eq(newResource.getUniqueId()), any(ComponentParametersView.class))).thenReturn(Either.left(newResource));
179 when(capabilityResolver.resolvePrevCapIdToNewCapability(prevInst1, newInst1)).thenReturn(emptyMap());
180 when(toscaOperationFacade.updateComponentCalculatedCapabilitiesProperties(newResource)).thenReturn(StorageOperationStatus.OK);
181 ActionStatus actionStatus = testInstance.mergeComponents(prevResource, newResource);
182 assertThat(actionStatus).isEqualTo(ActionStatus.OK);
183 verifyZeroInteractions(dataDefinitionsValuesMergingBusinessLogic);
187 public void mergeCapabilityProperties_noPrevCapabilitiesToMerge() {
188 Resource newResource = new Resource();
189 Resource prevResource = new Resource();
190 when(toscaOperationFacade.getToscaElement(eq(newResource.getUniqueId()), any(ComponentParametersView.class))).thenReturn(Either.left(newResource));
191 verifyNoMoreInteractions(toscaOperationFacade);
192 ActionStatus actionStatus = testInstance.mergeComponents(prevResource, newResource);
193 assertThat(actionStatus).isEqualTo(ActionStatus.OK);
194 verifyZeroInteractions(dataDefinitionsValuesMergingBusinessLogic);
198 public void mergeCapabilityProperties_failedToUpdateComponent() {
199 ComponentInstance inst1 = new ComponentInstanceBuilder().addCapability(oldCap).setName(oldCap.getOwnerName()).build();
200 Resource newResource = new Resource();
201 Resource prevResource = new ResourceBuilder().addComponentInstance(inst1).build();
202 when(toscaOperationFacade.getToscaElement(eq(newResource.getUniqueId()), any(ComponentParametersView.class))).thenReturn(Either.left(newResource));
203 when(toscaOperationFacade.updateComponentCalculatedCapabilitiesProperties(newResource)).thenReturn(StorageOperationStatus.GENERAL_ERROR);
204 ActionStatus actionStatus = testInstance.mergeComponents(prevResource, newResource);
205 assertThat(actionStatus).isEqualTo(ActionStatus.GENERAL_ERROR);
208 ////////////////////////////
210 public void mergeInstanceCapabilityProperties_singleCap() {
211 List<CapabilityDefinition> previousInstanceCapabilities = Collections.singletonList(oldCap);
212 ComponentInstance inst1 = new ComponentInstanceBuilder().addCapability(newCap).setId(newCap.getOwnerId()).build();
213 Resource container = new ResourceBuilder().addComponentInstance(inst1).build();
214 Resource origInstanceNode = new Resource();
215 when(toscaOperationFacade.updateComponentInstanceCapabilityProperties(container, newCap.getOwnerId())).thenReturn(StorageOperationStatus.OK);
216 when(capabilityResolver.resolvePrevCapToNewCapability(container, origInstanceNode, INSTANCE1, previousInstanceCapabilities)).thenReturn(ImmutableMap.of(oldCap, newCap));
217 ActionStatus actionStatus = testInstance.mergeComponentInstanceCapabilities(container, origInstanceNode, INSTANCE1, previousInstanceCapabilities);
218 assertThat(actionStatus).isEqualTo(ActionStatus.OK);
219 verify(dataDefinitionsValuesMergingBusinessLogic).mergeInstanceDataDefinitions(prevCapPropertiesCaptor.capture(), currCapPropertiesCaptor.capture());
221 assertThat(prevCapPropertiesCaptor.getValue()).extracting("name").containsExactly("prop1", "prop2");
222 assertThat(currCapPropertiesCaptor.getValue()).extracting("name").containsExactly("prop1");
226 public void mergeInstanceCapabilityProperties() {
227 List<CapabilityDefinition> previousInstanceCapabilities = Arrays.asList(oldCap, oldCap2);
228 ComponentInstance inst1 = new ComponentInstanceBuilder().addCapability(newCap).addCapability(newCap2).setId(newCap.getOwnerId()).build();
229 Resource container = new ResourceBuilder().addComponentInstance(inst1).build();
230 Resource origInstanceNode = new Resource();
231 when(capabilityResolver.resolvePrevCapToNewCapability(container, origInstanceNode, INSTANCE1, previousInstanceCapabilities)).thenReturn(ImmutableMap.of(oldCap, newCap, oldCap2, newCap2));
232 when(toscaOperationFacade.updateComponentInstanceCapabilityProperties(container, INSTANCE1)).thenReturn(StorageOperationStatus.OK);
233 ActionStatus actionStatus = testInstance.mergeComponentInstanceCapabilities(container, origInstanceNode, INSTANCE1, previousInstanceCapabilities);
234 assertThat(actionStatus).isEqualTo(ActionStatus.OK);
235 verify(dataDefinitionsValuesMergingBusinessLogic, times(2)).mergeInstanceDataDefinitions(anyList(), anyList());
239 public void mergeInstanceCapabilityProperties_emptyCapabilitiesList() {
240 ActionStatus actionStatus = testInstance.mergeComponentInstanceCapabilities(new Resource(), new Resource(), "instanceId", Collections.emptyList());
241 assertThat(actionStatus).isEqualTo(ActionStatus.OK);
242 verifyZeroInteractions(toscaOperationFacade, dataDefinitionsValuesMergingBusinessLogic, capabilityResolver);
246 public void mergeInstanceCapabilityProperties_failedToUpdateComponent() {
247 Resource container = new Resource();
248 Resource resource = new Resource();
249 List<CapabilityDefinition> capList = singletonList(oldCap);
250 when(capabilityResolver.resolvePrevCapToNewCapability(container, resource, INSTANCE1, capList)).thenReturn(ImmutableMap.of(oldCap, newCap));
251 when(toscaOperationFacade.updateComponentInstanceCapabilityProperties(container, INSTANCE1)).thenReturn(StorageOperationStatus.GENERAL_ERROR);
252 ActionStatus actionStatus = testInstance.mergeComponentInstanceCapabilities(container, resource, INSTANCE1, capList);
253 assertThat(actionStatus).isEqualTo(ActionStatus.GENERAL_ERROR);
257 public void mergeInstanceCapabilityProperties_noNewCapabilitiesFound() {
258 Resource container = new Resource();
259 Resource resource = new Resource();
260 List<CapabilityDefinition> prevCapabilities = singletonList(oldCap);
261 when(capabilityResolver.resolvePrevCapToNewCapability(container, resource, INSTANCE1, prevCapabilities)).thenReturn(emptyMap());
262 when(toscaOperationFacade.updateComponentInstanceCapabilityProperties(container, INSTANCE1)).thenReturn(StorageOperationStatus.OK);
263 ActionStatus actionStatus = testInstance.mergeComponentInstanceCapabilities(container, resource, INSTANCE1, prevCapabilities);
264 assertThat(actionStatus).isEqualTo(ActionStatus.OK);
265 verifyZeroInteractions(dataDefinitionsValuesMergingBusinessLogic);