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.model.AttributeDefinition;
37 import org.openecomp.sdc.be.model.DataTypeDefinition;
38 import org.openecomp.sdc.be.model.PropertyDefinition;
39 import org.openecomp.sdc.be.model.tosca.ToscaPropertyType;
40 import org.openecomp.sdc.be.tosca.exception.ToscaConversionException;
41 import org.openecomp.sdc.be.tosca.model.ToscaAttribute;
43 class AttributeConverterTest {
46 void testScalarTypeConversion() throws ToscaConversionException {
48 final AttributeConverter attributeConverter = createTestSubject();
49 final AttributeDefinition attributeDefinition = new AttributeDefinition();
50 attributeDefinition.setType(ToscaPropertyType.STRING.getType());
51 attributeDefinition.setDescription("aDescription");
52 attributeDefinition.setStatus("aStatus");
53 attributeDefinition.setDefaultValue("aDefaultValue");
55 final ToscaAttribute actualToscaAttribute = attributeConverter.convert(attributeDefinition);
57 assertAttribute(attributeDefinition, actualToscaAttribute);
61 void testScalarNoDefaultValueConversion() throws ToscaConversionException {
63 final AttributeConverter attributeConverter = createTestSubject();
64 final AttributeDefinition attributeDefinition = new AttributeDefinition();
65 attributeDefinition.setType(ToscaPropertyType.STRING.getType());
66 attributeDefinition.setDescription("aDescription");
67 attributeDefinition.setStatus("aStatus");
69 final ToscaAttribute actualToscaAttribute = attributeConverter.convert(attributeDefinition);
71 assertAttribute(attributeDefinition, null, actualToscaAttribute);
75 void testListTypeConversion() throws JsonProcessingException, ToscaConversionException {
77 final Map<String, DataTypeDefinition> dataTypes = new HashMap<>();
78 final AttributeConverter attributeConverter = new AttributeConverter(dataTypes);
79 final AttributeDefinition attributeDefinition = new AttributeDefinition();
80 attributeDefinition.setType(ToscaPropertyType.LIST.getType());
81 attributeDefinition.setDescription("aDescription");
82 attributeDefinition.setStatus("aStatus");
83 final EntrySchema entrySchema = new EntrySchema();
84 entrySchema.setDescription("anEntrySchemaDescription");
85 entrySchema.setType(ToscaPropertyType.LIST.getType());
86 attributeDefinition.setEntry_schema(entrySchema);
87 final List<String> defaultValueList = new ArrayList<>();
88 defaultValueList.add("entry1");
89 defaultValueList.add("entry2");
90 defaultValueList.add("entry2");
91 attributeDefinition.setDefaultValue(parseToJsonString(defaultValueList));
93 final ToscaAttribute actualToscaAttribute = attributeConverter.convert(attributeDefinition);
95 assertAttribute(attributeDefinition, defaultValueList, actualToscaAttribute);
99 void testDataTypeTypeConversion() throws JsonProcessingException, ToscaConversionException {
101 final Map<String, DataTypeDefinition> dataTypes = new HashMap<>();
102 final DataTypeDefinition dataTypeDefinition = new DataTypeDefinition();
103 final List<PropertyDefinition> propertyDefinitionList = new ArrayList<>();
104 final PropertyDefinition integerProperty = new PropertyDefinition();
105 integerProperty.setName("anIntegerProperty");
106 integerProperty.setType(ToscaPropertyType.INTEGER.getType());
107 propertyDefinitionList.add(integerProperty);
108 final PropertyDefinition stringProperty = new PropertyDefinition();
109 stringProperty.setName("aStringProperty");
110 stringProperty.setType(ToscaPropertyType.STRING.getType());
111 propertyDefinitionList.add(stringProperty);
112 dataTypeDefinition.setProperties(propertyDefinitionList);
113 final String myDataType = "com.data.type.my";
114 dataTypeDefinition.setType(myDataType);
115 dataTypes.put(myDataType, dataTypeDefinition);
117 final AttributeConverter attributeConverter = new AttributeConverter(dataTypes);
118 final AttributeDefinition attributeDefinition = new AttributeDefinition();
119 attributeDefinition.setType(myDataType);
120 attributeDefinition.setDescription("aDescription");
121 attributeDefinition.setStatus("aStatus");
122 final Map<String, Object> defaultValueMap = new HashMap<>();
123 defaultValueMap.put("aStringProperty", "aStringPropertyValue");
124 defaultValueMap.put("anIntegerProperty", 0);
125 final String defaultValue = parseToJsonString(defaultValueMap);
126 attributeDefinition.setDefaultValue(defaultValue);
128 final ToscaAttribute actualToscaAttribute = attributeConverter.convert(attributeDefinition);
130 assertAttribute(attributeDefinition, defaultValueMap, actualToscaAttribute);
134 void testInvalidDefaultValueJsonConversion() {
136 final AttributeConverter attributeConverter = createTestSubject();
137 final AttributeDefinition attributeDefinition = new AttributeDefinition();
138 attributeDefinition.setDefaultValue(": thisIsAnInvalidJson");
140 final ToscaAttribute attribute = attributeConverter.convert(attributeDefinition);
141 assertNotNull(attribute);
142 assertNull(attribute.getDefault());
146 void testConvertAndAddValue() throws ToscaConversionException {
147 final AttributeConverter converter = createTestSubject();
148 final AttributeDefinition attribute = new AttributeDefinition();
149 attribute.setName("attrib");
150 attribute.setDefaultValue("default");
151 final Map<String, Object> attribs = new HashMap<>();
152 converter.convertAndAddValue(attribs, attribute);
153 assertEquals(1, attribs.size());
154 assertEquals("default", attribs.get("attrib"));
157 private AttributeConverter createTestSubject() {
158 return new AttributeConverter(Collections.emptyMap());
161 private void assertAttribute(final AttributeDefinition expectedAttributeDefinition, final ToscaAttribute actualToscaAttribute) {
162 assertAttribute(expectedAttributeDefinition, expectedAttributeDefinition.get_default(), actualToscaAttribute);
165 private void assertAttribute(final AttributeDefinition expectedAttributeDefinition, final Object expectedDefault,
166 final ToscaAttribute actualToscaAttribute) {
167 assertEquals(expectedAttributeDefinition.getType(), actualToscaAttribute.getType());
168 assertEquals(expectedAttributeDefinition.getDescription(), actualToscaAttribute.getDescription());
169 assertEquals(expectedAttributeDefinition.getStatus(), actualToscaAttribute.getStatus());
170 if (expectedAttributeDefinition.getEntry_schema() == null) {
171 assertNull(actualToscaAttribute.getEntrySchema());
173 assertEquals(expectedAttributeDefinition.getEntry_schema().getType(),
174 actualToscaAttribute.getEntrySchema().getType());
176 expectedAttributeDefinition.getEntry_schema().getDescription(),
177 actualToscaAttribute.getEntrySchema().getDescription());
179 assertEquals(expectedDefault, actualToscaAttribute.getDefault());
182 private String parseToJsonString(final Object value) throws JsonProcessingException {
183 final ObjectMapper objectMapper = new ObjectMapper();
184 return objectMapper.writeValueAsString(value);