Interface operation support for service - BE
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / validation / InterfaceOperationValidationTest.java
1 /*
2  * Copyright © 2016-2018 European Support Limited
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package org.openecomp.sdc.be.components.validation;
18
19 import static org.mockito.ArgumentMatchers.any;
20 import static org.mockito.Mockito.when;
21
22 import com.google.common.collect.Sets;
23 import fj.data.Either;
24
25 import java.util.ArrayList;
26 import java.util.Collection;
27 import java.util.HashMap;
28 import java.util.List;
29 import java.util.Map;
30 import java.util.Set;
31 import org.junit.Assert;
32 import org.junit.Before;
33 import org.junit.Test;
34 import org.mockito.Mockito;
35 import org.mockito.MockitoAnnotations;
36 import org.openecomp.sdc.be.components.impl.ResponseFormatManager;
37 import org.openecomp.sdc.be.datatypes.elements.ListDataDefinition;
38 import org.openecomp.sdc.be.datatypes.elements.OperationInputDefinition;
39 import org.openecomp.sdc.be.datatypes.elements.OperationOutputDefinition;
40 import org.openecomp.sdc.be.model.ArtifactDefinition;
41 import org.openecomp.sdc.be.model.ComponentInstanceInput;
42 import org.openecomp.sdc.be.model.InputDefinition;
43 import org.openecomp.sdc.be.model.InterfaceDefinition;
44 import org.openecomp.sdc.be.model.Operation;
45 import org.openecomp.sdc.be.model.Component;
46 import org.openecomp.sdc.be.model.Resource;
47 import org.openecomp.sdc.exception.ResponseFormat;
48 import org.openecomp.sdc.test.utils.InterfaceOperationTestUtils;
49
50 public class InterfaceOperationValidationTest {
51
52     private final Component component = setUpComponentMock();
53     private ResponseFormatManager responseFormatManagerMock;
54
55     private final InterfaceOperationValidationUtilTest interfaceOperationValidationUtilTest = new InterfaceOperationValidationUtilTest();
56     private final ListDataDefinition<OperationInputDefinition> operationInputDefinitionList = new ListDataDefinition<>();
57     private final ListDataDefinition<OperationOutputDefinition> operationOutputDefinitionList = new ListDataDefinition<>();
58
59     @Before
60     public void init() {
61         MockitoAnnotations.initMocks(this);
62         responseFormatManagerMock = Mockito.mock(ResponseFormatManager.class);
63         when(responseFormatManagerMock.getResponseFormat(any())).thenReturn(new ResponseFormat());
64         when(responseFormatManagerMock.getResponseFormat(any(), any())).thenReturn(new ResponseFormat());
65         when(responseFormatManagerMock.getResponseFormat(any(), any(), any())).thenReturn(new ResponseFormat());
66     }
67
68     @Test
69     public void testValidInterfaceOperation() {
70         operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label1"));
71         operationOutputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationOutputDefinition("label1"));
72         Collection<Operation> operations = createInterfaceOperationData("op2",
73                 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
74                         operationOutputDefinitionList,"upgrade");
75         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
76                 .validateInterfaceOperations(operations, component, false);
77         Assert.assertTrue(booleanResponseFormatEither.isLeft());
78     }
79
80     @Test
81     public void testInterfaceOperationDescriptionLength() {
82         operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label1"));
83         operationOutputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationOutputDefinition("label1"));
84         Collection<Operation> operations = createInterfaceOperationData("op2",
85                 "interface operation2 -  The Spring Initializer provides a project generator to make you " +
86                         "productive with the certain technology stack from the beginning. You can create a skeleton project" +
87                         "with web, data access (relational and NoSQL data stores), cloud, or messaging support",
88                 new ArtifactDefinition(), operationInputDefinitionList, operationOutputDefinitionList,"update");
89         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
90                 .validateInterfaceOperations(operations, component, false);
91         Assert.assertTrue(booleanResponseFormatEither.isRight());
92     }
93
94
95
96     @Test
97     public void testInterfaceOperationForEmptyType() {
98         operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label1"));
99         operationOutputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationOutputDefinition("label1"));
100         Collection<Operation> operations = createInterfaceOperationData("op2",
101                 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
102                 operationOutputDefinitionList, "");
103         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
104                 .validateInterfaceOperations(operations, component, false);
105         Assert.assertTrue(booleanResponseFormatEither.isRight());
106     }
107
108     @Test
109     public void testInterfaceOperationForEmptyInputParam() {
110         operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label1"));
111         operationOutputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationOutputDefinition("label1"));
112         Collection<Operation> operations = createInterfaceOperationData("op2",
113                 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
114                 operationOutputDefinitionList,"input2");
115         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
116                 .validateInterfaceOperations(operations, component, false);
117         Assert.assertTrue(booleanResponseFormatEither.isRight());
118     }
119
120     @Test
121     public void testInterfaceOperationForNonUniqueType() {
122         operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label1"));
123         operationOutputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationOutputDefinition("label1"));
124         Collection<Operation> operations = createInterfaceOperationData("op2",
125                 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
126                 operationOutputDefinitionList,"CREATE");
127         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
128                 .validateInterfaceOperations(operations, component, false);
129         Assert.assertTrue(booleanResponseFormatEither.isRight());
130     }
131
132     @Test
133     public void testInterfaceOperationTypeLength() {
134         operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label1"));
135         operationOutputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationOutputDefinition("label1"));
136         Collection<Operation> operations = createInterfaceOperationData("op2",
137                 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
138                 operationOutputDefinitionList,
139                 "interface operation2 -  The Spring Initializer provides a project generator to make you " +
140                         "productive with the certain technology stack from the beginning. You can create a skeleton project" +
141                         "with web, data access (relational and NoSQL data stores), cloud, or messaging support");
142         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
143                 .validateInterfaceOperations(operations, component, false);
144         Assert.assertTrue(booleanResponseFormatEither.isRight());
145     }
146
147
148     @Test
149     public void testInterfaceOperationUniqueInputParamNameInvalid() {
150         operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label1"));
151         operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label1"));
152         operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label2"));
153         operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label2"));
154         operationOutputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationOutputDefinition("label1"));
155         Collection<Operation> operations = createInterfaceOperationData("op2",
156                 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
157                 operationOutputDefinitionList,"create");
158
159         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
160                 .validateInterfaceOperations(operations, component, false);
161         Assert.assertTrue(booleanResponseFormatEither.isRight());
162     }
163
164     @Test
165     public void testInterfaceOperationUniqueInputParamNameValid() {
166         operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label1"));
167         operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label2"));
168         operationOutputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationOutputDefinition("label1"));
169         Collection<Operation> operations = createInterfaceOperationData("op2",
170                 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
171                 operationOutputDefinitionList,"update");
172
173
174         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
175                 .validateInterfaceOperations(operations, component, false);
176         Assert.assertTrue(booleanResponseFormatEither.isLeft());
177     }
178
179     @Test
180     public void testInterfaceOperationInputParamNameEmpty() {
181         operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("  "));
182         operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label1"));
183         operationOutputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationOutputDefinition("label1"));
184         Collection<Operation> operations = createInterfaceOperationData("op2",
185                 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
186                 operationOutputDefinitionList,"update");
187
188
189         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
190                 .validateInterfaceOperations(operations, component, false);
191         Assert.assertTrue(booleanResponseFormatEither.isRight());
192     }
193
194     private Set<Operation> createInterfaceOperationData( String uniqueID, String description, ArtifactDefinition artifactDefinition,
195                                                          ListDataDefinition<OperationInputDefinition> inputs,
196                                                          ListDataDefinition<OperationOutputDefinition> outputs, String name) {
197         return Sets.newHashSet(InterfaceOperationTestUtils.createInterfaceOperation(uniqueID, description, artifactDefinition, inputs, outputs, name));
198     }
199
200     private Component setUpComponentMock(){
201         Component component = new Resource();
202
203         List<InputDefinition> inputs = new ArrayList<>();
204         InputDefinition inputDefinition = new InputDefinition();
205         InputDefinition inputDefinition1 = new InputDefinition();
206
207         List<ComponentInstanceInput> componentInstanceInputs = new ArrayList<>();
208         ComponentInstanceInput componentInstanceInput1 = new ComponentInstanceInput();
209         componentInstanceInput1.setComponentInstanceName("componentInstance1");
210         componentInstanceInput1.setUniqueId("inputId1");
211         ComponentInstanceInput componentInstanceInput2 = new ComponentInstanceInput();
212         componentInstanceInput2.setComponentInstanceName("componentInstance2");
213         componentInstanceInput2.setUniqueId("inputId2");
214
215         componentInstanceInputs.add(componentInstanceInput1);
216         componentInstanceInputs.add(componentInstanceInput2);
217
218         inputDefinition.setUniqueId("inputId1");
219         inputDefinition.setInputs(componentInstanceInputs);
220         inputDefinition1.setUniqueId("uniqueId3");
221
222         inputs.add(inputDefinition);
223         inputs.add(inputDefinition1);
224         component.setInputs(inputs);
225         component.setInterfaces(createMockInterfaceDefinition());
226         return  component;
227     }
228
229     private  Map<String, InterfaceDefinition> createMockInterfaceDefinition() {
230         Map<String, Operation> operationMap = InterfaceOperationTestUtils.createMockOperationMap();
231         Map<String, InterfaceDefinition> interfaceDefinitionMap = new HashMap<>();
232         interfaceDefinitionMap.put("int1", InterfaceOperationTestUtils.createInterface("int1", "Interface 1",
233                 "lifecycle", "tosca", operationMap));
234
235         return interfaceDefinitionMap;
236     }
237
238     private class InterfaceOperationValidationUtilTest extends InterfaceOperationValidation {
239
240         protected ResponseFormatManager getResponseFormatManager() {
241             return responseFormatManagerMock;
242         }
243     }
244 }