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