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.components.impl;
23 import fj.data.Either;
24 import org.junit.Test;
25 import org.openecomp.sdc.be.components.impl.ImportUtils.ResultStatusEnum;
26 import org.openecomp.sdc.be.components.impl.ImportUtils.ToscaElementTypeEnum;
27 import org.openecomp.sdc.be.components.impl.ImportUtils.ToscaTagNamesEnum;
28 import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
29 import org.openecomp.sdc.be.datatypes.elements.SchemaDefinition;
30 import org.openecomp.sdc.be.model.HeatParameterDefinition;
31 import org.openecomp.sdc.be.model.PropertyDefinition;
32 import org.openecomp.sdc.common.api.ArtifactTypeEnum;
33 import org.yaml.snakeyaml.Yaml;
35 import java.io.IOException;
36 import java.nio.file.FileSystems;
37 import java.nio.file.Files;
38 import java.util.ArrayList;
39 import java.util.HashMap;
40 import java.util.Iterator;
41 import java.util.List;
43 import java.util.Map.Entry;
45 import static org.junit.Assert.assertEquals;
46 import static org.junit.Assert.assertFalse;
47 import static org.junit.Assert.assertNotNull;
48 import static org.junit.Assert.assertTrue;
50 public class ImportUtilsTest {
52 public void testStringTypeFindToscaElements() throws IOException {
53 Either<List<Object>, ResultStatusEnum> toscaElements = ImportUtils.findToscaElements((Map<String, Object>) loadJsonFromFile("normative-types-string-list-test.yml"), "stringTestTag", ToscaElementTypeEnum.STRING, new ArrayList<>());
54 assertTrue(toscaElements.isLeft());
55 List<Object> list = toscaElements.left().value();
56 assertTrue(list.size() == 4);
58 for (Object element : list) {
59 assertTrue(element instanceof String);
60 String value = (String) element;
61 assertTrue(value.equals("stringVal" + count));
67 public void testBooleanTypeFindToscaElements() throws IOException {
68 Either<List<Object>, ResultStatusEnum> toscaElements = ImportUtils.findToscaElements((Map<String, Object>) loadJsonFromFile("normative-types-all-map-test.yml"), "required", ToscaElementTypeEnum.BOOLEAN, new ArrayList<>());
69 assertTrue(toscaElements.isLeft());
70 List<Object> list = toscaElements.left().value();
71 assertTrue(list.size() == 3);
73 for (Object element : list) {
74 assertTrue(element instanceof Boolean);
75 Boolean value = (Boolean) element;
76 if (count == 1 || count == 3) {
78 } else if (count == 2) {
87 public void testListTypeFindToscaElements() throws IOException {
88 Either<List<Object>, ResultStatusEnum> toscaElements = ImportUtils.findToscaElements((Map<String, Object>) loadJsonFromFile("normative-types-string-list-test.yml"), "listTestTag", ToscaElementTypeEnum.LIST, new ArrayList<>());
89 assertTrue(toscaElements.isLeft());
90 List<Object> list = toscaElements.left().value();
91 assertTrue(list.size() == 3);
93 for (Object element : list) {
94 assertTrue(element instanceof List);
97 verifyListElement1(element);
98 } else if (count == 2) {
99 verifyListElement2(element);
102 else if (count == 3) {
103 verifyListElement3(element);
110 public void testAllTypeFindToscaElements() throws IOException {
111 Either<List<Object>, ResultStatusEnum> toscaElements = ImportUtils.findToscaElements((Map<String, Object>) loadJsonFromFile("normative-types-all-map-test.yml"), "allTestTag", ToscaElementTypeEnum.ALL, new ArrayList<>());
112 assertTrue(toscaElements.isLeft());
113 List<Object> list = toscaElements.left().value();
114 assertTrue(list.size() == 5);
116 for (Object element : list) {
118 assertTrue(element instanceof String);
119 assertTrue(element.equals("tosca.nodes.Root"));
120 } else if (count == 2) {
121 assertTrue(element instanceof Map);
122 Map<String, Object> mapElement = (Map<String, Object>) element;
123 assertTrue(mapElement.size() == 2);
124 Iterator<Entry<String, Object>> elementEntries = mapElement.entrySet().iterator();
125 Entry<String, Object> elementEntry = elementEntries.next();
126 assertTrue(elementEntry.getKey().equals("mapTestTag"));
127 assertTrue(elementEntry.getValue().equals("string"));
129 elementEntry = elementEntries.next();
130 assertTrue(elementEntry.getKey().equals("required"));
131 assertTrue(elementEntry.getValue() instanceof Boolean);
132 assertTrue((Boolean) elementEntry.getValue());
135 else if (count == 3) {
136 assertTrue(element instanceof String);
137 assertTrue(element.equals("1 MB"));
140 else if (count == 4) {
141 assertTrue(element instanceof List);
142 List<Object> listElement = (List<Object>) element;
143 assertTrue(listElement.size() == 2);
145 assertTrue(listElement.get(0) instanceof Map);
146 Map<String, Object> innerElement = (Map<String, Object>) listElement.get(0);
147 assertTrue(innerElement.size() == 1);
148 Entry<String, Object> innerEntry = innerElement.entrySet().iterator().next();
149 assertTrue(innerEntry.getKey().equals("greater_or_equal"));
150 assertTrue(innerEntry.getValue().equals("1 MB"));
152 assertTrue(listElement.get(1) instanceof Map);
153 innerElement = (Map<String, Object>) listElement.get(1);
154 assertTrue(innerElement.size() == 1);
155 innerEntry = innerElement.entrySet().iterator().next();
156 assertTrue(innerEntry.getKey().equals("stringTestTag"));
157 assertTrue(innerEntry.getValue().equals("stringVal3"));
158 } else if (count == 5) {
159 assertTrue(element instanceof Boolean);
160 assertFalse((Boolean) element);
167 public void testMapTypeFindToscaElements() throws IOException {
168 Either<List<Object>, ResultStatusEnum> toscaElements = ImportUtils.findToscaElements((Map<String, Object>) loadJsonFromFile("normative-types-all-map-test.yml"), "mapTestTag", ToscaElementTypeEnum.MAP, new ArrayList<>());
169 assertTrue(toscaElements.isLeft());
170 List<Object> list = toscaElements.left().value();
171 assertTrue(list.size() == 2);
173 for (Object element : list) {
174 assertTrue(element instanceof Map);
177 Map<String, Object> mapElement = (Map<String, Object>) element;
178 assertTrue(mapElement.size() == 2);
179 Iterator<Entry<String, Object>> iterator = mapElement.entrySet().iterator();
180 Entry<String, Object> inerElementEntry = iterator.next();
181 assertTrue(inerElementEntry.getKey().equals("stringTestTag"));
182 assertTrue(inerElementEntry.getValue().equals("stringVal1"));
184 inerElementEntry = iterator.next();
185 assertTrue(inerElementEntry.getKey().equals("listTestTag"));
186 assertTrue(inerElementEntry.getValue() instanceof List);
187 List<Object> innerValue = (List<Object>) inerElementEntry.getValue();
189 assertTrue(innerValue.size() == 3);
191 } else if (count == 2) {
192 Map<String, Object> mapElement = (Map<String, Object>) element;
193 assertTrue(mapElement.size() == 2);
194 Iterator<Entry<String, Object>> entryItr = mapElement.entrySet().iterator();
195 Entry<String, Object> inerElementEntry = entryItr.next();
196 assertTrue(inerElementEntry.getKey().equals("type"));
197 assertTrue(inerElementEntry.getValue().equals("tosca.capabilities.Attachment"));
198 inerElementEntry = entryItr.next();
199 assertTrue(inerElementEntry.getKey().equals("allTestTag"));
200 assertTrue(inerElementEntry.getValue() instanceof Boolean);
208 public void testCreateFullHeatParameterModuleWithString() {
210 testCreateFullHeatParameterModule("string", "default value");
215 public void testCreateFullHeatParameterModuleWithNumber() {
217 testCreateFullHeatParameterModule("number", "777");
218 testCreateFullHeatParameterModule("number", "777.23");
223 public void testCreateFullHeatParameterModuleWithBoolean() {
225 testCreateFullHeatParameterModule("boolean", "true");
226 testCreateFullHeatParameterModule("boolean", "on");
227 testCreateFullHeatParameterModule("boolean", "n");
232 public void testCreateFullHeatParameterModuleWithList() {
234 testCreateFullHeatParameterModule("comma_delimited_list", "[one, two]");
239 // public void testCreateFullHeatParameterModuleWithInvalidType(){
241 // String name = "fullParameter";
242 // String description = "description_text";
244 // Map<String, Object> parametersMap = new HashMap<String, Object>();
245 // Map<String, Object> firstParam = createParameterMap("aaa", "aaa",
246 // name, description);
247 // parametersMap.put(ToscaTagNamesEnum.PARAMETERS.getElementName(),
250 // Either<List<HeatParameterDefinition>,ResultStatusEnum> heatParameters =
251 // ImportUtils.getHeatParameters(parametersMap);
252 // assertTrue(heatParameters.isRight());
253 // assertEquals(ResultStatusEnum.INVALID_PROPERTY_TYPE,
254 // heatParameters.right().value());
259 public void testCreateFullHeatParameterModuleWithMissingType() {
261 String name = "fullParameter";
262 String description = "description_text";
264 Map<String, Object> parametersMap = new HashMap<String, Object>();
265 Map<String, Object> firstParam = createParameterMap(null, "aaa", name, description);
266 parametersMap.put(ToscaTagNamesEnum.PARAMETERS.getElementName(), firstParam);
268 Either<List<HeatParameterDefinition>, ResultStatusEnum> heatParameters = ImportUtils.getHeatParameters(parametersMap, ArtifactTypeEnum.HEAT.getType());
269 assertTrue(heatParameters.isRight());
270 assertEquals(ResultStatusEnum.INVALID_PROPERTY_TYPE, heatParameters.right().value());
275 public void testCreateFullHeatParameterModuleWithMissingFields() {
277 String name = "fullParameter";
279 Map<String, Object> parametersMap = new HashMap<String, Object>();
280 String type = "number";
281 String defValue = "defvalue";
282 // default value cannot be empty in heat in case tag exists
283 Map<String, Object> firstParam = createParameterMap(type, defValue, name, null);
284 parametersMap.put(ToscaTagNamesEnum.PARAMETERS.getElementName(), firstParam);
286 Either<List<HeatParameterDefinition>, ResultStatusEnum> heatParameters = ImportUtils.getHeatParameters(parametersMap, ArtifactTypeEnum.HEAT.getType());
287 assertTrue(heatParameters.isLeft());
288 List<HeatParameterDefinition> parameterDefList = heatParameters.left().value();
289 assertFalse(parameterDefList.isEmpty());
290 HeatParameterDefinition parameterDefinition = parameterDefList.get(0);
292 assertParameter(parameterDefinition, name, type, null, defValue);
297 public void testGetAttributesFromYml() throws IOException {
299 Map<String, Object> toscaJson = (Map<String, Object>) loadJsonFromFile("importToscaWithAttribute.yml");
300 Either<Map<String, PropertyDefinition>, ResultStatusEnum> actualAttributes = ImportUtils.getAttributes(toscaJson);
301 assertTrue(actualAttributes.isLeft());
302 Map<String, Map<String, Object>> expectedAttributes = getElements(toscaJson, ToscaTagNamesEnum.ATTRIBUTES);
303 compareAttributes(expectedAttributes, actualAttributes.left().value());
308 public void testGetPropertiesFromYml() throws IOException {
310 Map<String, Object> toscaJson = (Map<String, Object>) loadJsonFromFile("importToscaProperties.yml");
311 Either<Map<String, PropertyDefinition>, ResultStatusEnum> actualProperties = ImportUtils.getProperties(toscaJson);
312 assertTrue(actualProperties.isLeft());
313 Map<String, Map<String, Object>> expectedProperties = getElements(toscaJson, ToscaTagNamesEnum.PROPERTIES);
314 compareProperties(expectedProperties, actualProperties.left().value());
318 private void compareAttributes(Map<String, Map<String, Object>> expected, Map<String, PropertyDefinition> actual) {
320 Map<String, Object> singleExpectedAttribute;
321 PropertyDefinition actualAttribute, expectedAttributeModel;
322 // attributes of resource
323 for (Map.Entry<String, Map<String, Object>> expectedAttribute : expected.entrySet()) {
325 singleExpectedAttribute = expectedAttribute.getValue();
326 assertNotNull(singleExpectedAttribute);
327 actualAttribute = actual.get(expectedAttribute.getKey());
328 assertNotNull(actualAttribute);
329 actualAttribute.setName(expectedAttribute.getKey().toString());
330 expectedAttributeModel = ImportUtils.createModuleAttribute(singleExpectedAttribute);
331 expectedAttributeModel.setName(expectedAttribute.getKey().toString());
333 assertEquals(expectedAttributeModel.getDefaultValue(), actualAttribute.getDefaultValue());
334 assertEquals(expectedAttributeModel.getDescription(), actualAttribute.getDescription());
335 assertEquals(expectedAttributeModel.getName(), actualAttribute.getName());
336 assertEquals(expectedAttributeModel.getStatus(), actualAttribute.getStatus());
337 assertEquals(expectedAttributeModel.getType(), actualAttribute.getType());
339 compareSchemas(expectedAttributeModel.getSchema(), actualAttribute.getSchema());
345 private void compareProperties(Map<String, Map<String, Object>> expected, Map<String, PropertyDefinition> actual) {
347 Map<String, Object> singleExpectedProperty;
348 PropertyDefinition actualProperty, expectedPropertyModel;
349 // attributes of resource
350 for (Map.Entry<String, Map<String, Object>> expectedProperty : expected.entrySet()) {
352 singleExpectedProperty = expectedProperty.getValue();
353 assertNotNull(singleExpectedProperty);
354 actualProperty = actual.get(expectedProperty.getKey());
355 assertNotNull(actualProperty);
356 actualProperty.setName(expectedProperty.getKey().toString());
357 expectedPropertyModel = ImportUtils.createModuleProperty(singleExpectedProperty);
358 expectedPropertyModel.setName(expectedProperty.getKey().toString());
360 assertEquals(expectedPropertyModel.getDefaultValue(), actualProperty.getDefaultValue());
361 assertEquals(expectedPropertyModel.getDescription(), actualProperty.getDescription());
362 assertEquals(expectedPropertyModel.getName(), actualProperty.getName());
363 assertEquals(expectedPropertyModel.getStatus(), actualProperty.getStatus());
364 assertEquals(expectedPropertyModel.getType(), actualProperty.getType());
366 compareSchemas(expectedPropertyModel.getSchema(), actualProperty.getSchema());
372 private void compareSchemas(SchemaDefinition expected, SchemaDefinition actual) {
374 if (expected == null && actual == null) {
377 PropertyDataDefinition actualPropertySchema = actual.getProperty();
378 PropertyDataDefinition expectedPropertySchema = expected.getProperty();
379 assertNotNull(actualPropertySchema);
380 assertNotNull(expectedPropertySchema);
381 assertEquals(expectedPropertySchema.getDescription(), actualPropertySchema.getDescription());
382 assertEquals(expectedPropertySchema.getType(), actualPropertySchema.getType());
386 private <T> Map<String, T> getElements(Map<String, Object> toscaJson, ToscaTagNamesEnum elementType) {
388 Either<Map<String, T>, ResultStatusEnum> toscaExpectedElements = ImportUtils.findFirstToscaMapElement(toscaJson, elementType);
389 assertTrue(toscaExpectedElements.isLeft());
391 return toscaExpectedElements.left().value();
395 private void testCreateFullHeatParameterModule(String type, Object defaultVal) {
397 String name = "fullParameter";
398 String description = "description_text";
400 Map<String, Object> parametersMap = new HashMap<String, Object>();
401 Map<String, Object> firstParam = createParameterMap(type, defaultVal, name, description);
402 parametersMap.put(ToscaTagNamesEnum.PARAMETERS.getElementName(), firstParam);
404 Either<List<HeatParameterDefinition>, ResultStatusEnum> heatParameters = ImportUtils.getHeatParameters(parametersMap, ArtifactTypeEnum.HEAT.getType());
405 assertTrue(heatParameters.isLeft());
406 List<HeatParameterDefinition> parameterDefList = heatParameters.left().value();
407 assertFalse(parameterDefList.isEmpty());
408 HeatParameterDefinition parameterDefinition = parameterDefList.get(0);
410 assertParameter(parameterDefinition, name, type, description, defaultVal);
414 private Map<String, Object> createParameterMap(String type, Object defaultVal, String name, String description) {
415 Map<String, Object> firstParam = new HashMap<String, Object>();
416 Map<String, Object> valuesMap = new HashMap<String, Object>();
418 valuesMap.put(ToscaTagNamesEnum.TYPE.getElementName(), type);
419 valuesMap.put(ToscaTagNamesEnum.DESCRIPTION.getElementName(), description);
420 valuesMap.put(ToscaTagNamesEnum.DEFAULT_VALUE.getElementName(), defaultVal);
422 firstParam.put(name, valuesMap);
426 private void assertParameter(HeatParameterDefinition parameterDefinition, String name, String type, String description, Object defaultVal) {
427 assertEquals(name, parameterDefinition.getName());
428 assertEquals(description, parameterDefinition.getDescription());
429 assertEquals(type, parameterDefinition.getType());
430 assertEquals(String.valueOf(defaultVal), parameterDefinition.getDefaultValue());
431 assertEquals(String.valueOf(defaultVal), parameterDefinition.getCurrentValue());
434 private void verifyListElement3(Object element) {
435 List<Object> listElement = (List<Object>) element;
436 assertTrue(listElement.size() == 2);
438 Map<String, String> innerElement = (Map<String, String>) listElement.get(0);
439 assertTrue(innerElement.size() == 1);
440 Entry<String, String> innerEntry = innerElement.entrySet().iterator().next();
441 assertTrue(innerEntry.getKey().equals("testTag1"));
442 assertTrue(innerEntry.getValue().equals("1 MB"));
444 innerElement = (Map<String, String>) listElement.get(1);
445 assertTrue(innerElement.size() == 1);
446 innerEntry = innerElement.entrySet().iterator().next();
447 assertTrue(innerEntry.getKey().equals("type"));
448 assertTrue(innerEntry.getValue().equals("stringVal2"));
451 private void verifyListElement2(Object element) {
452 List<Object> listElement = (List<Object>) element;
453 assertTrue(listElement.size() == 2);
455 Map<String, Object> innerElement = (Map<String, Object>) listElement.get(0);
456 assertTrue(innerElement.size() == 1);
457 Entry<String, Object> innerEntry = innerElement.entrySet().iterator().next();
458 assertTrue(innerEntry.getKey().equals("testTag1"));
459 assertTrue(innerEntry.getValue().equals("1 MB"));
461 assertTrue(listElement.get(1) instanceof Map);
462 innerElement = (Map<String, Object>) listElement.get(1);
463 assertTrue(innerElement.size() == 1);
464 innerEntry = innerElement.entrySet().iterator().next();
465 assertTrue(innerEntry.getKey().equals("listTestTag"));
466 assertTrue(innerEntry.getValue() instanceof List);
469 private void verifyListElement1(Object element) {
470 List<Object> listElement = (List<Object>) element;
471 assertTrue(listElement.size() == 3);
473 Map<String, String> innerElement = (Map<String, String>) listElement.get(0);
474 assertTrue(innerElement.size() == 1);
475 Entry<String, String> innerEntry = innerElement.entrySet().iterator().next();
476 assertTrue(innerEntry.getKey().equals("listTestTag"));
477 assertTrue(innerEntry.getValue().equals("1 MB"));
479 innerElement = (Map<String, String>) listElement.get(1);
480 assertTrue(innerElement.size() == 1);
481 innerEntry = innerElement.entrySet().iterator().next();
482 assertTrue(innerEntry.getKey().equals("listTestTag"));
483 assertTrue(innerEntry.getValue().equals("2 MB"));
485 innerElement = (Map<String, String>) listElement.get(2);
486 assertTrue(innerElement.size() == 1);
487 innerEntry = innerElement.entrySet().iterator().next();
488 assertTrue(innerEntry.getKey().equals("stringTestTag"));
489 assertTrue(innerEntry.getValue().equals("stringVal2"));
492 public static String loadFileNameToJsonString(String fileName) throws IOException {
493 String sourceDir = "src/test/resources/normativeTypes";
494 java.nio.file.Path filePath = FileSystems.getDefault().getPath(sourceDir, fileName);
495 byte[] fileContent = Files.readAllBytes(filePath);
496 String content = new String(fileContent);
500 private static Object loadJsonFromFile(String fileName) throws IOException {
501 String content = loadFileNameToJsonString(fileName);
502 Object load = new Yaml().load(content);