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