f2d4a524ff078d15cf26f00017ea70bf1123ce87
[sdc.git] /
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.eq;
28 import static org.mockito.Mockito.when;
29
30 import java.util.ArrayList;
31 import java.util.List;
32
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;
49
50 import fj.data.Either;
51
52 public class HeatParametersOperationTest extends ModelTestBase {
53
54         HeatParametersOperation heatParametersOperation = new HeatParametersOperation();
55
56         TitanGenericDao titanGenericDao = Mockito.mock(TitanGenericDao.class);
57
58         @Before
59         public void setup() {
60                 heatParametersOperation.setTitanGenericDao(titanGenericDao);
61
62         }
63
64         @Test
65         public void addPropertyToResourceTest() {
66
67                 String propName = "myProp";
68                 HeatParameterDefinition property = buildHeatPropertyDefinition();
69
70                 HeatParameterData propertyData = new HeatParameterData(property);
71
72                 Either<HeatParameterData, TitanOperationStatus> either = Either.left(propertyData);
73
74                 GraphRelation graphRelation = new GraphRelation();
75                 Either<GraphRelation, TitanOperationStatus> relationResult = Either.left(graphRelation);
76
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);
79
80                 Either<HeatParameterData, TitanOperationStatus> result = heatParametersOperation.addPropertyToGraph(propName, property, "resourceId.artifactId", NodeTypeEnum.ArtifactRef);
81
82                 assertTrue(result.isLeft());
83
84         }
85
86         @Test
87         public void addPropertyListToResourceTest() {
88
89                 HeatParameterDefinition property = buildHeatPropertyDefinition();
90                 HeatParameterDefinition property2 = buildHeatPropertyDefinition();
91                 property2.setName("p2");
92
93                 List<HeatParameterDefinition> parameters = new ArrayList<HeatParameterDefinition>();
94                 parameters.add(property);
95                 parameters.add(property2);
96
97                 HeatParameterData propertyData = new HeatParameterData(property);
98
99                 Either<HeatParameterData, TitanOperationStatus> either = Either.left(propertyData);
100
101                 GraphRelation graphRelation = new GraphRelation();
102                 Either<GraphRelation, TitanOperationStatus> relationResult = Either.left(graphRelation);
103
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);
106
107                 StorageOperationStatus result = heatParametersOperation.addPropertiesToGraph(parameters, "resourceId.artifactId", NodeTypeEnum.ArtifactRef);
108
109                 assertEquals(StorageOperationStatus.OK, result);
110
111         }
112
113         @Test
114         public void testStringValues() {
115                 assertTrue(heatParametersOperation.isValidValue(HeatParameterType.STRING, "50aaa"));
116         }
117
118         @Test
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"));
123
124                 assertFalse(heatParametersOperation.isValidValue(HeatParameterType.NUMBER, "aaa"));
125                 assertFalse(heatParametersOperation.isValidValue(HeatParameterType.NUMBER, "?>!"));
126         }
127
128         @Test
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());
135
136         }
137
138         @Test
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());
146         }
147
148         @Test
149         public void testBooleanValues() {
150
151                 String[] trueArray = { "true", "t", "1", "on", "y", "yes" };
152                 String[] falseArray = { "false", "f", "0", "off", "n", "no" };
153
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());
160
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());
166
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());
172                 }
173
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());
180
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());
186
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());
192                 }
193
194                 assertFalse(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN, "blabla"));
195                 assertFalse(heatParametersOperation.isValidValue(HeatParameterType.BOOLEAN, "2"));
196         }
197
198         private HeatParameterDefinition buildHeatPropertyDefinition() {
199                 HeatParameterDefinition parameter = new HeatParameterDefinition();
200
201                 parameter.setName("p1");
202                 parameter.setType("string");
203                 parameter.setDefaultValue("def");
204                 parameter.setCurrentValue("current");
205                 parameter.setDescription("description");
206
207                 return parameter;
208         }
209
210         private HeatParameterDefinition buildHeatBooleanPropertyDefinition(String type, String boolValue) {
211                 HeatParameterDefinition parameter = new HeatParameterDefinition();
212
213                 parameter.setName("parameter1");
214                 parameter.setType(type);
215                 parameter.setDefaultValue(boolValue);
216                 parameter.setDescription("description");
217
218                 return parameter;
219         }
220
221         @Test
222         public void addPropertyToResourceInstanceTest() {
223
224                 HeatParameterDefinition property = buildHeatPropertyDefinition();
225
226                 HeatParameterValueData propertyData = new HeatParameterValueData();
227                 propertyData.setUniqueId("bla");
228                 propertyData.setValue("value1");
229
230                 Either<HeatParameterValueData, TitanOperationStatus> either = Either.left(propertyData);
231
232                 GraphRelation graphRelation = new GraphRelation();
233                 Either<GraphRelation, TitanOperationStatus> relationResult = Either.left(graphRelation);
234
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);
238
239                 Either<HeatParameterValueData, TitanOperationStatus> result = heatParametersOperation.addHeatValueToGraph(property, "artifactLabel", "resourceInstanceId.artifactId", "resourceInstanceId");
240
241                 assertTrue(result.isLeft());
242
243         }
244
245 }