2 * Copyright © 2016-2018 European Support Limited
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package org.openecomp.sdc.be.components.validation;
19 import static org.mockito.ArgumentMatchers.any;
20 import static org.mockito.Mockito.when;
22 import com.google.common.collect.Sets;
23 import fj.data.Either;
25 import java.util.ArrayList;
26 import java.util.Collection;
27 import java.util.HashMap;
28 import java.util.List;
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;
50 public class InterfaceOperationValidationTest {
52 private final Component component = setUpComponentMock();
53 private ResponseFormatManager responseFormatManagerMock;
55 private final InterfaceOperationValidationUtilTest interfaceOperationValidationUtilTest = new InterfaceOperationValidationUtilTest();
56 private final ListDataDefinition<OperationInputDefinition> operationInputDefinitionList = new ListDataDefinition<>();
57 private final ListDataDefinition<OperationOutputDefinition> operationOutputDefinitionList = new ListDataDefinition<>();
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());
69 public void shouldPassOperationValidationForHappyScenario() {
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());
81 public void shouldFailWhenOperationOperationDescriptionLengthInvalid() {
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());
97 public void shouldFailWhenOperationNameIsEmpty() {
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());
109 public void shouldFailWhenOperationNamesAreNotUnique() {
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,"CREATE");
115 Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
116 .validateInterfaceOperations(operations, component, false);
117 Assert.assertTrue(booleanResponseFormatEither.isRight());
121 public void shouldFailWhenOperationNameLengthIsInvalid() {
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,
127 "interface operation2 - The Spring Initializer provides a project generator to make you " +
128 "productive with the certain technology stack from the beginning. You can create a skeleton project" +
129 "with web, data access (relational and NoSQL data stores), cloud, or messaging support");
130 Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
131 .validateInterfaceOperations(operations, component, false);
132 Assert.assertTrue(booleanResponseFormatEither.isRight());
137 public void shouldFailWhenOperationInputParamNamesAreNotUnique() {
138 operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label1"));
139 operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label1"));
140 operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label2"));
141 operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label2"));
142 operationOutputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationOutputDefinition("label1"));
143 Collection<Operation> operations = createInterfaceOperationData("op2",
144 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
145 operationOutputDefinitionList,"create");
147 Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
148 .validateInterfaceOperations(operations, component, false);
149 Assert.assertTrue(booleanResponseFormatEither.isRight());
153 public void shouldPassWhenOperationInputParamNamesAreUnique() {
154 operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label1"));
155 operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label2"));
156 operationOutputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationOutputDefinition("label1"));
157 Collection<Operation> operations = createInterfaceOperationData("op2",
158 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
159 operationOutputDefinitionList,"update");
161 Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
162 .validateInterfaceOperations(operations, component, false);
163 Assert.assertTrue(booleanResponseFormatEither.isLeft());
167 public void shouldPassWhenOperationInputParamNamesHasSubProperty() {
168 operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label1"));
169 operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label2"));
170 operationOutputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationOutputDefinition("label1"));
171 Collection<Operation> operations = createInterfaceOperationData("op2",
172 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
173 operationOutputDefinitionList,"update");
174 operationInputDefinitionList.getListToscaDataDefinition().get(0).setInputId(operationInputDefinitionList
175 .getListToscaDataDefinition().get(0).getInputId().concat(".subproperty"));
176 Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
177 .validateInterfaceOperations(operations, component, false);
178 Assert.assertTrue(booleanResponseFormatEither.isLeft());
182 public void shouldFailWhenOperationInputParamNameEmpty() {
183 operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition(" "));
184 operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label1"));
185 operationOutputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationOutputDefinition("label1"));
186 Collection<Operation> operations = createInterfaceOperationData("op2",
187 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
188 operationOutputDefinitionList,"update");
190 Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
191 .validateInterfaceOperations(operations, component, false);
192 Assert.assertTrue(booleanResponseFormatEither.isRight());
196 public void shouldFailWhenOperationOutputParamNameEmpty() {
197 operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("inputParam"));
198 operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label1"));
199 operationOutputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationOutputDefinition(" "));
200 Collection<Operation> operations = createInterfaceOperationData("op2",
201 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
202 operationOutputDefinitionList,"update");
204 Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
205 .validateInterfaceOperations(operations, component, false);
206 Assert.assertTrue(booleanResponseFormatEither.isRight());
210 public void shouldPassWhenInterfaceOperationOutputParamNamesUnique() {
211 operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("label1"));
212 operationOutputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationOutputDefinition("label1"));
213 operationOutputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationOutputDefinition("label2"));
214 Collection<Operation> operations = createInterfaceOperationData("op2",
215 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
216 operationOutputDefinitionList,"update");
218 Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
219 .validateInterfaceOperations(operations, component, false);
220 Assert.assertTrue(booleanResponseFormatEither.isLeft());
224 public void shouldFailWhenOperationOutputParamNamesAreNotUnique() {
225 operationInputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationInputDefinition("inputParam1"));
226 operationOutputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationOutputDefinition("outParam1"));
227 operationOutputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationOutputDefinition("outParam2"));
228 operationOutputDefinitionList.add(InterfaceOperationTestUtils.createMockOperationOutputDefinition("outParam2"));
229 Collection<Operation> operations = createInterfaceOperationData("op2",
230 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
231 operationOutputDefinitionList,"update");
233 Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
234 .validateInterfaceOperations(operations, component, false);
235 Assert.assertTrue(booleanResponseFormatEither.isRight());
238 private Set<Operation> createInterfaceOperationData( String uniqueID, String description, ArtifactDefinition artifactDefinition,
239 ListDataDefinition<OperationInputDefinition> inputs,
240 ListDataDefinition<OperationOutputDefinition> outputs, String name) {
241 return Sets.newHashSet(InterfaceOperationTestUtils.createInterfaceOperation(uniqueID, description, artifactDefinition, inputs, outputs, name));
244 private Component setUpComponentMock(){
245 Component component = new Resource();
247 List<InputDefinition> inputs = new ArrayList<>();
248 InputDefinition inputDefinition = new InputDefinition();
249 InputDefinition inputDefinition1 = new InputDefinition();
251 List<ComponentInstanceInput> componentInstanceInputs = new ArrayList<>();
252 ComponentInstanceInput componentInstanceInput1 = new ComponentInstanceInput();
253 componentInstanceInput1.setComponentInstanceName("componentInstance1");
254 componentInstanceInput1.setUniqueId("inputId1");
255 ComponentInstanceInput componentInstanceInput2 = new ComponentInstanceInput();
256 componentInstanceInput2.setComponentInstanceName("componentInstance2");
257 componentInstanceInput2.setUniqueId("inputId2");
259 componentInstanceInputs.add(componentInstanceInput1);
260 componentInstanceInputs.add(componentInstanceInput2);
262 inputDefinition.setUniqueId("inputId1");
263 inputDefinition.setInputs(componentInstanceInputs);
264 inputDefinition1.setUniqueId("uniqueId3");
266 inputs.add(inputDefinition);
267 inputs.add(inputDefinition1);
268 component.setInputs(inputs);
269 component.setInterfaces(createMockInterfaceDefinition());
273 private Map<String, InterfaceDefinition> createMockInterfaceDefinition() {
274 Map<String, Operation> operationMap = InterfaceOperationTestUtils.createMockOperationMap();
275 Map<String, InterfaceDefinition> interfaceDefinitionMap = new HashMap<>();
276 interfaceDefinitionMap.put("int1", InterfaceOperationTestUtils.createInterface("int1", "Interface 1",
277 "lifecycle", "tosca", operationMap));
279 return interfaceDefinitionMap;
282 private class InterfaceOperationValidationUtilTest extends InterfaceOperationValidation {
284 protected ResponseFormatManager getResponseFormatManager() {
285 return responseFormatManagerMock;