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.assertNull;
24 import static org.junit.jupiter.api.Assertions.assertThrows;
26 import com.fasterxml.jackson.core.JsonProcessingException;
27 import com.fasterxml.jackson.databind.ObjectMapper;
28 import java.util.ArrayList;
29 import java.util.Collections;
30 import java.util.HashMap;
31 import java.util.List;
33 import org.junit.jupiter.api.Test;
34 import org.onap.sdc.tosca.datatypes.model.EntrySchema;
35 import org.openecomp.sdc.be.model.AttributeDefinition;
36 import org.openecomp.sdc.be.model.DataTypeDefinition;
37 import org.openecomp.sdc.be.model.PropertyDefinition;
38 import org.openecomp.sdc.be.model.tosca.ToscaPropertyType;
39 import org.openecomp.sdc.be.tosca.exception.ToscaConversionException;
40 import org.openecomp.sdc.be.tosca.model.ToscaAttribute;
42 class AttributeConverterTest {
45 void testScalarTypeConversion() throws ToscaConversionException {
47 final AttributeConverter attributeConverter = new AttributeConverter(Collections.emptyMap());
48 final AttributeDefinition attributeDefinition = new AttributeDefinition();
49 attributeDefinition.setType(ToscaPropertyType.STRING.getType());
50 attributeDefinition.setDescription("aDescription");
51 attributeDefinition.setStatus("aStatus");
52 attributeDefinition.setDefaultValue("aDefaultValue");
54 final ToscaAttribute actualToscaAttribute = attributeConverter.convert(attributeDefinition);
56 assertAttribute(attributeDefinition, actualToscaAttribute);
60 void testScalarNoDefaultValueConversion() throws ToscaConversionException {
62 final AttributeConverter attributeConverter = new AttributeConverter(Collections.emptyMap());
63 final AttributeDefinition attributeDefinition = new AttributeDefinition();
64 attributeDefinition.setType(ToscaPropertyType.STRING.getType());
65 attributeDefinition.setDescription("aDescription");
66 attributeDefinition.setStatus("aStatus");
68 final ToscaAttribute actualToscaAttribute = attributeConverter.convert(attributeDefinition);
70 assertAttribute(attributeDefinition, null, actualToscaAttribute);
74 void testListTypeConversion() throws JsonProcessingException, ToscaConversionException {
76 final Map<String, DataTypeDefinition> dataTypes = new HashMap<>();
77 final AttributeConverter attributeConverter = new AttributeConverter(dataTypes);
78 final AttributeDefinition attributeDefinition = new AttributeDefinition();
79 attributeDefinition.setType(ToscaPropertyType.LIST.getType());
80 attributeDefinition.setDescription("aDescription");
81 attributeDefinition.setStatus("aStatus");
82 final EntrySchema entrySchema = new EntrySchema();
83 entrySchema.setDescription("anEntrySchemaDescription");
84 entrySchema.setType(ToscaPropertyType.LIST.getType());
85 attributeDefinition.setEntry_schema(entrySchema);
86 final List<String> defaultValueList = new ArrayList<>();
87 defaultValueList.add("entry1");
88 defaultValueList.add("entry2");
89 defaultValueList.add("entry2");
90 attributeDefinition.setDefaultValue(parseToJsonString(defaultValueList));
92 final ToscaAttribute actualToscaAttribute = attributeConverter.convert(attributeDefinition);
94 assertAttribute(attributeDefinition, defaultValueList, actualToscaAttribute);
98 void testDataTypeTypeConversion() throws JsonProcessingException, ToscaConversionException {
100 final Map<String, DataTypeDefinition> dataTypes = new HashMap<>();
101 final DataTypeDefinition dataTypeDefinition = new DataTypeDefinition();
102 final List<PropertyDefinition> propertyDefinitionList = new ArrayList<>();
103 final PropertyDefinition integerProperty = new PropertyDefinition();
104 integerProperty.setName("anIntegerProperty");
105 integerProperty.setType(ToscaPropertyType.INTEGER.getType());
106 propertyDefinitionList.add(integerProperty);
107 final PropertyDefinition stringProperty = new PropertyDefinition();
108 stringProperty.setName("aStringProperty");
109 stringProperty.setType(ToscaPropertyType.STRING.getType());
110 propertyDefinitionList.add(stringProperty);
111 dataTypeDefinition.setProperties(propertyDefinitionList);
112 final String myDataType = "com.data.type.my";
113 dataTypeDefinition.setType(myDataType);
114 dataTypes.put(myDataType, dataTypeDefinition);
116 final AttributeConverter attributeConverter = new AttributeConverter(dataTypes);
117 final AttributeDefinition attributeDefinition = new AttributeDefinition();
118 attributeDefinition.setType(myDataType);
119 attributeDefinition.setDescription("aDescription");
120 attributeDefinition.setStatus("aStatus");
121 final Map<String, Object> defaultValueMap = new HashMap<>();
122 defaultValueMap.put("aStringProperty", "aStringPropertyValue");
123 defaultValueMap.put("anIntegerProperty", 0);
124 final String defaultValue = parseToJsonString(defaultValueMap);
125 attributeDefinition.setDefaultValue(defaultValue);
127 final ToscaAttribute actualToscaAttribute = attributeConverter.convert(attributeDefinition);
129 assertAttribute(attributeDefinition, defaultValueMap, actualToscaAttribute);
133 void testInvalidDefaultValueJsonConversion() {
135 final AttributeConverter attributeConverter = new AttributeConverter(Collections.emptyMap());
136 final AttributeDefinition attributeDefinition = new AttributeDefinition();
137 attributeDefinition.setDefaultValue(": thisIsAnInvalidJson");
139 final ToscaConversionException toscaConversionException = assertThrows(ToscaConversionException.class,
140 () -> attributeConverter.convert(attributeDefinition));
141 assertEquals("Failed to parse json value", toscaConversionException.getMessage());
144 private void assertAttribute(final AttributeDefinition expectedAttributeDefinition, final ToscaAttribute actualToscaAttribute) {
145 assertAttribute(expectedAttributeDefinition, expectedAttributeDefinition.get_default(), actualToscaAttribute);
148 private void assertAttribute(final AttributeDefinition expectedAttributeDefinition, final Object expectedDefault,
149 final ToscaAttribute actualToscaAttribute) {
150 assertEquals(expectedAttributeDefinition.getType(), actualToscaAttribute.getType());
151 assertEquals(expectedAttributeDefinition.getDescription(), actualToscaAttribute.getDescription());
152 assertEquals(expectedAttributeDefinition.getStatus(), actualToscaAttribute.getStatus());
153 if (expectedAttributeDefinition.getEntry_schema() == null) {
154 assertNull(actualToscaAttribute.getEntrySchema());
156 assertEquals(expectedAttributeDefinition.getEntry_schema().getType(),
157 actualToscaAttribute.getEntrySchema().getType());
159 expectedAttributeDefinition.getEntry_schema().getDescription(),
160 actualToscaAttribute.getEntrySchema().getDescription());
162 assertEquals(expectedDefault, actualToscaAttribute.getDefault());
165 private String parseToJsonString(final Object value) throws JsonProcessingException {
166 final ObjectMapper objectMapper = new ObjectMapper();
167 return objectMapper.writeValueAsString(value);