Fix error handling valid yaml property values 04/129404/3
authorMichaelMorris <michael.morris@est.tech>
Thu, 26 May 2022 08:41:11 +0000 (09:41 +0100)
committerAndr� Schmid <andre.schmid@est.tech>
Fri, 27 May 2022 11:35:18 +0000 (11:35 +0000)
Signed-off-by: MichaelMorris <michael.morris@est.tech>
Issue-ID: SDC-4022
Change-Id: Ic30f29e350d47d29c00744271e1e81b08db3edb9

catalog-be/src/main/java/org/openecomp/sdc/be/tosca/PropertyConvertor.java
catalog-be/src/test/java/org/openecomp/sdc/be/tosca/PropertyConvertorTest.java

index 5d3fe1b..5bb3d11 100644 (file)
@@ -21,6 +21,7 @@ package org.openecomp.sdc.be.tosca;
 
 import com.google.gson.JsonElement;
 import com.google.gson.JsonObject;
+import com.google.gson.JsonParseException;
 import com.google.gson.JsonParser;
 import com.google.gson.stream.JsonReader;
 import fj.data.Either;
@@ -48,6 +49,7 @@ import org.openecomp.sdc.be.tosca.model.ToscaSchemaDefinition;
 import org.openecomp.sdc.common.log.wrappers.Logger;
 import org.openecomp.sdc.tosca.datatypes.ToscaFunctions;
 import org.springframework.stereotype.Service;
+import org.yaml.snakeyaml.Yaml;
 
 @Service
 public class PropertyConvertor {
@@ -176,6 +178,10 @@ public class PropertyConvertor {
                     .convertDataTypeToToscaObject(innerType, dataTypes, innerConverter, isScalar, jsonElement, preserveEmptyValue);
             }
             return convertedValue;
+        
+        } catch (JsonParseException e) {
+            log.trace("{} not parsable as JSON. Convert as YAML instead", value);
+            return  new Yaml().load(value);
         } catch (Exception e) {
             log.debug("convertToToscaValue failed to parse json value :", e);
             return null;
index 36c9eb8..cd756ce 100644 (file)
@@ -183,5 +183,18 @@ class PropertyConvertorTest {
             propertyConvertor.convertProperty(Collections.emptyMap(), property, PropertyConvertor.PropertyType.PROPERTY);
         assertEquals("/", toscaProperty.getDefaultp());
     }
+    
+    @Test
+    void convertPropertyWithYamlValue() {
+        final PropertyDefinition property = new PropertyDataDefinitionBuilder()
+            .setDefaultValue("{concat: [ get_input: service_name, '--', 'WirelessService']}")
+            .setType(ToscaPropertyType.STRING.getType())
+            .build();
+        final ToscaProperty toscaProperty =
+            propertyConvertor.convertProperty(Collections.emptyMap(), property, PropertyConvertor.PropertyType.PROPERTY);
+        assertTrue(toscaProperty.getDefaultp() instanceof Map);
+        assertTrue(((Map)toscaProperty.getDefaultp()).get("concat") instanceof List);
+        assertEquals(3, ((List)((Map)toscaProperty.getDefaultp()).get("concat")).size());
+    }
 
 }