cb3d506bfcd33d65c969834c2e7facca47b1d3e0
[sdc.git] /
1 package org.openecomp.sdc.be.components.merge.instance;
2
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;
11
12 import java.util.List;
13
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.merge.property.ComponentInstanceInputsMergeBL;
23 import org.openecomp.sdc.be.components.merge.property.ComponentInstancePropertiesMergeBL;
24 import org.openecomp.sdc.be.components.utils.ObjectGenerator;
25 import org.openecomp.sdc.be.components.utils.ResourceBuilder;
26 import org.openecomp.sdc.be.dao.api.ActionStatus;
27 import org.openecomp.sdc.be.impl.ComponentsUtils;
28 import org.openecomp.sdc.be.model.Component;
29 import org.openecomp.sdc.be.model.ComponentInstanceInput;
30 import org.openecomp.sdc.be.model.ComponentInstanceProperty;
31 import org.openecomp.sdc.be.model.ComponentParametersView;
32 import org.openecomp.sdc.be.model.InputDefinition;
33 import org.openecomp.sdc.be.model.Resource;
34 import org.openecomp.sdc.be.model.Service;
35 import org.openecomp.sdc.be.model.User;
36 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
37 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
38 import org.openecomp.sdc.exception.ResponseFormat;
39
40 import fj.data.Either;
41
42 public class ComponentInstancePropsAndInputsMergeTest {
43
44     private static final String INSTANCE_ID1 = "inst1";
45     private static final User USER = new User();
46
47     @InjectMocks
48     private ComponentInstancePropsAndInputsMerge testInstance;
49
50     @Mock
51     private ToscaOperationFacade toscaOperationFacade;
52
53     @Mock
54     private ComponentsUtils componentsUtils;
55
56     @Mock
57     private ComponentInstancePropertiesMergeBL componentInstancePropertiesMergeBL;
58
59     @Mock
60     private ComponentInstanceInputsMergeBL componentInstanceInputsMergeBL;
61
62     @Mock
63     private ComponentInputsMergeBL componentInputsMergeBL;
64
65     private Resource resourceToUpdate;
66
67     private DataForMergeHolder oldDataHolder;
68
69     @Before
70     public void setUp() throws Exception {
71         MockitoAnnotations.initMocks(this);
72         resourceToUpdate =  new ResourceBuilder().addInstanceInput(INSTANCE_ID1, "instInput1")
73                 .addInstanceInput(INSTANCE_ID1, "instInput2")
74                 .addInstanceProperty(INSTANCE_ID1, "instProp1")
75                 .addInstanceProperty(INSTANCE_ID1, "instProp2")
76                 .addInput("input1")
77                 .addInput("input2")
78                 .setUniqueId("resourceId").build();
79
80         List<InputDefinition> oldInputs = ObjectGenerator.buildInputs("input1");
81         List<ComponentInstanceProperty> oldInstProps = ObjectGenerator.buildInstanceProperties("instProp1", "instProp3");
82         List<ComponentInstanceInput> oldInstInputs = ObjectGenerator.buildInstanceInputs("instInput1", "instInput3");
83
84         oldDataHolder = new DataForMergeHolder();
85         oldDataHolder.setOrigComponentInputs(oldInputs);
86         oldDataHolder.setOrigComponentInstanceProperties(oldInstProps);
87         oldDataHolder.setOrigComponentInstanceInputs(oldInstInputs);
88     }
89
90     @Test
91     public void mergeDataAfterCreate() throws Exception {
92         List<InputDefinition> oldInputs = ObjectGenerator.buildInputs("input1");
93         List<ComponentInstanceProperty> oldInstProps = ObjectGenerator.buildInstanceProperties("instProp1", "instProp3");
94         List<ComponentInstanceInput> oldInstInputs = ObjectGenerator.buildInstanceInputs("instInput1", "instInput3");
95
96         DataForMergeHolder dataForMergeHolder = new DataForMergeHolder();
97         dataForMergeHolder.setOrigComponentInputs(oldInputs);
98         dataForMergeHolder.setOrigComponentInstanceProperties(oldInstProps);
99         dataForMergeHolder.setOrigComponentInstanceInputs(oldInstInputs);
100
101         ArgumentCaptor<ComponentParametersView> parametersViewCaptor = ArgumentCaptor.forClass(ComponentParametersView.class);
102
103         when(toscaOperationFacade.getToscaElement(Mockito.eq("resourceId"), parametersViewCaptor.capture())).thenReturn(Either.left(resourceToUpdate));
104         when(componentInstanceInputsMergeBL.mergeComponentInstanceInputs(oldInstInputs, oldInputs, resourceToUpdate, INSTANCE_ID1)).thenReturn(ActionStatus.OK);
105         when(componentInstancePropertiesMergeBL.mergeComponentInstanceProperties(oldInstProps, oldInputs, resourceToUpdate, INSTANCE_ID1)).thenReturn(ActionStatus.OK);
106         when(componentInputsMergeBL.redeclareComponentInputsForInstance(oldInputs, resourceToUpdate, INSTANCE_ID1)).thenReturn(ActionStatus.OK);
107         Either<Component, ResponseFormat> mergeResult = testInstance.mergeDataAfterCreate(USER, dataForMergeHolder, resourceToUpdate, INSTANCE_ID1);
108         assertEquals(mergeResult.left().value(), resourceToUpdate);
109         assertComponentFilter(parametersViewCaptor.getValue());
110     }
111
112     @Test
113     public void mergeDataAfterCreate_failedToMergeComponentInstanceInputs() throws Exception {
114         ResponseFormat errorResponse = new ResponseFormat();
115         when(componentsUtils.getResponseFormat(ActionStatus.GENERAL_ERROR)).thenReturn(errorResponse);
116         when(componentInstanceInputsMergeBL.mergeComponentInstanceInputs(anyListOf(ComponentInstanceInput.class), anyListOf(InputDefinition.class), any(Component.class), anyString())).thenReturn(ActionStatus.GENERAL_ERROR);
117         Either<Component, ResponseFormat> mergeResult = testInstance.mergeDataAfterCreate(USER, new DataForMergeHolder(), new Service(), "inst1");
118         assertEquals(errorResponse, mergeResult.right().value());
119         verifyZeroInteractions(componentInputsMergeBL, componentInstancePropertiesMergeBL, toscaOperationFacade);
120     }
121
122     @Test
123     public void mergeDataAfterCreate_failedToMergeComponentInstProps() throws Exception {
124         ResponseFormat errorResponse = new ResponseFormat();
125         when(componentInstanceInputsMergeBL.mergeComponentInstanceInputs(anyList(), anyList(), any(Component.class), anyString())).thenReturn(ActionStatus.OK);
126         when(componentInstancePropertiesMergeBL.mergeComponentInstanceProperties(anyList(), anyList(), any(Component.class), anyString())).thenReturn(ActionStatus.GENERAL_ERROR);
127         when(componentsUtils.getResponseFormat(ActionStatus.GENERAL_ERROR)).thenReturn(errorResponse);
128         Either<Component, ResponseFormat> mergeResult = testInstance.mergeDataAfterCreate(USER, new DataForMergeHolder(), new Service(), "inst1");
129         assertEquals(errorResponse, mergeResult.right().value());
130         verifyZeroInteractions(componentInputsMergeBL, toscaOperationFacade);
131     }
132
133     @Test
134     public void mergeDataAfterCreate_mergeInputs_FailedToFetchResource() throws Exception {
135         ResponseFormat errorResponse = new ResponseFormat();
136         when(componentInstanceInputsMergeBL.mergeComponentInstanceInputs(anyList(), anyList(), any(Component.class), anyString())).thenReturn(ActionStatus.OK);
137         when(componentInstancePropertiesMergeBL.mergeComponentInstanceProperties(anyList(), anyList(), any(Component.class), anyString())).thenReturn(ActionStatus.OK);
138         when(toscaOperationFacade.getToscaElement(any(), any(ComponentParametersView.class))).thenReturn(Either.right(StorageOperationStatus.GENERAL_ERROR));
139         when(componentsUtils.convertFromStorageResponse(StorageOperationStatus.GENERAL_ERROR)).thenReturn(ActionStatus.GENERAL_ERROR);
140         when(componentsUtils.getResponseFormat(ActionStatus.GENERAL_ERROR)).thenReturn(errorResponse);
141         DataForMergeHolder dataHolder = new DataForMergeHolder();
142         dataHolder.setOrigComponentInputs(ObjectGenerator.buildInputs("input1", "input2"));
143         Either<Component, ResponseFormat> mergeResult = testInstance.mergeDataAfterCreate(USER, dataHolder, new Service(), "inst1");
144         assertEquals(errorResponse, mergeResult.right().value());
145         verifyZeroInteractions(componentInputsMergeBL);
146     }
147
148     private void assertComponentFilter(ComponentParametersView value) {
149         assertFalse(value.isIgnoreComponentInstances());
150         assertFalse(value.isIgnoreComponentInstancesProperties());
151         assertFalse(value.isIgnoreComponentInstancesInputs());
152         assertFalse(value.isIgnoreArtifacts());
153     }
154 }