Support a custom yaml value in tosca function
[sdc.git] / common-be / src / test / java / org / openecomp / sdc / be / datatypes / elements / ToscaFunctionJsonDeserializerTest.java
index e11b661..b17a3dc 100644 (file)
 
 package org.openecomp.sdc.be.datatypes.elements;
 
+import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.exc.ValueInstantiationException;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
 import java.util.List;
+import java.util.Map;
 import org.junit.jupiter.api.Test;
 import org.openecomp.sdc.be.datatypes.enums.PropertySource;
 import org.openecomp.sdc.be.datatypes.tosca.ToscaGetFunctionType;
+import org.yaml.snakeyaml.Yaml;
 
 class ToscaFunctionJsonDeserializerTest {
 
+    private static final Path TEST_RESOURCES_PATH = Path.of("src/test/resources/toscaFunctionJsonDeserializer");
+
     @Test
-    void testGetInputToscaFunction() throws JsonProcessingException {
-        final String toscaGetInputFunction = "{\n"
-            + "            \"propertyUniqueId\": \"e57525d7-2115-4934-9ba4-9cebfa22bad2.nf_naming\",\n"
-            + "            \"type\": \"GET_INPUT\",\n"
-            + "            \"propertySource\": \"SELF\",\n"
-            + "            \"propertyName\": \"instance_name\",\n"
-            + "            \"sourceName\": \"ciResVFc26a0b30ec20\",\n"
-            + "            \"sourceUniqueId\": \"aee643c9-6c8e-4a24-af7a-a9aff5c072c0\",\n"
-            + "            \"propertyPathFromSource\": [\n"
-            + "                \"nf_naming\",\n"
-            + "                \"instance_name\"\n"
-            + "            ]\n"
-            + "        }";
-        ToscaFunction toscaFunction = parseToscaFunction(toscaGetInputFunction);
+    void testGetInputToscaFunction() throws IOException {
+        //given
+        final String toscaGetInputFunction = Files.readString(TEST_RESOURCES_PATH.resolve("getInput.json"));
+        //when
+        final ToscaFunction toscaFunction = parseToscaFunction(toscaGetInputFunction);
+        //then
         assertTrue(toscaFunction instanceof ToscaGetFunctionDataDefinition);
         final ToscaGetFunctionDataDefinition toscaGetFunction = (ToscaGetFunctionDataDefinition) toscaFunction;
         assertEquals(ToscaFunctionType.GET_INPUT, toscaGetFunction.getType());
@@ -63,20 +64,12 @@ class ToscaFunctionJsonDeserializerTest {
     }
 
     @Test
-    void testGetInputToscaFunctionLegacyConversion() throws JsonProcessingException {
-        final String toscaGetInputFunction = "{\n"
-            + "            \"propertyUniqueId\": \"e57525d7-2115-4934-9ba4-9cebfa22bad2.nf_naming\",\n"
-            + "            \"functionType\": \"GET_INPUT\",\n"
-            + "            \"propertySource\": \"SELF\",\n"
-            + "            \"propertyName\": \"instance_name\",\n"
-            + "            \"sourceName\": \"ciResVFc26a0b30ec20\",\n"
-            + "            \"sourceUniqueId\": \"aee643c9-6c8e-4a24-af7a-a9aff5c072c0\",\n"
-            + "            \"propertyPathFromSource\": [\n"
-            + "                \"nf_naming\",\n"
-            + "                \"instance_name\"\n"
-            + "            ]\n"
-            + "        }";
-        ToscaFunction toscaFunction = parseToscaFunction(toscaGetInputFunction);
+    void testGetInputToscaFunctionLegacyConversion() throws IOException {
+        //given
+        final String toscaGetInputFunction = Files.readString(TEST_RESOURCES_PATH.resolve("getInputLegacy.json"));
+        //when
+        final ToscaFunction toscaFunction = parseToscaFunction(toscaGetInputFunction);
+        //then
         assertTrue(toscaFunction instanceof ToscaGetFunctionDataDefinition);
         final ToscaGetFunctionDataDefinition toscaGetFunction = (ToscaGetFunctionDataDefinition) toscaFunction;
         assertEquals(ToscaFunctionType.GET_INPUT, toscaGetFunction.getType());
@@ -84,70 +77,66 @@ class ToscaFunctionJsonDeserializerTest {
     }
 
     @Test
-    void testNoFunctionTypeProvided() {
-        final String toscaGetInputFunction = "{\n"
-            + "            \"propertyUniqueId\": \"e57525d7-2115-4934-9ba4-9cebfa22bad2.nf_naming\",\n"
-            + "            \"propertySource\": \"SELF\",\n"
-            + "            \"propertyName\": \"instance_name\",\n"
-            + "            \"sourceName\": \"ciResVFc26a0b30ec20\",\n"
-            + "            \"sourceUniqueId\": \"aee643c9-6c8e-4a24-af7a-a9aff5c072c0\",\n"
-            + "            \"propertyPathFromSource\": [\n"
-            + "                \"nf_naming\",\n"
-            + "                \"instance_name\"\n"
-            + "            ]\n"
-            + "        }";
+    void testNoFunctionTypeProvided() throws IOException {
+        //given
+        final String toscaGetInputFunction = Files.readString(TEST_RESOURCES_PATH.resolve("getFunctionMissingType.json"));
+        //when/then
         final ValueInstantiationException actualException =
             assertThrows(ValueInstantiationException.class, () -> parseToscaFunction(toscaGetInputFunction));
         assertTrue(actualException.getMessage().contains("Attribute type not provided"));
     }
 
     @Test
-    void testConcatToscaFunction() throws JsonProcessingException {
-        final String toscaGetInputFunction = "{\n"
-            + "  \"type\": \"CONCAT\",\n"
-            + "  \"parameters\": [\n"
-            + "    {\n"
-            + "      \"propertyUniqueId\": \"e57525d7-2115-4934-9ba4-9cebfa22bad2.nf_naming\",\n"
-            + "      \"type\": \"GET_INPUT\",\n"
-            + "      \"propertySource\": \"SELF\",\n"
-            + "      \"propertyName\": \"instance_name\",\n"
-            + "      \"sourceName\": \"ciResVFc26a0b30ec20\",\n"
-            + "      \"sourceUniqueId\": \"aee643c9-6c8e-4a24-af7a-a9aff5c072c0\",\n"
-            + "      \"propertyPathFromSource\": [\n"
-            + "        \"nf_naming\",\n"
-            + "        \"instance_name\"\n"
-            + "      ]\n"
-            + "    }, {\n"
-            + "      \"type\": \"STRING\",\n"
-            + "      \"value\": \"my string\"\n"
-            + "    },\n"
-            + "    {\n"
-            + "      \"type\": \"CONCAT\",\n"
-            + "      \"parameters\": [\n"
-            + "        {\n"
-            + "          \"type\": \"STRING\",\n"
-            + "          \"value\": \"string1\"\n"
-            + "        },\n"
-            + "        {\n"
-            + "          \"type\": \"STRING\",\n"
-            + "          \"value\": \"string2\"\n"
-            + "        }\n"
-            + "      ]\n"
-            + "    }\n"
-            + "  ]\n"
-            + "}";
-        ToscaFunction toscaFunction = parseToscaFunction(toscaGetInputFunction);
+    void testConcatToscaFunction() throws IOException {
+        //given
+        final String toscaConcatFunction = Files.readString(TEST_RESOURCES_PATH.resolve("concatFunction.json"));
+        //when
+        final ToscaFunction toscaFunction = parseToscaFunction(toscaConcatFunction);
+        //then
         assertTrue(toscaFunction instanceof ToscaConcatFunction);
+        final Object yamlObject = new Yaml().load(toscaFunction.getValue());
+        assertTrue(yamlObject instanceof Map);
+        final Map<String, Object> yamlMap = (Map<String, Object>) yamlObject;
+        final Object concatFunctionObj = yamlMap.get(ToscaFunctionType.CONCAT.getName());
+        assertNotNull(concatFunctionObj);
+        assertTrue(concatFunctionObj instanceof List);
+        final List<Object> concatFunctionParameters = (List<Object>) concatFunctionObj;
+        assertEquals(3, concatFunctionParameters.size(), "Expecting three parameters");
+        assertTrue(concatFunctionParameters.get(0) instanceof Map);
+        final Map<String, Object> parameter1Map = (Map<String, Object>) concatFunctionParameters.get(0);
+        assertNotNull(parameter1Map.get(ToscaFunctionType.GET_INPUT.getName()));
+        assertTrue(parameter1Map.get(ToscaFunctionType.GET_INPUT.getName()) instanceof List);
+        List<String> getInputParameters = (List<String>) parameter1Map.get(ToscaFunctionType.GET_INPUT.getName());
+        assertEquals(2, getInputParameters.size(), "Expecting two parameters in the get_input function");
+        assertEquals("nf_naming", getInputParameters.get(0));
+        assertEquals("instance_name", getInputParameters.get(1));
+
+        assertEquals("my string", concatFunctionParameters.get(1));
+
+        assertTrue(concatFunctionParameters.get(2) instanceof Map);
+        final Map<String, Object> parameter2Map = (Map<String, Object>) concatFunctionParameters.get(2);
+        assertNotNull(parameter2Map.get(ToscaFunctionType.CONCAT.getName()));
+        assertTrue(parameter2Map.get(ToscaFunctionType.CONCAT.getName()) instanceof List);
+        List<Object> concatParameters = (List<Object>) parameter2Map.get(ToscaFunctionType.CONCAT.getName());
+        assertEquals(3, concatParameters.size(), "Expecting two parameters in the sub concat function");
+        assertEquals("string1", concatParameters.get(0));
+        assertEquals("string2", concatParameters.get(1));
+        assertTrue(concatParameters.get(2) instanceof Map);
+        Map<String, Object> yamlFunctionValueMap = (Map<String, Object>) concatParameters.get(2);
+        assertTrue(yamlFunctionValueMap.get("myList") instanceof List);
+        assertTrue(yamlFunctionValueMap.get("get_something") instanceof List);
+        assertTrue(yamlFunctionValueMap.get("string") instanceof String);
     }
 
     @Test
-    void testYamlFunction() throws JsonProcessingException {
-        String yamlFunction = "{\n"
-            + "  \"type\": \"YAML\",\n"
-            + "  \"value\": \"tosca_definitions_version: tosca_simple_yaml_1_0_0\\nnode_types: \\n  tosca.nodes.Compute:\\n    derived_from: tosca.nodes.Root\\n    attributes:\\n      private_address:\\n        type: string\\n      public_address:\\n        type: string\\n      networks:\\n        type: map\\n        entry_schema:\\n          type: tosca.datatypes.network.NetworkInfo\\n      ports:\\n        type: map\\n        entry_schema:\\n          type: tosca.datatypes.network.PortInfo\\n    requirements:\\n      - local_storage: \\n          capability: tosca.capabilities.Attachment\\n          node: tosca.nodes.BlockStorage\\n          relationship: tosca.relationships.AttachesTo\\n          occurrences: [0, UNBOUNDED]  \\n    capabilities:\\n      host: \\n        type: tosca.capabilities.Container\\n        valid_source_types: [tosca.nodes.SoftwareComponent] \\n      endpoint :\\n        type: tosca.capabilities.Endpoint.Admin \\n      os: \\n        type: tosca.capabilities.OperatingSystem\\n      scalable:\\n        type: tosca.capabilities.Scalable\\n      binding:\\n        type: tosca.capabilities.network.Bindable\\n\"\n"
-            + "}";
-        ToscaFunction toscaFunction = parseToscaFunction(yamlFunction);
+    void testYamlFunction() throws IOException {
+        //given
+        final String yamlFunction = Files.readString(TEST_RESOURCES_PATH.resolve("yamlFunction.json"));
+        //when
+        final ToscaFunction toscaFunction = parseToscaFunction(yamlFunction);
+        //then
         assertTrue(toscaFunction instanceof CustomYamlFunction);
+        assertDoesNotThrow(() -> new Yaml().load(toscaFunction.getValue()));
     }
 
     private ToscaFunction parseToscaFunction(final String toscaFunctionJson) throws JsonProcessingException {