2 * ============LICENSE_START=======================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.openecomp.sdc.be.model.operations.impl;
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.eq;
28 import static org.mockito.Mockito.when;
30 import java.util.ArrayList;
31 import java.util.List;
33 import org.junit.Before;
34 import org.junit.Test;
35 import org.mockito.Mockito;
36 import org.openecomp.sdc.be.dao.graph.datatype.GraphNode;
37 import org.openecomp.sdc.be.dao.graph.datatype.GraphRelation;
38 import org.openecomp.sdc.be.dao.neo4j.GraphEdgeLabels;
39 import org.openecomp.sdc.be.dao.titan.TitanGenericDao;
40 import org.openecomp.sdc.be.dao.titan.TitanOperationStatus;
41 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
42 import org.openecomp.sdc.be.model.HeatParameterDefinition;
43 import org.openecomp.sdc.be.model.ModelTestBase;
44 import org.openecomp.sdc.be.model.heat.HeatParameterType;
45 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
46 import org.openecomp.sdc.be.model.operations.impl.HeatParametersOperation;
47 import org.openecomp.sdc.be.resources.data.HeatParameterData;
48 import org.openecomp.sdc.be.resources.data.HeatParameterValueData;
50 import fj.data.Either;
52 public class HeatParametersOperationTest extends ModelTestBase {
54 HeatParametersOperation heatParametersOperation = new HeatParametersOperation();
56 TitanGenericDao titanGenericDao = Mockito.mock(TitanGenericDao.class);
60 heatParametersOperation.setTitanGenericDao(titanGenericDao);
65 public void addPropertyToResourceTest() {
67 String propName = "myProp";
68 HeatParameterDefinition property = buildHeatPropertyDefinition();
70 HeatParameterData propertyData = new HeatParameterData(property);
72 Either<HeatParameterData, TitanOperationStatus> either = Either.left(propertyData);
74 GraphRelation graphRelation = new GraphRelation();
75 Either<GraphRelation, TitanOperationStatus> relationResult = Either.left(graphRelation);
77 when(titanGenericDao.createNode(any(HeatParameterData.class), eq(HeatParameterData.class))).thenReturn(either);
78 when(titanGenericDao.createRelation(any(GraphNode.class), (GraphNode) any(GraphNode.class), eq(GraphEdgeLabels.HEAT_PARAMETER), anyMap())).thenReturn(relationResult);
80 Either<HeatParameterData, TitanOperationStatus> result = heatParametersOperation.addPropertyToGraph(propName, property, "resourceId.artifactId", NodeTypeEnum.ArtifactRef);
82 assertTrue(result.isLeft());
87 public void addPropertyListToResourceTest() {
89 HeatParameterDefinition property = buildHeatPropertyDefinition();
90 HeatParameterDefinition property2 = buildHeatPropertyDefinition();
91 property2.setName("p2");
93 List<HeatParameterDefinition> parameters = new ArrayList<HeatParameterDefinition>();
94 parameters.add(property);
95 parameters.add(property2);
97 HeatParameterData propertyData = new HeatParameterData(property);
99 Either<HeatParameterData, TitanOperationStatus> either = Either.left(propertyData);
101 GraphRelation graphRelation = new GraphRelation();
102 Either<GraphRelation, TitanOperationStatus> relationResult = Either.left(graphRelation);
104 when(titanGenericDao.createNode(any(HeatParameterData.class), eq(HeatParameterData.class))).thenReturn(either);
105 when(titanGenericDao.createRelation(any(GraphNode.class), (GraphNode) any(GraphNode.class), eq(GraphEdgeLabels.HEAT_PARAMETER), anyMap())).thenReturn(relationResult);
107 StorageOperationStatus result = heatParametersOperation.addPropertiesToGraph(parameters, "resourceId.artifactId", NodeTypeEnum.ArtifactRef);
109 assertEquals(StorageOperationStatus.OK, result);
114 public void testStringValues() {
115 assertTrue(heatParametersOperation.isValidValue(HeatParameterType.STRING, "50aaa"));
119 public void testNumberValues() {
120 assertTrue(heatParametersOperation.isValidValue(HeatParameterType.NUMBER, "50"));
121 assertTrue(heatParametersOperation.isValidValue(HeatParameterType.NUMBER, "50.5"));
122 assertTrue(heatParametersOperation.isValidValue(HeatParameterType.NUMBER, "0x11"));
124 assertFalse(heatParametersOperation.isValidValue(HeatParameterType.NUMBER, "aaa"));
125 assertFalse(heatParametersOperation.isValidValue(HeatParameterType.NUMBER, "?>!"));
129 public void testJsonValues() {
130 assertTrue(heatParametersOperation.isValidValue(HeatParameterType.JSON, "{ \"member\" : \"50\"}"));
131 HeatParameterDefinition propertyDefinition = buildHeatBooleanPropertyDefinition(HeatParameterType.JSON.getType(), "{ \"member\" : \"50\"}");
132 StorageOperationStatus operationStatus = heatParametersOperation.validateAndUpdateProperty(propertyDefinition);
133 assertEquals(StorageOperationStatus.OK, operationStatus);
134 assertEquals(HeatParameterType.JSON.getType(), propertyDefinition.getType());
139 public void testListValues() {
140 assertTrue(heatParametersOperation.isValidValue(HeatParameterType.COMMA_DELIMITED_LIST, "one, two"));
141 HeatParameterDefinition propertyDefinition = buildHeatBooleanPropertyDefinition(HeatParameterType.COMMA_DELIMITED_LIST.getType(), "one, two");
142 StorageOperationStatus operationStatus = heatParametersOperation.validateAndUpdateProperty(propertyDefinition);
143 assertEquals(StorageOperationStatus.OK, operationStatus);
144 assertEquals(HeatParameterType.COMMA_DELIMITED_LIST.getType(), propertyDefinition.getType());
145 assertEquals("one, two", propertyDefinition.getDefaultValue());
149 public void testBooleanValues() {
151 String[] trueArray = { "true", "t", "1", "on", "y", "yes" };
152 String[] falseArray = { "false", "f", "0", "off", "n", "no" };
154 for (int i = 0; i < trueArray.length; i++) {
155 assertTrue(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN, trueArray[i]));
156 HeatParameterDefinition propertyDefinition = buildHeatBooleanPropertyDefinition(HeatParameterType.BOOLEAN.getType(), trueArray[i]);
157 StorageOperationStatus operationStatus = heatParametersOperation.validateAndUpdateProperty(propertyDefinition);
158 assertEquals(StorageOperationStatus.OK, operationStatus);
159 assertEquals("true", propertyDefinition.getDefaultValue());
161 assertTrue(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN, trueArray[i]));
162 propertyDefinition = buildHeatBooleanPropertyDefinition(HeatParameterType.BOOLEAN.getType(), trueArray[i].toUpperCase());
163 operationStatus = heatParametersOperation.validateAndUpdateProperty(propertyDefinition);
164 assertEquals(StorageOperationStatus.OK, operationStatus);
165 assertEquals("true", propertyDefinition.getDefaultValue());
167 assertTrue(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN, trueArray[i]));
168 propertyDefinition = buildHeatBooleanPropertyDefinition(HeatParameterType.BOOLEAN.getType(), trueArray[i].toLowerCase());
169 operationStatus = heatParametersOperation.validateAndUpdateProperty(propertyDefinition);
170 assertEquals(StorageOperationStatus.OK, operationStatus);
171 assertEquals("true", propertyDefinition.getDefaultValue());
174 for (int i = 0; i < falseArray.length; i++) {
175 assertTrue(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN, falseArray[i]));
176 HeatParameterDefinition propertyDefinition = buildHeatBooleanPropertyDefinition(HeatParameterType.BOOLEAN.getType(), falseArray[i]);
177 StorageOperationStatus operationStatus = heatParametersOperation.validateAndUpdateProperty(propertyDefinition);
178 assertEquals(StorageOperationStatus.OK, operationStatus);
179 assertEquals("false", propertyDefinition.getDefaultValue());
181 assertTrue(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN, falseArray[i]));
182 propertyDefinition = buildHeatBooleanPropertyDefinition(HeatParameterType.BOOLEAN.getType(), falseArray[i].toUpperCase());
183 operationStatus = heatParametersOperation.validateAndUpdateProperty(propertyDefinition);
184 assertEquals(StorageOperationStatus.OK, operationStatus);
185 assertEquals("false", propertyDefinition.getDefaultValue());
187 assertTrue(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN, falseArray[i]));
188 propertyDefinition = buildHeatBooleanPropertyDefinition(HeatParameterType.BOOLEAN.getType(), falseArray[i].toLowerCase());
189 operationStatus = heatParametersOperation.validateAndUpdateProperty(propertyDefinition);
190 assertEquals(StorageOperationStatus.OK, operationStatus);
191 assertEquals("false", propertyDefinition.getDefaultValue());
194 assertFalse(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN, "blabla"));
195 assertFalse(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN, "2"));
198 private HeatParameterDefinition buildHeatPropertyDefinition() {
199 HeatParameterDefinition parameter = new HeatParameterDefinition();
201 parameter.setName("p1");
202 parameter.setType("string");
203 parameter.setDefaultValue("def");
204 parameter.setCurrentValue("current");
205 parameter.setDescription("description");
210 private HeatParameterDefinition buildHeatBooleanPropertyDefinition(String type, String boolValue) {
211 HeatParameterDefinition parameter = new HeatParameterDefinition();
213 parameter.setName("parameter1");
214 parameter.setType(type);
215 parameter.setDefaultValue(boolValue);
216 parameter.setDescription("description");
222 public void addPropertyToResourceInstanceTest() {
224 HeatParameterDefinition property = buildHeatPropertyDefinition();
226 HeatParameterValueData propertyData = new HeatParameterValueData();
227 propertyData.setUniqueId("bla");
228 propertyData.setValue("value1");
230 Either<HeatParameterValueData, TitanOperationStatus> either = Either.left(propertyData);
232 GraphRelation graphRelation = new GraphRelation();
233 Either<GraphRelation, TitanOperationStatus> relationResult = Either.left(graphRelation);
235 when(titanGenericDao.createNode(any(HeatParameterValueData.class), eq(HeatParameterValueData.class))).thenReturn(either);
236 when(titanGenericDao.createRelation(any(GraphNode.class), any(GraphNode.class), eq(GraphEdgeLabels.PARAMETER_VALUE), anyMap())).thenReturn(relationResult);
237 when(titanGenericDao.createRelation(any(GraphNode.class), any(GraphNode.class), eq(GraphEdgeLabels.PARAMETER_IMPL), isNull())).thenReturn(relationResult);
239 Either<HeatParameterValueData, TitanOperationStatus> result = heatParametersOperation.addHeatValueToGraph(property, "artifactLabel", "resourceInstanceId.artifactId", "resourceInstanceId");
241 assertTrue(result.isLeft());