UI support for default custom function names with get_input structure
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / csar / ToscaFunctionYamlParsingHandlerTest.java
1 /*
2  * -
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
9  *
10  *       http://www.apache.org/licenses/LICENSE-2.0
11  *
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.
17  *
18  *  SPDX-License-Identifier: Apache-2.0
19  *  ============LICENSE_END=========================================================
20  */
21
22 package org.openecomp.sdc.be.components.csar;
23
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;
28
29 import java.util.ArrayList;
30 import java.util.HashMap;
31 import java.util.List;
32 import java.util.Map;
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;
45
46 class ToscaFunctionYamlParsingHandlerTest {
47
48     final ToscaFunctionYamlParsingHandler toscaFunctionYamlParsingHandler = new ToscaFunctionYamlParsingHandler();
49
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());
60     }
61
62     @Test
63     void buildToscaFunctionBasedOnPropertyValue_NotAToscaFunctionTest() {
64         assertEquals(Optional.empty(), toscaFunctionYamlParsingHandler.buildToscaFunctionBasedOnPropertyValue(null));
65     }
66
67     @Test
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);
75     }
76
77     @Test
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);
81
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());
94     }
95
96     @Test
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);
100
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());
113     }
114
115     @Test
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);
119
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"));
136     }
137
138     @Test
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);
143
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"));
162     }
163
164     @Test
165     void buildToscaFunctionBasedOnPropertyValue_CustomFunctionGetInputTypeTest() {
166         setDefaultCustomToscaFunctionOnConfiguration();
167         final Map<String, Object> customValueMap = Map.of("$custom_function_get_input_type", "controller_actor");
168
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"));
188     }
189
190     @Test
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(), "")
196             )
197         );
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(), "")));
204     }
205
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);
216     }
217 }