0efbf5fc5bd73daa1e96e772cb1c68779d7c0137
[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.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;
37
38 import fj.data.Either;
39
40 public class ComponentInstancePropsAndInputsMergeTest {
41
42     private static final String INSTANCE_ID1 = "inst1";
43     private static final User USER = new User();
44
45     @InjectMocks
46     private ComponentInstancePropsAndInputsMerge testInstance;
47
48     @Mock
49     private ToscaOperationFacade toscaOperationFacade;
50
51     @Mock
52     private ComponentsUtils componentsUtils;
53
54     @Mock
55     private ComponentInstancePropertiesMergeBL componentInstancePropertiesMergeBL;
56
57     @Mock
58     private ComponentInstanceInputsMergeBL componentInstanceInputsMergeBL;
59
60     @Mock
61     private ComponentInputsMergeBL componentInputsMergeBL;
62
63     private Resource resourceToUpdate;
64
65     private DataForMergeHolder oldDataHolder;
66
67     @Before
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")
74                 .addInput("input1")
75                 .addInput("input2")
76                 .setUniqueId("resourceId").build();
77
78         List<InputDefinition> oldInputs = ObjectGenerator.buildInputs("input1");
79         List<ComponentInstanceProperty> oldInstProps = ObjectGenerator.buildInstanceProperties("instProp1", "instProp3");
80         List<ComponentInstanceInput> oldInstInputs = ObjectGenerator.buildInstanceInputs("instInput1", "instInput3");
81
82         oldDataHolder = new DataForMergeHolder();
83         oldDataHolder.setOrigComponentInputs(oldInputs);
84         oldDataHolder.setOrigComponentInstanceProperties(oldInstProps);
85         oldDataHolder.setOrigComponentInstanceInputs(oldInstInputs);
86     }
87
88     @Test
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");
93
94         DataForMergeHolder dataForMergeHolder = new DataForMergeHolder();
95         dataForMergeHolder.setOrigComponentInputs(oldInputs);
96         dataForMergeHolder.setOrigComponentInstanceProperties(oldInstProps);
97         dataForMergeHolder.setOrigComponentInstanceInputs(oldInstInputs);
98
99         ArgumentCaptor<ComponentParametersView> parametersViewCaptor = ArgumentCaptor.forClass(ComponentParametersView.class);
100
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());
108     }
109
110     @Test
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);
118     }
119
120     @Test
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);
129     }
130
131     @Test
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);
144     }
145
146     private void assertComponentFilter(ComponentParametersView value) {
147         assertFalse(value.isIgnoreComponentInstances());
148         assertFalse(value.isIgnoreComponentInstancesProperties());
149         assertFalse(value.isIgnoreComponentInstancesInputs());
150         assertFalse(value.isIgnoreArtifacts());
151     }
152 }