1 package org.openecomp.sdc.be.components.merge.instance;
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertFalse;
5 import static org.mockito.ArgumentMatchers.any;
6 import static org.mockito.ArgumentMatchers.anyList;
7 import static org.mockito.ArgumentMatchers.anyListOf;
8 import static org.mockito.ArgumentMatchers.anyString;
9 import static org.mockito.Mockito.verifyZeroInteractions;
10 import static org.mockito.Mockito.when;
12 import java.util.List;
14 import org.junit.Before;
15 import org.junit.Test;
16 import org.mockito.ArgumentCaptor;
17 import org.mockito.InjectMocks;
18 import org.mockito.Mock;
19 import org.mockito.Mockito;
20 import org.mockito.MockitoAnnotations;
21 import org.openecomp.sdc.be.components.merge.input.ComponentInputsMergeBL;
22 import org.openecomp.sdc.be.components.utils.ObjectGenerator;
23 import org.openecomp.sdc.be.components.utils.ResourceBuilder;
24 import org.openecomp.sdc.be.dao.api.ActionStatus;
25 import org.openecomp.sdc.be.impl.ComponentsUtils;
26 import org.openecomp.sdc.be.model.Component;
27 import org.openecomp.sdc.be.model.ComponentInstanceInput;
28 import org.openecomp.sdc.be.model.ComponentInstanceProperty;
29 import org.openecomp.sdc.be.model.ComponentParametersView;
30 import org.openecomp.sdc.be.model.InputDefinition;
31 import org.openecomp.sdc.be.model.Resource;
32 import org.openecomp.sdc.be.model.Service;
33 import org.openecomp.sdc.be.model.User;
34 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
35 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
36 import org.openecomp.sdc.exception.ResponseFormat;
38 import fj.data.Either;
40 public class ComponentInstancePropsAndInputsMergeTest {
42 private static final String INSTANCE_ID1 = "inst1";
43 private static final User USER = new User();
46 private ComponentInstancePropsAndInputsMerge testInstance;
49 private ToscaOperationFacade toscaOperationFacade;
52 private ComponentsUtils componentsUtils;
55 private ComponentInstancePropertiesMergeBL componentInstancePropertiesMergeBL;
58 private ComponentInstanceInputsMergeBL componentInstanceInputsMergeBL;
61 private ComponentInputsMergeBL componentInputsMergeBL;
63 private Resource resourceToUpdate;
65 private DataForMergeHolder oldDataHolder;
68 public void setUp() throws Exception {
69 MockitoAnnotations.initMocks(this);
70 resourceToUpdate = new ResourceBuilder().addInstanceInput(INSTANCE_ID1, "instInput1")
71 .addInstanceInput(INSTANCE_ID1, "instInput2")
72 .addInstanceProperty(INSTANCE_ID1, "instProp1")
73 .addInstanceProperty(INSTANCE_ID1, "instProp2")
76 .setUniqueId("resourceId").build();
78 List<InputDefinition> oldInputs = ObjectGenerator.buildInputs("input1");
79 List<ComponentInstanceProperty> oldInstProps = ObjectGenerator.buildInstanceProperties("instProp1", "instProp3");
80 List<ComponentInstanceInput> oldInstInputs = ObjectGenerator.buildInstanceInputs("instInput1", "instInput3");
82 oldDataHolder = new DataForMergeHolder();
83 oldDataHolder.setOrigComponentInputs(oldInputs);
84 oldDataHolder.setOrigComponentInstanceProperties(oldInstProps);
85 oldDataHolder.setOrigComponentInstanceInputs(oldInstInputs);
89 public void mergeDataAfterCreate() throws Exception {
90 List<InputDefinition> oldInputs = ObjectGenerator.buildInputs("input1");
91 List<ComponentInstanceProperty> oldInstProps = ObjectGenerator.buildInstanceProperties("instProp1", "instProp3");
92 List<ComponentInstanceInput> oldInstInputs = ObjectGenerator.buildInstanceInputs("instInput1", "instInput3");
94 DataForMergeHolder dataForMergeHolder = new DataForMergeHolder();
95 dataForMergeHolder.setOrigComponentInputs(oldInputs);
96 dataForMergeHolder.setOrigComponentInstanceProperties(oldInstProps);
97 dataForMergeHolder.setOrigComponentInstanceInputs(oldInstInputs);
99 ArgumentCaptor<ComponentParametersView> parametersViewCaptor = ArgumentCaptor.forClass(ComponentParametersView.class);
101 when(toscaOperationFacade.getToscaElement(Mockito.eq("resourceId"), parametersViewCaptor.capture())).thenReturn(Either.left(resourceToUpdate));
102 when(componentInstanceInputsMergeBL.mergeComponentInstanceInputs(oldInstInputs, oldInputs, resourceToUpdate, INSTANCE_ID1)).thenReturn(ActionStatus.OK);
103 when(componentInstancePropertiesMergeBL.mergeComponentInstanceProperties(oldInstProps, oldInputs, resourceToUpdate, INSTANCE_ID1)).thenReturn(ActionStatus.OK);
104 when(componentInputsMergeBL.redeclareComponentInputsForInstance(oldInputs, resourceToUpdate, INSTANCE_ID1)).thenReturn(ActionStatus.OK);
105 Either<Component, ResponseFormat> mergeResult = testInstance.mergeDataAfterCreate(USER, dataForMergeHolder, resourceToUpdate, INSTANCE_ID1);
106 assertEquals(mergeResult.left().value(), resourceToUpdate);
107 assertComponentFilter(parametersViewCaptor.getValue());
111 public void mergeDataAfterCreate_failedToMergeComponentInstanceInputs() throws Exception {
112 ResponseFormat errorResponse = new ResponseFormat();
113 when(componentsUtils.getResponseFormat(ActionStatus.GENERAL_ERROR)).thenReturn(errorResponse);
114 when(componentInstanceInputsMergeBL.mergeComponentInstanceInputs(anyListOf(ComponentInstanceInput.class), anyListOf(InputDefinition.class), any(Component.class), anyString())).thenReturn(ActionStatus.GENERAL_ERROR);
115 Either<Component, ResponseFormat> mergeResult = testInstance.mergeDataAfterCreate(USER, new DataForMergeHolder(), new Service(), "inst1");
116 assertEquals(errorResponse, mergeResult.right().value());
117 verifyZeroInteractions(componentInputsMergeBL, componentInstancePropertiesMergeBL, toscaOperationFacade);
121 public void mergeDataAfterCreate_failedToMergeComponentInstProps() throws Exception {
122 ResponseFormat errorResponse = new ResponseFormat();
123 when(componentInstanceInputsMergeBL.mergeComponentInstanceInputs(anyList(), anyList(), any(Component.class), anyString())).thenReturn(ActionStatus.OK);
124 when(componentInstancePropertiesMergeBL.mergeComponentInstanceProperties(anyList(), anyList(), any(Component.class), anyString())).thenReturn(ActionStatus.GENERAL_ERROR);
125 when(componentsUtils.getResponseFormat(ActionStatus.GENERAL_ERROR)).thenReturn(errorResponse);
126 Either<Component, ResponseFormat> mergeResult = testInstance.mergeDataAfterCreate(USER, new DataForMergeHolder(), new Service(), "inst1");
127 assertEquals(errorResponse, mergeResult.right().value());
128 verifyZeroInteractions(componentInputsMergeBL, toscaOperationFacade);
132 public void mergeDataAfterCreate_mergeInputs_FailedToFetchResource() throws Exception {
133 ResponseFormat errorResponse = new ResponseFormat();
134 when(componentInstanceInputsMergeBL.mergeComponentInstanceInputs(anyList(), anyList(), any(Component.class), anyString())).thenReturn(ActionStatus.OK);
135 when(componentInstancePropertiesMergeBL.mergeComponentInstanceProperties(anyList(), anyList(), any(Component.class), anyString())).thenReturn(ActionStatus.OK);
136 when(toscaOperationFacade.getToscaElement(any(), any(ComponentParametersView.class))).thenReturn(Either.right(StorageOperationStatus.GENERAL_ERROR));
137 when(componentsUtils.convertFromStorageResponse(StorageOperationStatus.GENERAL_ERROR)).thenReturn(ActionStatus.GENERAL_ERROR);
138 when(componentsUtils.getResponseFormat(ActionStatus.GENERAL_ERROR)).thenReturn(errorResponse);
139 DataForMergeHolder dataHolder = new DataForMergeHolder();
140 dataHolder.setOrigComponentInputs(ObjectGenerator.buildInputs("input1", "input2"));
141 Either<Component, ResponseFormat> mergeResult = testInstance.mergeDataAfterCreate(USER, dataHolder, new Service(), "inst1");
142 assertEquals(errorResponse, mergeResult.right().value());
143 verifyZeroInteractions(componentInputsMergeBL);
146 private void assertComponentFilter(ComponentParametersView value) {
147 assertFalse(value.isIgnoreComponentInstances());
148 assertFalse(value.isIgnoreComponentInstancesProperties());
149 assertFalse(value.isIgnoreComponentInstancesInputs());
150 assertFalse(value.isIgnoreArtifacts());