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 java.util.Collection;
23 import java.util.HashMap;
27 import org.junit.Assert;
28 import org.junit.Before;
29 import org.junit.Test;
30 import org.mockito.InjectMocks;
31 import org.mockito.Mock;
32 import org.mockito.Mockito;
33 import org.mockito.MockitoAnnotations;
34 import org.openecomp.sdc.be.components.InterfaceOperationTestUtils;
35 import org.openecomp.sdc.be.components.impl.ResponseFormatManager;
36 import org.openecomp.sdc.be.datatypes.elements.ListDataDefinition;
37 import org.openecomp.sdc.be.datatypes.elements.OperationInputDefinition;
38 import org.openecomp.sdc.be.datatypes.elements.OperationOutputDefinition;
39 import org.openecomp.sdc.be.model.ArtifactDefinition;
40 import org.openecomp.sdc.be.model.Component;
41 import org.openecomp.sdc.be.model.ComponentParametersView;
42 import org.openecomp.sdc.be.model.InterfaceDefinition;
43 import org.openecomp.sdc.be.model.Operation;
44 import org.openecomp.sdc.be.model.Resource;
45 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
46 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
47 import org.openecomp.sdc.exception.ResponseFormat;
49 import com.google.common.collect.Sets;
51 import fj.data.Either;
53 public class InterfaceOperationValidationTest implements InterfaceOperationTestUtils {
55 private Resource resource = (Resource) getToscaFullElement().left().value();
57 ResponseFormatManager mock;
59 ToscaOperationFacade toscaOperationFacade;
62 InterfaceOperationValidationUtilTest interfaceOperationValidationUtilTest = new InterfaceOperationValidationUtilTest();
63 private static final String RESOURCE_ID = "resource1";
64 ListDataDefinition<OperationInputDefinition> operationInputDefinitionList = new ListDataDefinition<>();
65 ListDataDefinition<OperationOutputDefinition> operationOutputDefinitionList = new ListDataDefinition<>();
68 MockitoAnnotations.initMocks(this);
69 mock = Mockito.mock(ResponseFormatManager.class);
70 when(toscaOperationFacade.getToscaElement(any(), any(ComponentParametersView.class))).thenReturn(Either.left(resource));
71 when(mock.getResponseFormat(any())).thenReturn(new ResponseFormat());
72 when(mock.getResponseFormat(any(), any())).thenReturn(new ResponseFormat());
73 when(mock.getResponseFormat(any(), any(), any())).thenReturn(new ResponseFormat());
78 public void testValidInterfaceOperation() {
79 operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
80 operationOutputDefinitionList.add(createMockOperationOutputDefinition("label1"));
81 Collection<Operation> operations = createInterfaceOperationData("op2",
82 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
83 operationOutputDefinitionList,"upgrade");
84 Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
85 .validateInterfaceOperations(operations, RESOURCE_ID, false);
86 Assert.assertTrue(booleanResponseFormatEither.isLeft());
90 public void testInterfaceOperationDescriptionLength() {
91 operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
92 operationOutputDefinitionList.add(createMockOperationOutputDefinition("label1"));
93 Collection<Operation> operations = createInterfaceOperationData("op2",
94 "interface operation2 - The Spring Initializer provides a project generator to make you " +
95 "productive with the certain technology stack from the beginning. You can create a skeleton project" +
96 "with web, data access (relational and NoSQL datastores), cloud, or messaging support",
97 new ArtifactDefinition(), operationInputDefinitionList, operationOutputDefinitionList,"update");
98 Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
99 .validateInterfaceOperations(operations, RESOURCE_ID, false);
100 Assert.assertTrue(booleanResponseFormatEither.isRight());
106 public void testInterfaceOperationForEmptyType() {
107 operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
108 operationOutputDefinitionList.add(createMockOperationOutputDefinition("label1"));
109 Collection<Operation> operations = createInterfaceOperationData("op2",
110 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
111 operationOutputDefinitionList, "");
112 Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
113 .validateInterfaceOperations(operations, RESOURCE_ID, false);
114 Assert.assertTrue(booleanResponseFormatEither.isRight());
118 public void testInterfaceOperationForEmptyInputParam() {
119 operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
120 operationOutputDefinitionList.add(createMockOperationOutputDefinition("label1"));
121 Collection<Operation> operations = createInterfaceOperationData("op2",
122 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
123 operationOutputDefinitionList,"input2");
124 Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
125 .validateInterfaceOperations(operations, RESOURCE_ID, false);
126 Assert.assertTrue(booleanResponseFormatEither.isRight());
130 public void testInterfaceOperationForNonUniqueType() {
131 operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
132 operationOutputDefinitionList.add(createMockOperationOutputDefinition("label1"));
133 Collection<Operation> operations = createInterfaceOperationData("op2",
134 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
135 operationOutputDefinitionList,"CREATE");
136 Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
137 .validateInterfaceOperations(operations, RESOURCE_ID, false);
138 Assert.assertTrue(booleanResponseFormatEither.isRight());
142 public void testInterfaceOperationTypeLength() {
143 operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
144 operationOutputDefinitionList.add(createMockOperationOutputDefinition("label1"));
145 Collection<Operation> operations = createInterfaceOperationData("op2",
146 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
147 operationOutputDefinitionList,
148 "interface operation2 - The Spring Initializer provides a project generator to make you " +
149 "productive with the certain technology stack from the beginning. You can create a skeleton project" +
150 "with web, data access (relational and NoSQL datastores), cloud, or messaging support");
151 Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
152 .validateInterfaceOperations(operations, RESOURCE_ID, false);
153 Assert.assertTrue(booleanResponseFormatEither.isRight());
158 public void testInterfaceOperationUniqueInputParamNameInvalid() {
159 operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
160 operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
161 operationInputDefinitionList.add(createMockOperationInputDefinition("label2"));
162 operationInputDefinitionList.add(createMockOperationInputDefinition("label2"));
163 operationOutputDefinitionList.add(createMockOperationOutputDefinition("label1"));
164 Collection<Operation> operations = createInterfaceOperationData("op2",
165 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
166 operationOutputDefinitionList,"create");
168 Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
169 .validateInterfaceOperations(operations, RESOURCE_ID, false);
170 Assert.assertTrue(booleanResponseFormatEither.isRight());
174 public void testInterfaceOperationUniqueInputParamNameValid() {
175 operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
176 operationInputDefinitionList.add(createMockOperationInputDefinition("label2"));
177 operationOutputDefinitionList.add(createMockOperationOutputDefinition("label1"));
178 Collection<Operation> operations = createInterfaceOperationData("op2",
179 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
180 operationOutputDefinitionList,"update");
183 Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
184 .validateInterfaceOperations(operations, RESOURCE_ID, false);
185 Assert.assertTrue(booleanResponseFormatEither.isLeft());
189 public void testInterfaceOperationeInputParamNameEmpty() {
190 operationInputDefinitionList.add(createMockOperationInputDefinition(" "));
191 operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
192 operationOutputDefinitionList.add(createMockOperationOutputDefinition("label1"));
193 Collection<Operation> operations = createInterfaceOperationData("op2",
194 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
195 operationOutputDefinitionList,"update");
198 Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
199 .validateInterfaceOperations(operations, RESOURCE_ID, false);
200 Assert.assertTrue(booleanResponseFormatEither.isRight());
203 private Set<Operation> createInterfaceOperationData( String uniqueID, String description, ArtifactDefinition artifactDefinition,
204 ListDataDefinition<OperationInputDefinition> inputs,
205 ListDataDefinition<OperationOutputDefinition> outputs, String name) {
206 return Sets.newHashSet(createInterfaceOperation(uniqueID, description, artifactDefinition, inputs, outputs, name));
209 private <T extends Component> Either<T, StorageOperationStatus> getToscaFullElement() {
211 return Either.left((T) setUpResourceMock());
214 private Resource setUpResourceMock(){
215 Resource resource = new Resource();
216 resource.setInterfaces(createMockInterfaceDefinition());
221 private Map<String, InterfaceDefinition> createMockInterfaceDefinition() {
222 Map<String, Operation> operationMap = createMockOperationMap();
223 Map<String, InterfaceDefinition> interfaceDefinitionMap = new HashMap<>();
224 interfaceDefinitionMap.put("int1", createInterface("int1", "Interface 1",
225 "lifecycle", "tosca", operationMap));
227 return interfaceDefinitionMap;
230 private class InterfaceOperationValidationUtilTest extends InterfaceOperationValidation {
232 protected ResponseFormatManager getResponseFormatManager() {