Sync Integ to Master
[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.ArgumentMatchers.any;
25 import static org.mockito.ArgumentMatchers.isNull;
26 import static org.mockito.Matchers.anyMap;
27 import static org.mockito.Matchers.anyObject;
28 import static org.mockito.Matchers.eq;
29 import static org.mockito.Mockito.when;
30
31 import java.util.ArrayList;
32 import java.util.List;
33
34 import org.junit.Before;
35 import org.junit.Test;
36 import org.mockito.Mockito;
37 import org.openecomp.sdc.be.dao.graph.datatype.GraphNode;
38 import org.openecomp.sdc.be.dao.graph.datatype.GraphRelation;
39 import org.openecomp.sdc.be.dao.neo4j.GraphEdgeLabels;
40 import org.openecomp.sdc.be.dao.titan.TitanGenericDao;
41 import org.openecomp.sdc.be.dao.titan.TitanOperationStatus;
42 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
43 import org.openecomp.sdc.be.model.HeatParameterDefinition;
44 import org.openecomp.sdc.be.model.ModelTestBase;
45 import org.openecomp.sdc.be.model.heat.HeatParameterType;
46 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
47 import org.openecomp.sdc.be.model.operations.impl.HeatParametersOperation;
48 import org.openecomp.sdc.be.resources.data.HeatParameterData;
49 import org.openecomp.sdc.be.resources.data.HeatParameterValueData;
50
51 import fj.data.Either;
52
53 public class HeatParametersOperationTest extends ModelTestBase {
54
55         HeatParametersOperation heatParametersOperation = new HeatParametersOperation();
56
57         TitanGenericDao titanGenericDao = Mockito.mock(TitanGenericDao.class);
58
59         @Before
60         public void setup() {
61                 heatParametersOperation.setTitanGenericDao(titanGenericDao);
62
63         }
64
65         @Test
66         public void addPropertyToResourceTest() {
67
68                 String propName = "myProp";
69                 HeatParameterDefinition property = buildHeatPropertyDefinition();
70
71                 HeatParameterData propertyData = new HeatParameterData(property);
72
73                 Either<HeatParameterData, TitanOperationStatus> either = Either.left(propertyData);
74
75                 GraphRelation graphRelation = new GraphRelation();
76                 Either<GraphRelation, TitanOperationStatus> relationResult = Either.left(graphRelation);
77
78                 when(titanGenericDao.createNode(any(HeatParameterData.class), eq(HeatParameterData.class))).thenReturn(either);
79                 when(titanGenericDao.createRelation(any(GraphNode.class), (GraphNode) any(GraphNode.class), eq(GraphEdgeLabels.HEAT_PARAMETER), anyMap())).thenReturn(relationResult);
80
81                 Either<HeatParameterData, TitanOperationStatus> result = heatParametersOperation.addPropertyToGraph(propName, property, "resourceId.artifactId", NodeTypeEnum.ArtifactRef);
82
83                 assertTrue(result.isLeft());
84
85         }
86
87         @Test
88         public void addPropertyListToResourceTest() {
89
90                 HeatParameterDefinition property = buildHeatPropertyDefinition();
91                 HeatParameterDefinition property2 = buildHeatPropertyDefinition();
92                 property2.setName("p2");
93
94                 List<HeatParameterDefinition> parameters = new ArrayList<HeatParameterDefinition>();
95                 parameters.add(property);
96                 parameters.add(property2);
97
98                 HeatParameterData propertyData = new HeatParameterData(property);
99
100                 Either<HeatParameterData, TitanOperationStatus> either = Either.left(propertyData);
101
102                 GraphRelation graphRelation = new GraphRelation();
103                 Either<GraphRelation, TitanOperationStatus> relationResult = Either.left(graphRelation);
104
105                 when(titanGenericDao.createNode(any(HeatParameterData.class), eq(HeatParameterData.class))).thenReturn(either);
106                 when(titanGenericDao.createRelation(any(GraphNode.class), (GraphNode) any(GraphNode.class), eq(GraphEdgeLabels.HEAT_PARAMETER), anyMap())).thenReturn(relationResult);
107
108                 StorageOperationStatus result = heatParametersOperation.addPropertiesToGraph(parameters, "resourceId.artifactId", NodeTypeEnum.ArtifactRef);
109
110                 assertEquals(StorageOperationStatus.OK, result);
111
112         }
113
114         @Test
115         public void testStringValues() {
116                 assertTrue(heatParametersOperation.isValidValue(HeatParameterType.STRING, "50aaa"));
117         }
118
119         @Test
120         public void testNumberValues() {
121                 assertTrue(heatParametersOperation.isValidValue(HeatParameterType.NUMBER, "50"));
122                 assertTrue(heatParametersOperation.isValidValue(HeatParameterType.NUMBER, "50.5"));
123                 assertTrue(heatParametersOperation.isValidValue(HeatParameterType.NUMBER, "0x11"));
124
125                 assertFalse(heatParametersOperation.isValidValue(HeatParameterType.NUMBER, "aaa"));
126                 assertFalse(heatParametersOperation.isValidValue(HeatParameterType.NUMBER, "?>!"));
127         }
128
129         @Test
130         public void testJsonValues() {
131                 assertTrue(heatParametersOperation.isValidValue(HeatParameterType.JSON, "{ \"member\" : \"50\"}"));
132                 HeatParameterDefinition propertyDefinition = buildHeatBooleanPropertyDefinition(HeatParameterType.JSON.getType(), "{ \"member\" : \"50\"}");
133                 StorageOperationStatus operationStatus = heatParametersOperation.validateAndUpdateProperty(propertyDefinition);
134                 assertEquals(StorageOperationStatus.OK, operationStatus);
135                 assertEquals(HeatParameterType.JSON.getType(), propertyDefinition.getType());
136
137         }
138
139         @Test
140         public void testListValues() {
141                 assertTrue(heatParametersOperation.isValidValue(HeatParameterType.COMMA_DELIMITED_LIST, "one, two"));
142                 HeatParameterDefinition propertyDefinition = buildHeatBooleanPropertyDefinition(HeatParameterType.COMMA_DELIMITED_LIST.getType(), "one, two");
143                 StorageOperationStatus operationStatus = heatParametersOperation.validateAndUpdateProperty(propertyDefinition);
144                 assertEquals(StorageOperationStatus.OK, operationStatus);
145                 assertEquals(HeatParameterType.COMMA_DELIMITED_LIST.getType(), propertyDefinition.getType());
146                 assertEquals("one, two", propertyDefinition.getDefaultValue());
147         }
148
149         @Test
150         public void testBooleanValues() {
151
152                 String[] trueArray = { "true", "t", "1", "on", "y", "yes" };
153                 String[] falseArray = { "false", "f", "0", "off", "n", "no" };
154
155                 for (int i = 0; i < trueArray.length; i++) {
156                         assertTrue(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN, trueArray[i]));
157                         HeatParameterDefinition propertyDefinition = buildHeatBooleanPropertyDefinition(HeatParameterType.BOOLEAN.getType(), trueArray[i]);
158                         StorageOperationStatus operationStatus = heatParametersOperation.validateAndUpdateProperty(propertyDefinition);
159                         assertEquals(StorageOperationStatus.OK, operationStatus);
160                         assertEquals("true", propertyDefinition.getDefaultValue());
161
162                         assertTrue(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN, trueArray[i]));
163                         propertyDefinition = buildHeatBooleanPropertyDefinition(HeatParameterType.BOOLEAN.getType(), trueArray[i].toUpperCase());
164                         operationStatus = heatParametersOperation.validateAndUpdateProperty(propertyDefinition);
165                         assertEquals(StorageOperationStatus.OK, operationStatus);
166                         assertEquals("true", propertyDefinition.getDefaultValue());
167
168                         assertTrue(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN, trueArray[i]));
169                         propertyDefinition = buildHeatBooleanPropertyDefinition(HeatParameterType.BOOLEAN.getType(), trueArray[i].toLowerCase());
170                         operationStatus = heatParametersOperation.validateAndUpdateProperty(propertyDefinition);
171                         assertEquals(StorageOperationStatus.OK, operationStatus);
172                         assertEquals("true", propertyDefinition.getDefaultValue());
173                 }
174
175                 for (int i = 0; i < falseArray.length; i++) {
176                         assertTrue(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN, falseArray[i]));
177                         HeatParameterDefinition propertyDefinition = buildHeatBooleanPropertyDefinition(HeatParameterType.BOOLEAN.getType(), falseArray[i]);
178                         StorageOperationStatus operationStatus = heatParametersOperation.validateAndUpdateProperty(propertyDefinition);
179                         assertEquals(StorageOperationStatus.OK, operationStatus);
180                         assertEquals("false", propertyDefinition.getDefaultValue());
181
182                         assertTrue(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN, falseArray[i]));
183                         propertyDefinition = buildHeatBooleanPropertyDefinition(HeatParameterType.BOOLEAN.getType(), falseArray[i].toUpperCase());
184                         operationStatus = heatParametersOperation.validateAndUpdateProperty(propertyDefinition);
185                         assertEquals(StorageOperationStatus.OK, operationStatus);
186                         assertEquals("false", propertyDefinition.getDefaultValue());
187
188                         assertTrue(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN, falseArray[i]));
189                         propertyDefinition = buildHeatBooleanPropertyDefinition(HeatParameterType.BOOLEAN.getType(), falseArray[i].toLowerCase());
190                         operationStatus = heatParametersOperation.validateAndUpdateProperty(propertyDefinition);
191                         assertEquals(StorageOperationStatus.OK, operationStatus);
192                         assertEquals("false", propertyDefinition.getDefaultValue());
193                 }
194
195                 assertFalse(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN, "blabla"));
196                 assertFalse(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN, "2"));
197         }
198
199         private HeatParameterDefinition buildHeatPropertyDefinition() {
200                 HeatParameterDefinition parameter = new HeatParameterDefinition();
201
202                 parameter.setName("p1");
203                 parameter.setType("string");
204                 parameter.setDefaultValue("def");
205                 parameter.setCurrentValue("current");
206                 parameter.setDescription("description");
207
208                 return parameter;
209         }
210
211         private HeatParameterDefinition buildHeatBooleanPropertyDefinition(String type, String boolValue) {
212                 HeatParameterDefinition parameter = new HeatParameterDefinition();
213
214                 parameter.setName("parameter1");
215                 parameter.setType(type);
216                 parameter.setDefaultValue(boolValue);
217                 parameter.setDescription("description");
218
219                 return parameter;
220         }
221
222         @Test
223         public void addPropertyToResourceInstanceTest() {
224
225                 HeatParameterDefinition property = buildHeatPropertyDefinition();
226
227                 HeatParameterValueData propertyData = new HeatParameterValueData();
228                 propertyData.setUniqueId("bla");
229                 propertyData.setValue("value1");
230
231                 Either<HeatParameterValueData, TitanOperationStatus> either = Either.left(propertyData);
232
233                 GraphRelation graphRelation = new GraphRelation();
234                 Either<GraphRelation, TitanOperationStatus> relationResult = Either.left(graphRelation);
235
236                 when(titanGenericDao.createNode(any(HeatParameterValueData.class), eq(HeatParameterValueData.class))).thenReturn(either);
237                 when(titanGenericDao.createRelation(any(GraphNode.class), any(GraphNode.class), eq(GraphEdgeLabels.PARAMETER_VALUE), anyMap())).thenReturn(relationResult);
238                 when(titanGenericDao.createRelation(any(GraphNode.class), any(GraphNode.class), eq(GraphEdgeLabels.PARAMETER_IMPL), isNull())).thenReturn(relationResult);
239
240                 Either<HeatParameterValueData, TitanOperationStatus> result = heatParametersOperation.addHeatValueToGraph(property, "artifactLabel", "resourceInstanceId.artifactId", "resourceInstanceId");
241
242                 assertTrue(result.isLeft());
243
244         }
245
246 }