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 com.google.common.collect.Sets;
20 import fj.data.Either;
21 import org.junit.Assert;
22 import org.junit.Before;
23 import org.junit.Test;
24 import org.mockito.InjectMocks;
25 import org.mockito.Mock;
26 import org.mockito.Mockito;
27 import org.mockito.MockitoAnnotations;
28 import org.openecomp.sdc.be.components.InterfaceOperationTestUtils;
29 import org.openecomp.sdc.be.components.impl.ResponseFormatManager;
30 import org.openecomp.sdc.be.datatypes.elements.ListDataDefinition;
31 import org.openecomp.sdc.be.datatypes.elements.OperationInputDefinition;
32 import org.openecomp.sdc.be.model.ArtifactDefinition;
33 import org.openecomp.sdc.be.model.Component;
34 import org.openecomp.sdc.be.model.ComponentParametersView;
35 import org.openecomp.sdc.be.model.InterfaceDefinition;
36 import org.openecomp.sdc.be.model.Operation;
37 import org.openecomp.sdc.be.model.Resource;
38 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
39 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
40 import org.openecomp.sdc.exception.ResponseFormat;
42 import java.util.Collection;
43 import java.util.HashMap;
47 import static org.mockito.ArgumentMatchers.any;
48 import static org.mockito.Mockito.when;
50 public class InterfaceOperationValidationTest implements InterfaceOperationTestUtils {
52 private Resource resource = (Resource) getToscaFullElement().left().value();
54 ResponseFormatManager mock;
56 ToscaOperationFacade toscaOperationFacade;
59 InterfaceOperationValidationUtilTest interfaceOperationValidationUtilTest = new InterfaceOperationValidationUtilTest();
60 private static final String RESOURCE_ID = "resource1";
61 ListDataDefinition<OperationInputDefinition> operationInputDefinitionList = new ListDataDefinition<>();
64 MockitoAnnotations.initMocks(this);
65 mock = Mockito.mock(ResponseFormatManager.class);
66 when(toscaOperationFacade.getToscaElement(any(), any(ComponentParametersView.class))).thenReturn(Either.left(resource));
67 when(mock.getResponseFormat(any())).thenReturn(new ResponseFormat());
68 when(mock.getResponseFormat(any(), any())).thenReturn(new ResponseFormat());
69 when(mock.getResponseFormat(any(), any(), any())).thenReturn(new ResponseFormat());
74 public void testValidInterfaceOperation() {
75 operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
76 Collection<Operation> operations = createInterfaceOperationData("op2",
77 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,"upgrade");
78 Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
79 .validateInterfaceOperations(operations, RESOURCE_ID, false);
80 Assert.assertTrue(booleanResponseFormatEither.isLeft());
84 public void testInterfaceOperationDescriptionLength() {
85 operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
86 Collection<Operation> operations = createInterfaceOperationData("op2",
87 "interface operation2 - The Spring Initializer provides a project generator to make you " +
88 "productive with the certain technology stack from the beginning. You can create a skeleton project" +
89 "with web, data access (relational and NoSQL datastores), cloud, or messaging support",
90 new ArtifactDefinition(), operationInputDefinitionList,"update");
91 Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
92 .validateInterfaceOperations(operations, RESOURCE_ID, false);
93 Assert.assertTrue(booleanResponseFormatEither.isRight());
99 public void testInterfaceOperationForEmptyType() {
100 operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
101 Collection<Operation> operations = createInterfaceOperationData("op2",
102 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,"");
103 Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
104 .validateInterfaceOperations(operations, RESOURCE_ID, false);
105 Assert.assertTrue(booleanResponseFormatEither.isRight());
109 public void testInterfaceOperationForEmptyInputParam() {
110 operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
111 Collection<Operation> operations = createInterfaceOperationData("op2",
112 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,"input2");
113 Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
114 .validateInterfaceOperations(operations, RESOURCE_ID, false);
115 Assert.assertTrue(booleanResponseFormatEither.isRight());
119 public void testInterfaceOperationForNonUniqueType() {
120 operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
121 Collection<Operation> operations = createInterfaceOperationData("op2",
122 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,"CREATE");
123 Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
124 .validateInterfaceOperations(operations, RESOURCE_ID, false);
125 Assert.assertTrue(booleanResponseFormatEither.isRight());
129 public void testInterfaceOperationTypeLength() {
130 operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
131 Collection<Operation> operations = createInterfaceOperationData("op2",
132 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
133 "interface operation2 - The Spring Initializer provides a project generator to make you " +
134 "productive with the certain technology stack from the beginning. You can create a skeleton project" +
135 "with web, data access (relational and NoSQL datastores), cloud, or messaging support");
136 Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
137 .validateInterfaceOperations(operations, RESOURCE_ID, false);
138 Assert.assertTrue(booleanResponseFormatEither.isRight());
143 public void testInterfaceOperationUniqueInputParamNameInvalid() {
144 operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
145 operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
146 operationInputDefinitionList.add(createMockOperationInputDefinition("label2"));
147 operationInputDefinitionList.add(createMockOperationInputDefinition("label2"));
148 Collection<Operation> operations = createInterfaceOperationData("op2",
149 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,"create");
151 Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
152 .validateInterfaceOperations(operations, RESOURCE_ID, false);
153 Assert.assertTrue(booleanResponseFormatEither.isRight());
157 public void testInterfaceOperationUniqueInputParamNameValid() {
158 operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
159 operationInputDefinitionList.add(createMockOperationInputDefinition("label2"));
160 Collection<Operation> operations = createInterfaceOperationData("op2",
161 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,"update");
164 Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
165 .validateInterfaceOperations(operations, RESOURCE_ID, false);
166 Assert.assertTrue(booleanResponseFormatEither.isLeft());
169 private Set<Operation> createInterfaceOperationData( String uniqueID, String description, ArtifactDefinition artifactDefinition,
170 ListDataDefinition<OperationInputDefinition> inputs, String name) {
171 return Sets.newHashSet(createInterfaceOperation(uniqueID, description, artifactDefinition, inputs, name));
174 private <T extends Component> Either<T, StorageOperationStatus> getToscaFullElement() {
176 return Either.left((T) setUpResourceMock());
179 private Resource setUpResourceMock(){
180 Resource resource = new Resource();
181 resource.setInterfaces(createMockInterfaceDefinition());
186 private Map<String, InterfaceDefinition> createMockInterfaceDefinition() {
187 Map<String, Operation> operationMap = createMockOperationMap();
188 Map<String, InterfaceDefinition> interfaceDefinitionMap = new HashMap<>();
189 interfaceDefinitionMap.put("int1", createInterface("int1", "Interface 1",
190 "lifecycle", "tosca", operationMap));
192 return interfaceDefinitionMap;
195 private class InterfaceOperationValidationUtilTest extends InterfaceOperationValidation {
197 protected ResponseFormatManager getResponseFormatManager() {