3 * ============LICENSE_START=======================================================
4 * Copyright (C) 2022 Nordix Foundation.
5 * ================================================================================
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
18 * SPDX-License-Identifier: Apache-2.0
19 * ============LICENSE_END=========================================================
22 package org.openecomp.sdc.be.components.csar;
24 import static org.junit.jupiter.api.Assertions.assertEquals;
25 import static org.junit.jupiter.api.Assertions.assertFalse;
26 import static org.junit.jupiter.api.Assertions.assertNull;
27 import static org.junit.jupiter.api.Assertions.assertTrue;
29 import java.util.ArrayList;
30 import java.util.HashMap;
31 import java.util.List;
33 import java.util.Optional;
34 import org.junit.jupiter.api.Test;
35 import org.openecomp.sdc.be.config.Configuration;
36 import org.openecomp.sdc.be.config.ConfigurationManager;
37 import org.openecomp.sdc.be.datatypes.elements.ToscaConcatFunction;
38 import org.openecomp.sdc.be.datatypes.elements.ToscaCustomFunction;
39 import org.openecomp.sdc.be.datatypes.elements.ToscaFunction;
40 import org.openecomp.sdc.be.datatypes.elements.ToscaFunctionType;
41 import org.openecomp.sdc.be.datatypes.elements.ToscaGetFunctionDataDefinition;
42 import org.openecomp.sdc.be.datatypes.elements.ToscaStringParameter;
43 import org.openecomp.sdc.be.datatypes.enums.PropertySource;
44 import org.openecomp.sdc.be.datatypes.tosca.ToscaGetFunctionType;
46 class ToscaFunctionYamlParsingHandlerTest {
48 final ToscaFunctionYamlParsingHandler toscaFunctionYamlParsingHandler = new ToscaFunctionYamlParsingHandler();
50 private static void assertGetInput(final ToscaFunction actualGetInputFunction, final List<String> expectedGetInputParameters) {
51 assertEquals(ToscaFunctionType.GET_INPUT, actualGetInputFunction.getType());
52 assertTrue(actualGetInputFunction instanceof ToscaGetFunctionDataDefinition);
53 final ToscaGetFunctionDataDefinition toscaGetFunction = (ToscaGetFunctionDataDefinition) actualGetInputFunction;
54 assertEquals(ToscaGetFunctionType.GET_INPUT, toscaGetFunction.getFunctionType());
55 assertEquals(expectedGetInputParameters.get(expectedGetInputParameters.size() - 1), toscaGetFunction.getPropertyName());
56 assertEquals(PropertySource.SELF, toscaGetFunction.getPropertySource());
57 assertEquals(expectedGetInputParameters, toscaGetFunction.getPropertyPathFromSource());
58 assertNull(toscaGetFunction.getPropertyUniqueId());
59 assertNull(toscaGetFunction.getSourceName());
63 void buildToscaFunctionBasedOnPropertyValue_NotAToscaFunctionTest() {
64 assertEquals(Optional.empty(), toscaFunctionYamlParsingHandler.buildToscaFunctionBasedOnPropertyValue(null));
68 void buildToscaFunctionBasedOnPropertyValue_GetInputTest() {
69 final List<String> getInputParameters = List.of("input", "subProperty");
70 final Map<String, Object> getInput = Map.of(ToscaFunctionType.GET_INPUT.getName(), getInputParameters);
71 final Optional<ToscaFunction> actualToscaFunctionOpt = toscaFunctionYamlParsingHandler.buildToscaFunctionBasedOnPropertyValue(getInput);
72 assertTrue(actualToscaFunctionOpt.isPresent());
73 final ToscaFunction actualToscaFunction = actualToscaFunctionOpt.get();
74 assertGetInput(actualToscaFunction, getInputParameters);
78 void buildToscaFunctionBasedOnPropertyValue_GetPropertyTest() {
79 final List<String> getPropertyValue = List.of(PropertySource.SELF.getName(), "aProperty", "aSubProperty");
80 final Map<String, Object> getProperty = Map.of(ToscaFunctionType.GET_PROPERTY.getName(), getPropertyValue);
82 final Optional<ToscaFunction> actualToscaFunctionOpt = toscaFunctionYamlParsingHandler.buildToscaFunctionBasedOnPropertyValue(getProperty);
83 assertTrue(actualToscaFunctionOpt.isPresent());
84 final ToscaFunction actualToscaFunction = actualToscaFunctionOpt.get();
85 assertEquals(ToscaFunctionType.GET_PROPERTY, actualToscaFunction.getType());
86 assertTrue(actualToscaFunction instanceof ToscaGetFunctionDataDefinition);
87 final ToscaGetFunctionDataDefinition toscaGetFunction = (ToscaGetFunctionDataDefinition) actualToscaFunction;
88 assertEquals(ToscaGetFunctionType.GET_PROPERTY, toscaGetFunction.getFunctionType());
89 assertEquals("aSubProperty", toscaGetFunction.getPropertyName());
90 assertEquals(PropertySource.SELF, toscaGetFunction.getPropertySource());
91 assertEquals(getPropertyValue.subList(1, getPropertyValue.size()), toscaGetFunction.getPropertyPathFromSource());
92 assertNull(toscaGetFunction.getPropertyUniqueId());
93 assertNull(toscaGetFunction.getSourceName());
97 void buildToscaFunctionBasedOnPropertyValue_GetAttributeTest() {
98 final List<String> getPropertyValue = List.of(PropertySource.INSTANCE.getName(), "anAttribute", "aSubAttribute");
99 final Map<String, Object> getProperty = Map.of(ToscaFunctionType.GET_ATTRIBUTE.getName(), getPropertyValue);
101 final Optional<ToscaFunction> actualToscaFunctionOpt = toscaFunctionYamlParsingHandler.buildToscaFunctionBasedOnPropertyValue(getProperty);
102 assertTrue(actualToscaFunctionOpt.isPresent());
103 final ToscaFunction actualToscaFunction = actualToscaFunctionOpt.get();
104 assertEquals(ToscaFunctionType.GET_ATTRIBUTE, actualToscaFunction.getType());
105 assertTrue(actualToscaFunction instanceof ToscaGetFunctionDataDefinition);
106 final ToscaGetFunctionDataDefinition toscaGetFunction = (ToscaGetFunctionDataDefinition) actualToscaFunction;
107 assertEquals(ToscaGetFunctionType.GET_ATTRIBUTE, toscaGetFunction.getFunctionType());
108 assertEquals("aSubAttribute", toscaGetFunction.getPropertyName());
109 assertEquals(PropertySource.INSTANCE, toscaGetFunction.getPropertySource());
110 assertEquals(getPropertyValue.subList(1, getPropertyValue.size()), toscaGetFunction.getPropertyPathFromSource());
111 assertEquals(getPropertyValue.get(0), toscaGetFunction.getSourceName());
112 assertNull(toscaGetFunction.getPropertyUniqueId());
116 void buildToscaFunctionBasedOnPropertyValue_ConcatTest() {
117 final List<Object> concatValue = List.of("string1", "-", Map.of(ToscaFunctionType.GET_INPUT.getName(), "inputName"));
118 final Map<String, Object> concatValueMap = Map.of(ToscaFunctionType.CONCAT.getName(), concatValue);
120 final Optional<ToscaFunction> actualToscaFunctionOpt = toscaFunctionYamlParsingHandler.buildToscaFunctionBasedOnPropertyValue(concatValueMap);
121 assertTrue(actualToscaFunctionOpt.isPresent());
122 final ToscaFunction actualToscaFunction = actualToscaFunctionOpt.get();
123 assertEquals(ToscaFunctionType.CONCAT, actualToscaFunction.getType());
124 assertTrue(actualToscaFunction instanceof ToscaConcatFunction);
125 final ToscaConcatFunction toscaConcatFunction = (ToscaConcatFunction) actualToscaFunction;
126 assertEquals(3, toscaConcatFunction.getParameters().size());
127 assertTrue(toscaConcatFunction.getParameters().get(0) instanceof ToscaStringParameter);
128 final ToscaStringParameter parameter1 = (ToscaStringParameter) toscaConcatFunction.getParameters().get(0);
129 assertEquals("string1", parameter1.getValue());
130 assertTrue(toscaConcatFunction.getParameters().get(1) instanceof ToscaStringParameter);
131 final ToscaStringParameter parameter2 = (ToscaStringParameter) toscaConcatFunction.getParameters().get(1);
132 assertEquals("-", parameter2.getValue());
133 assertTrue(toscaConcatFunction.getParameters().get(2) instanceof ToscaGetFunctionDataDefinition);
134 final ToscaGetFunctionDataDefinition getFunction = (ToscaGetFunctionDataDefinition) toscaConcatFunction.getParameters().get(2);
135 assertGetInput(getFunction, List.of("inputName"));
139 void buildToscaFunctionBasedOnPropertyValue_CustomTest() {
140 setDefaultCustomToscaFunctionOnConfiguration();
141 final List<Object> customValue = List.of("string1", "-", Map.of(ToscaFunctionType.GET_INPUT.getName(), "inputName"));
142 final Map<String, Object> customValueMap = Map.of("$customFuncName", customValue);
144 final Optional<ToscaFunction> actualToscaFunctionOpt = toscaFunctionYamlParsingHandler.buildToscaFunctionBasedOnPropertyValue(customValueMap);
145 assertTrue(actualToscaFunctionOpt.isPresent());
146 final ToscaFunction actualToscaFunction = actualToscaFunctionOpt.get();
147 assertEquals(ToscaFunctionType.CUSTOM, actualToscaFunction.getType());
148 assertTrue(actualToscaFunction instanceof ToscaCustomFunction);
149 final ToscaCustomFunction toscaCustomFunction = (ToscaCustomFunction) actualToscaFunction;
150 final String functionName = toscaCustomFunction.getName();
151 assertEquals("customFuncName", functionName);
152 assertEquals(3, toscaCustomFunction.getParameters().size());
153 assertTrue(toscaCustomFunction.getParameters().get(0) instanceof ToscaStringParameter);
154 final ToscaStringParameter parameter1 = (ToscaStringParameter) toscaCustomFunction.getParameters().get(0);
155 assertEquals("string1", parameter1.getValue());
156 assertTrue(toscaCustomFunction.getParameters().get(1) instanceof ToscaStringParameter);
157 final ToscaStringParameter parameter2 = (ToscaStringParameter) toscaCustomFunction.getParameters().get(1);
158 assertEquals("-", parameter2.getValue());
159 assertTrue(toscaCustomFunction.getParameters().get(2) instanceof ToscaGetFunctionDataDefinition);
160 final ToscaGetFunctionDataDefinition getFunction = (ToscaGetFunctionDataDefinition) toscaCustomFunction.getParameters().get(2);
161 assertGetInput(getFunction, List.of("inputName"));
165 void buildToscaFunctionBasedOnPropertyValue_CustomFunctionGetInputTypeTest() {
166 setDefaultCustomToscaFunctionOnConfiguration();
167 final Map<String, Object> customValueMap = Map.of("$custom_function_get_input_type", "controller_actor");
169 final Optional<ToscaFunction> actualToscaFunctionOpt = toscaFunctionYamlParsingHandler.buildToscaFunctionBasedOnPropertyValue(customValueMap);
170 assertTrue(actualToscaFunctionOpt.isPresent());
171 final ToscaFunction actualToscaFunction = actualToscaFunctionOpt.get();
172 assertEquals(ToscaFunctionType.CUSTOM, actualToscaFunction.getType());
173 assertTrue(actualToscaFunction instanceof ToscaCustomFunction);
174 final ToscaCustomFunction toscaCustomFunction = (ToscaCustomFunction) actualToscaFunction;
175 final String functionName = toscaCustomFunction.getName();
176 assertEquals("custom_function_get_input_type", functionName);
177 assertEquals(1, toscaCustomFunction.getParameters().size());
178 assertTrue(toscaCustomFunction.getParameters().get(0) instanceof ToscaGetFunctionDataDefinition);
179 final ToscaGetFunctionDataDefinition parameter1 = (ToscaGetFunctionDataDefinition) toscaCustomFunction.getParameters().get(0);
180 assertGetInput(parameter1, List.of("controller_actor"));
181 // assertEquals("string1", parameter1.getValue());
182 // assertTrue(toscaCustomFunction.getParameters().get(1) instanceof ToscaStringParameter);
183 // final ToscaStringParameter parameter2 = (ToscaStringParameter) toscaCustomFunction.getParameters().get(1);
184 // assertEquals("-", parameter2.getValue());
185 // assertTrue(toscaCustomFunction.getParameters().get(2) instanceof ToscaGetFunctionDataDefinition);
186 // final ToscaGetFunctionDataDefinition getFunction = (ToscaGetFunctionDataDefinition) toscaCustomFunction.getParameters().get(2);
187 // assertGetInput(getFunction, List.of("inputName"));
191 void isPropertyValueToscaFunctionTest() {
192 assertFalse(toscaFunctionYamlParsingHandler.isPropertyValueToscaFunction(ToscaFunctionType.GET_INPUT.getName()));
193 assertFalse(toscaFunctionYamlParsingHandler.isPropertyValueToscaFunction(new HashMap<>()));
194 assertFalse(toscaFunctionYamlParsingHandler.isPropertyValueToscaFunction(
195 Map.of(ToscaFunctionType.GET_ATTRIBUTE.getName(), "", ToscaFunctionType.GET_INPUT.getName(), "")
198 assertTrue(toscaFunctionYamlParsingHandler.isPropertyValueToscaFunction(Map.of(ToscaFunctionType.GET_ATTRIBUTE.getName(), "")));
199 assertTrue(toscaFunctionYamlParsingHandler.isPropertyValueToscaFunction(Map.of(ToscaFunctionType.GET_INPUT.getName(), "")));
200 assertTrue(toscaFunctionYamlParsingHandler.isPropertyValueToscaFunction(Map.of(ToscaFunctionType.GET_PROPERTY.getName(), "")));
201 assertTrue(toscaFunctionYamlParsingHandler.isPropertyValueToscaFunction(Map.of(ToscaFunctionType.CONCAT.getName(), "")));
202 assertFalse(toscaFunctionYamlParsingHandler.isPropertyValueToscaFunction(Map.of(ToscaFunctionType.YAML.getName(), "")));
203 assertFalse(toscaFunctionYamlParsingHandler.isPropertyValueToscaFunction(Map.of(ToscaFunctionType.STRING.getName(), "")));
206 private void setDefaultCustomToscaFunctionOnConfiguration() {
207 final var configurationManager = new ConfigurationManager();
208 final var configuration = new Configuration();
209 List<Configuration.CustomToscaFunction> defaultCustomToscaFunctions = new ArrayList<>();
210 Configuration.CustomToscaFunction defaultCustomType = new Configuration.CustomToscaFunction();
211 defaultCustomType.setName("custom_function_get_input_type");
212 defaultCustomType.setType("get_input");
213 defaultCustomToscaFunctions.add(defaultCustomType);
214 configuration.setDefaultCustomToscaFunctions(defaultCustomToscaFunctions);
215 configurationManager.setConfiguration(configuration);