re base code
[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 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.datatypes.elements.OperationOutputDefinition;
33 import org.openecomp.sdc.be.model.*;
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 java.util.Collection;
39 import java.util.HashMap;
40 import java.util.Map;
41 import java.util.Set;
42
43 import static org.mockito.ArgumentMatchers.any;
44 import static org.mockito.Mockito.when;
45
46 public class InterfaceOperationValidationTest implements InterfaceOperationTestUtils {
47
48     private Resource  resource = (Resource) getToscaFullElement().left().value();
49
50     ResponseFormatManager mock;
51     @Mock
52     ToscaOperationFacade toscaOperationFacade;
53
54     @InjectMocks
55     InterfaceOperationValidationUtilTest interfaceOperationValidationUtilTest = new InterfaceOperationValidationUtilTest();
56     private static final String RESOURCE_ID = "resource1";
57     ListDataDefinition<OperationInputDefinition> operationInputDefinitionList = new ListDataDefinition<>();
58     ListDataDefinition<OperationOutputDefinition> operationOutputDefinitionList = new ListDataDefinition<>();
59     @Before
60     public void init() {
61         MockitoAnnotations.initMocks(this);
62         mock = Mockito.mock(ResponseFormatManager.class);
63         when(toscaOperationFacade.getToscaElement(any(), any(ComponentParametersView.class))).thenReturn(Either.left(resource));
64         when(mock.getResponseFormat(any())).thenReturn(new ResponseFormat());
65         when(mock.getResponseFormat(any(), any())).thenReturn(new ResponseFormat());
66         when(mock.getResponseFormat(any(), any(), any())).thenReturn(new ResponseFormat());
67     }
68
69
70     @Test
71     public void testValidInterfaceOperation() {
72         operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
73         operationOutputDefinitionList.add(createMockOperationOutputDefinition("label1"));
74         Collection<Operation> operations = createInterfaceOperationData("op2",
75                 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
76                         operationOutputDefinitionList,"upgrade");
77         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
78                 .validateInterfaceOperations(operations, RESOURCE_ID, false);
79         Assert.assertTrue(booleanResponseFormatEither.isLeft());
80     }
81
82     @Test
83     public void testInterfaceOperationDescriptionLength() {
84         operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
85         operationOutputDefinitionList.add(createMockOperationOutputDefinition("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, operationOutputDefinitionList,"update");
91         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
92                 .validateInterfaceOperations(operations, RESOURCE_ID, false);
93         Assert.assertTrue(booleanResponseFormatEither.isRight());
94     }
95
96
97
98     @Test
99     public void testInterfaceOperationForEmptyType() {
100         operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
101         operationOutputDefinitionList.add(createMockOperationOutputDefinition("label1"));
102         Collection<Operation> operations = createInterfaceOperationData("op2",
103                 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
104                 operationOutputDefinitionList, "");
105         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
106                 .validateInterfaceOperations(operations, RESOURCE_ID, false);
107         Assert.assertTrue(booleanResponseFormatEither.isRight());
108     }
109
110     @Test
111     public void testInterfaceOperationForEmptyInputParam() {
112         operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
113         operationOutputDefinitionList.add(createMockOperationOutputDefinition("label1"));
114         Collection<Operation> operations = createInterfaceOperationData("op2",
115                 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
116                 operationOutputDefinitionList,"input2");
117         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
118                 .validateInterfaceOperations(operations, RESOURCE_ID, false);
119         Assert.assertTrue(booleanResponseFormatEither.isRight());
120     }
121
122     @Test
123     public void testInterfaceOperationForNonUniqueType() {
124         operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
125         operationOutputDefinitionList.add(createMockOperationOutputDefinition("label1"));
126         Collection<Operation> operations = createInterfaceOperationData("op2",
127                 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
128                 operationOutputDefinitionList,"CREATE");
129         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
130                 .validateInterfaceOperations(operations, RESOURCE_ID, false);
131         Assert.assertTrue(booleanResponseFormatEither.isRight());
132     }
133
134     @Test
135     public void testInterfaceOperationTypeLength() {
136         operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
137         operationOutputDefinitionList.add(createMockOperationOutputDefinition("label1"));
138         Collection<Operation> operations = createInterfaceOperationData("op2",
139                 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
140                 operationOutputDefinitionList,
141                 "interface operation2 -  The Spring Initializer provides a project generator to make you " +
142                         "productive with the certain technology stack from the beginning. You can create a skeleton project" +
143                         "with web, data access (relational and NoSQL datastores), cloud, or messaging support");
144         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
145                 .validateInterfaceOperations(operations, RESOURCE_ID, false);
146         Assert.assertTrue(booleanResponseFormatEither.isRight());
147     }
148
149
150     @Test
151     public void testInterfaceOperationUniqueInputParamNameInvalid() {
152         operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
153         operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
154         operationInputDefinitionList.add(createMockOperationInputDefinition("label2"));
155         operationInputDefinitionList.add(createMockOperationInputDefinition("label2"));
156         operationOutputDefinitionList.add(createMockOperationOutputDefinition("label1"));
157         Collection<Operation> operations = createInterfaceOperationData("op2",
158                 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
159                 operationOutputDefinitionList,"create");
160
161         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
162                 .validateInterfaceOperations(operations, RESOURCE_ID, false);
163         Assert.assertTrue(booleanResponseFormatEither.isRight());
164     }
165
166     @Test
167     public void testInterfaceOperationUniqueInputParamNameValid() {
168         operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
169         operationInputDefinitionList.add(createMockOperationInputDefinition("label2"));
170         operationOutputDefinitionList.add(createMockOperationOutputDefinition("label1"));
171         Collection<Operation> operations = createInterfaceOperationData("op2",
172                 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
173                 operationOutputDefinitionList,"update");
174
175
176         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
177                 .validateInterfaceOperations(operations, RESOURCE_ID, false);
178         Assert.assertTrue(booleanResponseFormatEither.isLeft());
179     }
180
181     @Test
182     public void testInterfaceOperationeInputParamNameEmpty() {
183         operationInputDefinitionList.add(createMockOperationInputDefinition("  "));
184         operationInputDefinitionList.add(createMockOperationInputDefinition("label1"));
185         operationOutputDefinitionList.add(createMockOperationOutputDefinition("label1"));
186         Collection<Operation> operations = createInterfaceOperationData("op2",
187                 "interface operation2",new ArtifactDefinition(), operationInputDefinitionList,
188                 operationOutputDefinitionList,"update");
189
190
191         Either<Boolean, ResponseFormat> booleanResponseFormatEither = interfaceOperationValidationUtilTest
192                 .validateInterfaceOperations(operations, RESOURCE_ID, false);
193         Assert.assertTrue(booleanResponseFormatEither.isRight());
194     }
195
196     private Set<Operation> createInterfaceOperationData( String uniqueID, String description, ArtifactDefinition artifactDefinition,
197                                                          ListDataDefinition<OperationInputDefinition> inputs,
198                                                          ListDataDefinition<OperationOutputDefinition> outputs, String name) {
199         return Sets.newHashSet(createInterfaceOperation(uniqueID, description, artifactDefinition, inputs, outputs, name));
200     }
201
202     private  <T extends Component> Either<T, StorageOperationStatus> getToscaFullElement() {
203
204         return Either.left((T) setUpResourceMock());
205     }
206
207     private Resource setUpResourceMock(){
208         Resource resource = new Resource();
209         resource.setInterfaces(createMockInterfaceDefinition());
210
211         return  resource;
212     }
213
214     private  Map<String, InterfaceDefinition> createMockInterfaceDefinition() {
215         Map<String, Operation> operationMap = createMockOperationMap();
216         Map<String, InterfaceDefinition> interfaceDefinitionMap = new HashMap<>();
217         interfaceDefinitionMap.put("int1", createInterface("int1", "Interface 1",
218                 "lifecycle", "tosca", operationMap));
219
220         return interfaceDefinitionMap;
221     }
222
223     private class InterfaceOperationValidationUtilTest extends InterfaceOperationValidation {
224
225         protected ResponseFormatManager getResponseFormatManager() {
226             return mock;
227         }
228     }
229 }