Initial OpenECOMP SDC commit
[sdc.git] / catalog-model / src / test / java / org / openecomp / sdc / be / model / operations / impl / HeatParametersOperationTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.openecomp.sdc.be.model.operations.impl;
22
23 import static org.junit.Assert.*;
24 import static org.mockito.Matchers.anyMap;
25 import static org.mockito.Matchers.anyObject;
26 import static org.mockito.Matchers.eq;
27 import static org.mockito.Mockito.when;
28
29 import java.util.ArrayList;
30 import java.util.List;
31
32 import org.junit.Before;
33 import org.junit.Test;
34 import org.mockito.Mockito;
35 import org.openecomp.sdc.be.dao.graph.datatype.GraphNode;
36 import org.openecomp.sdc.be.dao.graph.datatype.GraphRelation;
37 import org.openecomp.sdc.be.dao.neo4j.GraphEdgeLabels;
38 import org.openecomp.sdc.be.dao.titan.TitanGenericDao;
39 import org.openecomp.sdc.be.dao.titan.TitanOperationStatus;
40 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
41 import org.openecomp.sdc.be.model.HeatParameterDefinition;
42 import org.openecomp.sdc.be.model.ModelTestBase;
43 import org.openecomp.sdc.be.model.heat.HeatParameterType;
44 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
45 import org.openecomp.sdc.be.model.operations.impl.HeatParametersOperation;
46 import org.openecomp.sdc.be.resources.data.HeatParameterData;
47 import org.openecomp.sdc.be.resources.data.HeatParameterValueData;
48
49 import fj.data.Either;
50
51 public class HeatParametersOperationTest extends ModelTestBase {
52
53         HeatParametersOperation heatParametersOperation = new HeatParametersOperation();
54
55         TitanGenericDao titanGenericDao = Mockito.mock(TitanGenericDao.class);
56
57         @Before
58         public void setup() {
59                 heatParametersOperation.setTitanGenericDao(titanGenericDao);
60
61         }
62
63         @Test
64         public void addPropertyToResourceTest() {
65
66                 String propName = "myProp";
67                 HeatParameterDefinition property = buildHeatPropertyDefinition();
68
69                 HeatParameterData propertyData = new HeatParameterData(property);
70
71                 Either<HeatParameterData, TitanOperationStatus> either = Either.left(propertyData);
72
73                 GraphRelation graphRelation = new GraphRelation();
74                 Either<GraphRelation, TitanOperationStatus> relationResult = Either.left(graphRelation);
75
76                 when(titanGenericDao.createNode((HeatParameterData) anyObject(), eq(HeatParameterData.class)))
77                                 .thenReturn(either);
78                 when(titanGenericDao.createRelation((GraphNode) anyObject(), (GraphNode) anyObject(),
79                                 eq(GraphEdgeLabels.HEAT_PARAMETER), anyMap())).thenReturn(relationResult);
80
81                 Either<HeatParameterData, TitanOperationStatus> result = heatParametersOperation.addPropertyToGraph(propName,
82                                 property, "resourceId.artifactId", NodeTypeEnum.ArtifactRef);
83
84                 assertTrue(result.isLeft());
85
86         }
87
88         @Test
89         public void addPropertyListToResourceTest() {
90
91                 HeatParameterDefinition property = buildHeatPropertyDefinition();
92                 HeatParameterDefinition property2 = buildHeatPropertyDefinition();
93                 property2.setName("p2");
94
95                 List<HeatParameterDefinition> parameters = new ArrayList<HeatParameterDefinition>();
96                 parameters.add(property);
97                 parameters.add(property2);
98
99                 HeatParameterData propertyData = new HeatParameterData(property);
100
101                 Either<HeatParameterData, TitanOperationStatus> either = Either.left(propertyData);
102
103                 GraphRelation graphRelation = new GraphRelation();
104                 Either<GraphRelation, TitanOperationStatus> relationResult = Either.left(graphRelation);
105
106                 when(titanGenericDao.createNode((HeatParameterData) anyObject(), eq(HeatParameterData.class)))
107                                 .thenReturn(either);
108                 when(titanGenericDao.createRelation((GraphNode) anyObject(), (GraphNode) anyObject(),
109                                 eq(GraphEdgeLabels.HEAT_PARAMETER), anyMap())).thenReturn(relationResult);
110
111                 StorageOperationStatus result = heatParametersOperation.addPropertiesToGraph(parameters,
112                                 "resourceId.artifactId", NodeTypeEnum.ArtifactRef);
113
114                 assertEquals(StorageOperationStatus.OK, result);
115
116         }
117
118         @Test
119         public void testStringValues() {
120                 assertTrue(heatParametersOperation.isValidValue(HeatParameterType.STRING, "50aaa"));
121         }
122
123         @Test
124         public void testNumberValues() {
125                 assertTrue(heatParametersOperation.isValidValue(HeatParameterType.NUMBER, "50"));
126                 assertTrue(heatParametersOperation.isValidValue(HeatParameterType.NUMBER, "50.5"));
127                 assertTrue(heatParametersOperation.isValidValue(HeatParameterType.NUMBER, "0x11"));
128
129                 assertFalse(heatParametersOperation.isValidValue(HeatParameterType.NUMBER, "aaa"));
130                 assertFalse(heatParametersOperation.isValidValue(HeatParameterType.NUMBER, "?>!"));
131         }
132
133         @Test
134         public void testJsonValues() {
135                 assertTrue(heatParametersOperation.isValidValue(HeatParameterType.JSON, "{ \"member\" : \"50\"}"));
136                 HeatParameterDefinition propertyDefinition = buildHeatBooleanPropertyDefinition(
137                                 HeatParameterType.JSON.getType(), "{ \"member\" : \"50\"}");
138                 StorageOperationStatus operationStatus = heatParametersOperation.validateAndUpdateProperty(propertyDefinition);
139                 assertEquals(StorageOperationStatus.OK, operationStatus);
140                 assertEquals(HeatParameterType.JSON.getType(), propertyDefinition.getType());
141
142         }
143
144         @Test
145         public void testListValues() {
146                 assertTrue(heatParametersOperation.isValidValue(HeatParameterType.COMMA_DELIMITED_LIST, "one, two"));
147                 HeatParameterDefinition propertyDefinition = buildHeatBooleanPropertyDefinition(
148                                 HeatParameterType.COMMA_DELIMITED_LIST.getType(), "one, two");
149                 StorageOperationStatus operationStatus = heatParametersOperation.validateAndUpdateProperty(propertyDefinition);
150                 assertEquals(StorageOperationStatus.OK, operationStatus);
151                 assertEquals(HeatParameterType.COMMA_DELIMITED_LIST.getType(), propertyDefinition.getType());
152                 assertEquals("one, two", propertyDefinition.getDefaultValue());
153         }
154
155         @Test
156         public void testBooleanValues() {
157
158                 String[] trueArray = { "true", "t", "1", "on", "y", "yes" };
159                 String[] falseArray = { "false", "f", "0", "off", "n", "no" };
160
161                 for (int i = 0; i < trueArray.length; i++) {
162                         assertTrue(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN, trueArray[i]));
163                         HeatParameterDefinition propertyDefinition = buildHeatBooleanPropertyDefinition(
164                                         HeatParameterType.BOOLEAN.getType(), trueArray[i]);
165                         StorageOperationStatus operationStatus = heatParametersOperation
166                                         .validateAndUpdateProperty(propertyDefinition);
167                         assertEquals(StorageOperationStatus.OK, operationStatus);
168                         assertEquals("true", propertyDefinition.getDefaultValue());
169
170                         assertTrue(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN, trueArray[i]));
171                         propertyDefinition = buildHeatBooleanPropertyDefinition(HeatParameterType.BOOLEAN.getType(),
172                                         trueArray[i].toUpperCase());
173                         operationStatus = heatParametersOperation.validateAndUpdateProperty(propertyDefinition);
174                         assertEquals(StorageOperationStatus.OK, operationStatus);
175                         assertEquals("true", propertyDefinition.getDefaultValue());
176
177                         assertTrue(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN, trueArray[i]));
178                         propertyDefinition = buildHeatBooleanPropertyDefinition(HeatParameterType.BOOLEAN.getType(),
179                                         trueArray[i].toLowerCase());
180                         operationStatus = heatParametersOperation.validateAndUpdateProperty(propertyDefinition);
181                         assertEquals(StorageOperationStatus.OK, operationStatus);
182                         assertEquals("true", propertyDefinition.getDefaultValue());
183                 }
184
185                 for (int i = 0; i < falseArray.length; i++) {
186                         assertTrue(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN, falseArray[i]));
187                         HeatParameterDefinition propertyDefinition = buildHeatBooleanPropertyDefinition(
188                                         HeatParameterType.BOOLEAN.getType(), falseArray[i]);
189                         StorageOperationStatus operationStatus = heatParametersOperation
190                                         .validateAndUpdateProperty(propertyDefinition);
191                         assertEquals(StorageOperationStatus.OK, operationStatus);
192                         assertEquals("false", propertyDefinition.getDefaultValue());
193
194                         assertTrue(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN, falseArray[i]));
195                         propertyDefinition = buildHeatBooleanPropertyDefinition(HeatParameterType.BOOLEAN.getType(),
196                                         falseArray[i].toUpperCase());
197                         operationStatus = heatParametersOperation.validateAndUpdateProperty(propertyDefinition);
198                         assertEquals(StorageOperationStatus.OK, operationStatus);
199                         assertEquals("false", propertyDefinition.getDefaultValue());
200
201                         assertTrue(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN, falseArray[i]));
202                         propertyDefinition = buildHeatBooleanPropertyDefinition(HeatParameterType.BOOLEAN.getType(),
203                                         falseArray[i].toLowerCase());
204                         operationStatus = heatParametersOperation.validateAndUpdateProperty(propertyDefinition);
205                         assertEquals(StorageOperationStatus.OK, operationStatus);
206                         assertEquals("false", propertyDefinition.getDefaultValue());
207                 }
208
209                 // assertTrue(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN,
210                 // "true"));
211                 // assertTrue(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN,
212                 // "t"));
213                 // assertTrue(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN,
214                 // "1"));
215                 // assertTrue(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN,
216                 // "on"));
217                 // assertTrue(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN,
218                 // "y"));
219                 // assertTrue(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN,
220                 // "yes"));
221                 // assertTrue(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN,
222                 // "false"));
223                 // assertTrue(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN,
224                 // "f"));
225                 // assertTrue(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN,
226                 // "0"));
227                 // assertTrue(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN,
228                 // "off"));
229                 // assertTrue(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN,
230                 // "n"));
231                 // assertTrue(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN,
232                 // "no"));
233
234                 assertFalse(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN, "blabla"));
235                 assertFalse(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN, "2"));
236         }
237
238         private HeatParameterDefinition buildHeatPropertyDefinition() {
239                 HeatParameterDefinition parameter = new HeatParameterDefinition();
240
241                 parameter.setName("p1");
242                 parameter.setType("string");
243                 parameter.setDefaultValue("def");
244                 parameter.setCurrentValue("current");
245                 parameter.setDescription("description");
246
247                 return parameter;
248         }
249
250         private HeatParameterDefinition buildHeatBooleanPropertyDefinition(String type, String boolValue) {
251                 HeatParameterDefinition parameter = new HeatParameterDefinition();
252
253                 parameter.setName("parameter1");
254                 parameter.setType(type);
255                 parameter.setDefaultValue(boolValue);
256                 parameter.setDescription("description");
257
258                 return parameter;
259         }
260
261         @Test
262         public void addPropertyToResourceInstanceTest() {
263
264                 HeatParameterDefinition property = buildHeatPropertyDefinition();
265
266                 HeatParameterValueData propertyData = new HeatParameterValueData();
267                 propertyData.setUniqueId("bla");
268                 propertyData.setValue("value1");
269
270                 Either<HeatParameterValueData, TitanOperationStatus> either = Either.left(propertyData);
271
272                 GraphRelation graphRelation = new GraphRelation();
273                 Either<GraphRelation, TitanOperationStatus> relationResult = Either.left(graphRelation);
274
275                 when(titanGenericDao.createNode((HeatParameterValueData) anyObject(), eq(HeatParameterValueData.class)))
276                                 .thenReturn(either);
277                 when(titanGenericDao.createRelation((GraphNode) anyObject(), (GraphNode) anyObject(),
278                                 eq(GraphEdgeLabels.PARAMETER_VALUE), anyMap())).thenReturn(relationResult);
279                 when(titanGenericDao.createRelation((GraphNode) anyObject(), (GraphNode) anyObject(),
280                                 eq(GraphEdgeLabels.PARAMETER_IMPL), anyMap())).thenReturn(relationResult);
281
282                 Either<HeatParameterValueData, TitanOperationStatus> result = heatParametersOperation
283                                 .addHeatValueToGraph(property, "artifactLabel", "resourceInstanceId.artifactId", "resourceInstanceId");
284
285                 assertTrue(result.isLeft());
286
287         }
288
289 }