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.CapabilityDefinition;
24 import org.openecomp.sdc.be.model.ComponentInstance;
25 import org.openecomp.sdc.be.model.ComponentInstanceProperty;
26 import org.openecomp.sdc.be.model.ComponentParametersView;
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;
30 import org.openecomp.sdc.common.api.ConfigurationSource;
31 import org.openecomp.sdc.common.impl.ExternalConfiguration;
32 import org.openecomp.sdc.common.impl.FSConfigurationSource;
34 import java.util.Arrays;
35 import java.util.Collections;
36 import java.util.List;
38 import static java.util.Collections.emptyMap;
39 import static java.util.Collections.singletonList;
40 import static org.assertj.core.api.Assertions.assertThat;
41 import static org.mockito.ArgumentMatchers.anyList;
42 import static org.mockito.ArgumentMatchers.eq;
43 import static org.mockito.Mockito.any;
44 import static org.mockito.Mockito.times;
45 import static org.mockito.Mockito.verify;
46 import static org.mockito.Mockito.verifyNoMoreInteractions;
47 import static org.mockito.Mockito.verifyZeroInteractions;
48 import static org.mockito.Mockito.when;
50 @RunWith(MockitoJUnitRunner.class)
51 public class ComponentInstanceCapabilitiesMergeBLTest {
53 private static final String INSTANCE1 = "inst1";
54 private static final String INSTANCE2 = "inst2";
56 private ComponentCapabilitiesPropertiesMergeBL testInstance;
57 private ComponentsUtils componentsUtils;
59 private SimpleCapabilityResolver capabilityResolver;
61 private ToscaOperationFacade toscaOperationFacade;
63 private DataDefinitionsValuesMergingBusinessLogic dataDefinitionsValuesMergingBusinessLogic;
65 private ArgumentCaptor<List<ComponentInstanceProperty>> prevCapPropertiesCaptor;
67 private ArgumentCaptor<List<ComponentInstanceProperty>> currCapPropertiesCaptor;
69 private ArgumentCaptor<ComponentParametersView> getCurrResourceFilterCapture;
71 private CapabilityDefinition oldCap;
72 private CapabilityDefinition oldCap2;
73 private CapabilityDefinition newCap;
74 private CapabilityDefinition newCap2;
76 private ComponentParametersView getCapabilitiesPropsFilter;
78 protected static ConfigurationManager configurationManager = null;
81 public void setUp() throws Exception {
82 oldCap = new CapabilityDefinitionBuilder()
83 .setOwnerId(INSTANCE1)
84 .setOwnerName(INSTANCE1)
88 .addProperty(new ComponentInstancePropertyBuilder().setName("prop1").build())
89 .addProperty(new ComponentInstancePropertyBuilder().setName("prop2").build())
92 oldCap2 = new CapabilityDefinitionBuilder()
93 .setOwnerId(INSTANCE2)
94 .setOwnerName(INSTANCE2)
98 .addProperty(new ComponentInstancePropertyBuilder().setName("prop1").build())
101 newCap = new CapabilityDefinitionBuilder()
102 .setOwnerId(INSTANCE1)
103 .setOwnerName(INSTANCE1)
107 .addProperty(new ComponentInstancePropertyBuilder().setName("prop1").build())
110 newCap2 = new CapabilityDefinitionBuilder()
111 .setOwnerId(INSTANCE2)
112 .setOwnerName(INSTANCE2)
116 .addProperty(new ComponentInstancePropertyBuilder().setName("prop2").build())
117 .addProperty(new ComponentInstancePropertyBuilder().setName("prop3").build())
120 getCapabilitiesPropsFilter = new ComponentParametersView();
121 getCapabilitiesPropsFilter.disableAll();
122 getCapabilitiesPropsFilter.setIgnoreComponentInstances(false);
123 getCapabilitiesPropsFilter.setIgnoreCapabilities(false);
124 getCapabilitiesPropsFilter.setIgnoreCapabiltyProperties(false);
126 ExternalConfiguration.setAppName("catalog-be");
127 String appConfigDir = "src/test/resources/config/catalog-be";
128 ConfigurationSource configurationSource = new FSConfigurationSource(ExternalConfiguration.getChangeListener(), appConfigDir);
129 ConfigurationManager configurationManager = new ConfigurationManager(configurationSource);
130 componentsUtils = new ComponentsUtils(Mockito.mock(AuditingManager.class));
131 testInstance = new ComponentCapabilitiesPropertiesMergeBL(dataDefinitionsValuesMergingBusinessLogic, toscaOperationFacade, componentsUtils, capabilityResolver);
135 public void mergeCapabilityProperties_singleCapability() {
136 ComponentInstance prevInst1 = new ComponentInstanceBuilder().addCapability(oldCap).setName(oldCap.getOwnerName()).build();
137 ComponentInstance newInst1 = new ComponentInstanceBuilder().addCapability(newCap).setName(newCap.getOwnerName()).build();
138 Resource prevResource = new ResourceBuilder().addComponentInstance(prevInst1).build();
139 Resource newResource = new ResourceBuilder().addComponentInstance(newInst1).build();
140 when(toscaOperationFacade.getToscaElement(eq(newResource.getUniqueId()), getCurrResourceFilterCapture.capture())).thenReturn(Either.left(newResource));
141 when(capabilityResolver.resolvePrevCapIdToNewCapability(prevInst1, newInst1)).thenReturn(ImmutableMap.of(oldCap, newCap));
142 when(toscaOperationFacade.updateComponentCalculatedCapabilitiesProperties(newResource)).thenReturn(StorageOperationStatus.OK);
144 ActionStatus actionStatus = testInstance.mergeComponents(prevResource, newResource);
146 assertThat(actionStatus).isEqualTo(ActionStatus.OK);
147 verify(dataDefinitionsValuesMergingBusinessLogic).mergeInstanceDataDefinitions(prevCapPropertiesCaptor.capture(), currCapPropertiesCaptor.capture());
148 assertThat(prevCapPropertiesCaptor.getValue()).extracting("name").containsExactly("prop1", "prop2");
149 assertThat(currCapPropertiesCaptor.getValue()).extracting("name").containsExactly("prop1");
150 assertThat(getCurrResourceFilterCapture.getValue()).isEqualToComparingFieldByField(getCapabilitiesPropsFilter);
154 public void mergeCapabilityProperties_failToGetResourceWithPropsCapabilities() {
155 Resource currResource = new ResourceBuilder().setUniqueId("rid").build();
156 when(toscaOperationFacade.getToscaElement(eq(currResource.getUniqueId()), any(ComponentParametersView.class))).thenReturn(Either.right(StorageOperationStatus.NOT_FOUND));
157 ActionStatus actionStatus = testInstance.mergeComponents(new Resource(), currResource);
158 assertThat(actionStatus).isEqualTo(ActionStatus.RESOURCE_NOT_FOUND);
162 public void mergeCapabilityProperties_multipleCapabilitiesToMerge() {
163 ComponentInstance prevInst1 = new ComponentInstanceBuilder().addCapability(oldCap).setName(oldCap.getOwnerName()).build();
164 ComponentInstance prevInst2 = new ComponentInstanceBuilder().addCapability(oldCap2).setName(oldCap2.getOwnerName()).build();
166 ComponentInstance currInst1 = new ComponentInstanceBuilder().addCapability(newCap).setName(newCap.getOwnerName()).build();
167 ComponentInstance currInst2 = new ComponentInstanceBuilder().addCapability(newCap2).setName(newCap2.getOwnerName()).build();
169 Resource currResource = new ResourceBuilder().addComponentInstance(currInst1).addComponentInstance(currInst2).build();
170 Resource prevResource = new ResourceBuilder().addComponentInstance(prevInst1).addComponentInstance(prevInst2).build();
171 when(toscaOperationFacade.getToscaElement(eq(currResource.getUniqueId()), any(ComponentParametersView.class))).thenReturn(Either.left(currResource));
172 when(capabilityResolver.resolvePrevCapIdToNewCapability(prevInst1, currInst1)).thenReturn(ImmutableMap.of(oldCap, newCap));
173 when(capabilityResolver.resolvePrevCapIdToNewCapability(prevInst2, currInst2)).thenReturn(ImmutableMap.of(oldCap2, newCap2));
174 when(toscaOperationFacade.updateComponentCalculatedCapabilitiesProperties(currResource)).thenReturn(StorageOperationStatus.OK);
175 ActionStatus actionStatus = testInstance.mergeComponents(prevResource, currResource);
176 assertThat(actionStatus).isEqualTo(ActionStatus.OK);
177 verify(dataDefinitionsValuesMergingBusinessLogic, times(2)).mergeInstanceDataDefinitions(anyList(), anyList());
181 public void mergeCapabilityProperties_noNewCapabilitiesResolved() {
182 ComponentInstance prevInst1 = new ComponentInstanceBuilder().addCapability(oldCap).setName(oldCap.getOwnerName()).build();
183 ComponentInstance newInst1 = new ComponentInstanceBuilder().setName(oldCap.getOwnerName()).build();
184 Resource prevResource = new ResourceBuilder().addComponentInstance(prevInst1).build();
185 Resource newResource = new ResourceBuilder().addComponentInstance(newInst1).build();
186 when(toscaOperationFacade.getToscaElement(eq(newResource.getUniqueId()), any(ComponentParametersView.class))).thenReturn(Either.left(newResource));
187 when(capabilityResolver.resolvePrevCapIdToNewCapability(prevInst1, newInst1)).thenReturn(emptyMap());
188 when(toscaOperationFacade.updateComponentCalculatedCapabilitiesProperties(newResource)).thenReturn(StorageOperationStatus.OK);
189 ActionStatus actionStatus = testInstance.mergeComponents(prevResource, newResource);
190 assertThat(actionStatus).isEqualTo(ActionStatus.OK);
191 verifyZeroInteractions(dataDefinitionsValuesMergingBusinessLogic);
195 public void mergeCapabilityProperties_noPrevCapabilitiesToMerge() {
196 Resource newResource = new Resource();
197 Resource prevResource = new Resource();
198 when(toscaOperationFacade.getToscaElement(eq(newResource.getUniqueId()), any(ComponentParametersView.class))).thenReturn(Either.left(newResource));
199 verifyNoMoreInteractions(toscaOperationFacade);
200 ActionStatus actionStatus = testInstance.mergeComponents(prevResource, newResource);
201 assertThat(actionStatus).isEqualTo(ActionStatus.OK);
202 verifyZeroInteractions(dataDefinitionsValuesMergingBusinessLogic);
206 public void mergeCapabilityProperties_failedToUpdateComponent() {
207 ComponentInstance inst1 = new ComponentInstanceBuilder().addCapability(oldCap).setName(oldCap.getOwnerName()).build();
208 Resource newResource = new Resource();
209 Resource prevResource = new ResourceBuilder().addComponentInstance(inst1).build();
210 when(toscaOperationFacade.getToscaElement(eq(newResource.getUniqueId()), any(ComponentParametersView.class))).thenReturn(Either.left(newResource));
211 when(toscaOperationFacade.updateComponentCalculatedCapabilitiesProperties(newResource)).thenReturn(StorageOperationStatus.GENERAL_ERROR);
212 ActionStatus actionStatus = testInstance.mergeComponents(prevResource, newResource);
213 assertThat(actionStatus).isEqualTo(ActionStatus.GENERAL_ERROR);
216 ////////////////////////////
218 public void mergeInstanceCapabilityProperties_singleCap() {
219 List<CapabilityDefinition> previousInstanceCapabilities = Collections.singletonList(oldCap);
220 ComponentInstance inst1 = new ComponentInstanceBuilder().addCapability(newCap).setId(newCap.getOwnerId()).build();
221 Resource container = new ResourceBuilder().addComponentInstance(inst1).build();
222 Resource origInstanceNode = new Resource();
223 when(toscaOperationFacade.updateComponentInstanceCapabilityProperties(container, newCap.getOwnerId())).thenReturn(StorageOperationStatus.OK);
224 when(capabilityResolver.resolvePrevCapToNewCapability(container, origInstanceNode, INSTANCE1, previousInstanceCapabilities)).thenReturn(ImmutableMap.of(oldCap, newCap));
225 ActionStatus actionStatus = testInstance.mergeComponentInstanceCapabilities(container, origInstanceNode, INSTANCE1, previousInstanceCapabilities);
226 assertThat(actionStatus).isEqualTo(ActionStatus.OK);
227 verify(dataDefinitionsValuesMergingBusinessLogic).mergeInstanceDataDefinitions(prevCapPropertiesCaptor.capture(), currCapPropertiesCaptor.capture());
229 assertThat(prevCapPropertiesCaptor.getValue()).extracting("name").containsExactly("prop1", "prop2");
230 assertThat(currCapPropertiesCaptor.getValue()).extracting("name").containsExactly("prop1");
234 public void mergeInstanceCapabilityProperties() {
235 List<CapabilityDefinition> previousInstanceCapabilities = Arrays.asList(oldCap, oldCap2);
236 ComponentInstance inst1 = new ComponentInstanceBuilder().addCapability(newCap).addCapability(newCap2).setId(newCap.getOwnerId()).build();
237 Resource container = new ResourceBuilder().addComponentInstance(inst1).build();
238 Resource origInstanceNode = new Resource();
239 when(capabilityResolver.resolvePrevCapToNewCapability(container, origInstanceNode, INSTANCE1, previousInstanceCapabilities)).thenReturn(ImmutableMap.of(oldCap, newCap, oldCap2, newCap2));
240 when(toscaOperationFacade.updateComponentInstanceCapabilityProperties(container, INSTANCE1)).thenReturn(StorageOperationStatus.OK);
241 ActionStatus actionStatus = testInstance.mergeComponentInstanceCapabilities(container, origInstanceNode, INSTANCE1, previousInstanceCapabilities);
242 assertThat(actionStatus).isEqualTo(ActionStatus.OK);
243 verify(dataDefinitionsValuesMergingBusinessLogic, times(2)).mergeInstanceDataDefinitions(anyList(), anyList());
247 public void mergeInstanceCapabilityProperties_emptyCapabilitiesList() {
248 ActionStatus actionStatus = testInstance.mergeComponentInstanceCapabilities(new Resource(), new Resource(), "instanceId", Collections.emptyList());
249 assertThat(actionStatus).isEqualTo(ActionStatus.OK);
250 verifyZeroInteractions(toscaOperationFacade, dataDefinitionsValuesMergingBusinessLogic, capabilityResolver);
254 public void mergeInstanceCapabilityProperties_failedToUpdateComponent() {
255 Resource container = new Resource();
256 Resource resource = new Resource();
257 List<CapabilityDefinition> capList = singletonList(oldCap);
258 when(capabilityResolver.resolvePrevCapToNewCapability(container, resource, INSTANCE1, capList)).thenReturn(ImmutableMap.of(oldCap, newCap));
259 when(toscaOperationFacade.updateComponentInstanceCapabilityProperties(container, INSTANCE1)).thenReturn(StorageOperationStatus.GENERAL_ERROR);
260 ActionStatus actionStatus = testInstance.mergeComponentInstanceCapabilities(container, resource, INSTANCE1, capList);
261 assertThat(actionStatus).isEqualTo(ActionStatus.GENERAL_ERROR);
265 public void mergeInstanceCapabilityProperties_noNewCapabilitiesFound() {
266 Resource container = new Resource();
267 Resource resource = new Resource();
268 List<CapabilityDefinition> prevCapabilities = singletonList(oldCap);
269 when(capabilityResolver.resolvePrevCapToNewCapability(container, resource, INSTANCE1, prevCapabilities)).thenReturn(emptyMap());
270 when(toscaOperationFacade.updateComponentInstanceCapabilityProperties(container, INSTANCE1)).thenReturn(StorageOperationStatus.OK);
271 ActionStatus actionStatus = testInstance.mergeComponentInstanceCapabilities(container, resource, INSTANCE1, prevCapabilities);
272 assertThat(actionStatus).isEqualTo(ActionStatus.OK);
273 verifyZeroInteractions(dataDefinitionsValuesMergingBusinessLogic);