2 * ============LICENSE_START=======================================================
3 * Copyright (C) 2021 Nordix Foundation
4 * ================================================================================
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 * SPDX-License-Identifier: Apache-2.0
17 * ============LICENSE_END=========================================================
20 package org.openecomp.sdc.be.tosca;
22 import static org.junit.jupiter.api.Assertions.assertEquals;
23 import static org.junit.jupiter.api.Assertions.assertNotNull;
24 import static org.junit.jupiter.api.Assertions.assertNull;
25 import static org.junit.jupiter.api.Assertions.assertThrows;
27 import com.fasterxml.jackson.core.JsonProcessingException;
28 import com.fasterxml.jackson.databind.ObjectMapper;
29 import java.util.ArrayList;
30 import java.util.Collections;
31 import java.util.HashMap;
32 import java.util.List;
34 import org.junit.jupiter.api.Test;
35 import org.onap.sdc.tosca.datatypes.model.EntrySchema;
36 import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
37 import org.openecomp.sdc.be.datatypes.elements.SchemaDefinition;
38 import org.openecomp.sdc.be.model.AttributeDefinition;
39 import org.openecomp.sdc.be.model.DataTypeDefinition;
40 import org.openecomp.sdc.be.model.PropertyDefinition;
41 import org.openecomp.sdc.be.model.tosca.ToscaPropertyType;
42 import org.openecomp.sdc.be.tosca.exception.ToscaConversionException;
43 import org.openecomp.sdc.be.tosca.model.ToscaAttribute;
44 import org.openecomp.sdc.be.tosca.model.ToscaSchemaDefinition;
46 class AttributeConverterTest {
49 void testScalarTypeConversion() throws ToscaConversionException {
51 final AttributeConverter attributeConverter = createTestSubject();
52 final AttributeDefinition attributeDefinition = new AttributeDefinition();
53 attributeDefinition.setType(ToscaPropertyType.STRING.getType());
54 attributeDefinition.setDescription("aDescription");
55 attributeDefinition.setStatus("aStatus");
56 attributeDefinition.setDefaultValue("aDefaultValue");
58 final ToscaAttribute actualToscaAttribute = attributeConverter.convert(attributeDefinition);
60 assertAttribute(attributeDefinition, actualToscaAttribute);
64 void testScalarNoDefaultValueConversion() throws ToscaConversionException {
66 final AttributeConverter attributeConverter = createTestSubject();
67 final AttributeDefinition attributeDefinition = new AttributeDefinition();
68 attributeDefinition.setType(ToscaPropertyType.STRING.getType());
69 attributeDefinition.setDescription("aDescription");
70 attributeDefinition.setStatus("aStatus");
72 final ToscaAttribute actualToscaAttribute = attributeConverter.convert(attributeDefinition);
74 assertAttribute(attributeDefinition, null, actualToscaAttribute);
78 void testListTypeConversion() throws JsonProcessingException, ToscaConversionException {
80 final Map<String, DataTypeDefinition> dataTypes = new HashMap<>();
81 final AttributeConverter attributeConverter = new AttributeConverter(dataTypes);
82 final AttributeDefinition attributeDefinition = new AttributeDefinition();
83 attributeDefinition.setType(ToscaPropertyType.LIST.getType());
84 attributeDefinition.setDescription("aDescription");
85 attributeDefinition.setStatus("aStatus");
86 attributeDefinition.setSchema(new SchemaDefinition());
87 attributeDefinition.getSchema().setProperty(new PropertyDataDefinition());
88 attributeDefinition.getSchema().getProperty().setType(ToscaPropertyType.LIST.getType());
89 attributeDefinition.getSchema().getProperty().setDescription("anEntrySchemaDescription");
90 final List<String> defaultValueList = new ArrayList<>();
91 defaultValueList.add("entry1");
92 defaultValueList.add("entry2");
93 defaultValueList.add("entry2");
94 attributeDefinition.setDefaultValue(parseToJsonString(defaultValueList));
96 final ToscaAttribute actualToscaAttribute = attributeConverter.convert(attributeDefinition);
98 assertAttribute(attributeDefinition, defaultValueList, actualToscaAttribute);
102 void testDataTypeTypeConversion() throws JsonProcessingException, ToscaConversionException {
104 final Map<String, DataTypeDefinition> dataTypes = new HashMap<>();
105 final DataTypeDefinition dataTypeDefinition = new DataTypeDefinition();
106 final List<PropertyDefinition> propertyDefinitionList = new ArrayList<>();
107 final PropertyDefinition integerProperty = new PropertyDefinition();
108 integerProperty.setName("anIntegerProperty");
109 integerProperty.setType(ToscaPropertyType.INTEGER.getType());
110 propertyDefinitionList.add(integerProperty);
111 final PropertyDefinition stringProperty = new PropertyDefinition();
112 stringProperty.setName("aStringProperty");
113 stringProperty.setType(ToscaPropertyType.STRING.getType());
114 propertyDefinitionList.add(stringProperty);
115 dataTypeDefinition.setProperties(propertyDefinitionList);
116 final String myDataType = "com.data.type.my";
117 dataTypeDefinition.setType(myDataType);
118 dataTypes.put(myDataType, dataTypeDefinition);
120 final AttributeConverter attributeConverter = new AttributeConverter(dataTypes);
121 final AttributeDefinition attributeDefinition = new AttributeDefinition();
122 attributeDefinition.setType(myDataType);
123 attributeDefinition.setDescription("aDescription");
124 attributeDefinition.setStatus("aStatus");
125 final Map<String, Object> defaultValueMap = new HashMap<>();
126 defaultValueMap.put("aStringProperty", "aStringPropertyValue");
127 defaultValueMap.put("anIntegerProperty", 0);
128 final String defaultValue = parseToJsonString(defaultValueMap);
129 attributeDefinition.setDefaultValue(defaultValue);
131 final ToscaAttribute actualToscaAttribute = attributeConverter.convert(attributeDefinition);
133 assertAttribute(attributeDefinition, defaultValueMap, actualToscaAttribute);
137 void testInvalidDefaultValueJsonConversion() {
139 final AttributeConverter attributeConverter = createTestSubject();
140 final AttributeDefinition attributeDefinition = new AttributeDefinition();
141 attributeDefinition.setDefaultValue(": thisIsAnInvalidJson");
143 final ToscaAttribute attribute = attributeConverter.convert(attributeDefinition);
144 assertNotNull(attribute);
145 assertNull(attribute.getDefault());
149 void testConvertAndAddDefaultValue() throws ToscaConversionException {
150 final AttributeConverter converter = createTestSubject();
151 final AttributeDefinition attribute = new AttributeDefinition();
152 attribute.setName("attrib");
153 attribute.setDefaultValue("default");
154 final Map<String, Object> attribs = new HashMap<>();
155 converter.convertAndAddValue(attribs, attribute);
156 assertEquals(0, attribs.size());
160 void testConvertAndAddValue() throws ToscaConversionException {
161 final AttributeConverter converter = createTestSubject();
162 final AttributeDefinition attribute = new AttributeDefinition();
163 attribute.setName("attrib");
164 attribute.setValue("value");
165 final Map<String, Object> attribs = new HashMap<>();
166 converter.convertAndAddValue(attribs, attribute);
167 assertEquals(1, attribs.size());
168 assertEquals("value", attribs.get("attrib"));
171 private AttributeConverter createTestSubject() {
172 return new AttributeConverter(Collections.emptyMap());
175 private void assertAttribute(final AttributeDefinition expectedAttributeDefinition, final ToscaAttribute actualToscaAttribute) {
176 assertAttribute(expectedAttributeDefinition, expectedAttributeDefinition.get_default(), actualToscaAttribute);
179 private void assertAttribute(final AttributeDefinition expectedAttributeDefinition, final Object expectedDefault,
180 final ToscaAttribute actualToscaAttribute) {
181 assertEquals(expectedAttributeDefinition.getType(), actualToscaAttribute.getType());
182 assertEquals(expectedAttributeDefinition.getDescription(), actualToscaAttribute.getDescription());
183 assertEquals(expectedAttributeDefinition.getStatus(), actualToscaAttribute.getStatus());
184 if (expectedAttributeDefinition.getSchema() == null) {
185 assertNull(actualToscaAttribute.getEntrySchema());
187 assertEquals(expectedAttributeDefinition.getSchema().getProperty().getType(),
188 actualToscaAttribute.getEntrySchema().getType());
190 expectedAttributeDefinition.getSchema().getProperty().getDescription(),
191 actualToscaAttribute.getEntrySchema().getDescription());
193 assertEquals(expectedDefault, actualToscaAttribute.getDefault());
196 private String parseToJsonString(final Object value) throws JsonProcessingException {
197 final ObjectMapper objectMapper = new ObjectMapper();
198 return objectMapper.writeValueAsString(value);