Improve logging for ResourceAssingmentUtils 55/107855/1
authorJozsef Csongvai <jozsef.csongvai@bell.ca>
Tue, 19 May 2020 17:33:49 +0000 (13:33 -0400)
committerDan Timoney <dtimoney@att.com>
Wed, 20 May 2020 17:58:46 +0000 (17:58 +0000)
Sort keys for generated resource param data logging

Issue-ID: CCSDK-2381
Signed-off-by: Jozsef Csongvai <jozsef.csongvai@bell.ca>
Change-Id: Iea0a88fbe915e41e399ced45d842a8ef14d052c1
(cherry picked from commit 79d6af1baefdafd0cef5d32aa87b509b76070ebc)

ms/blueprintsprocessor/functions/resource-resolution/src/main/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/utils/ResourceAssignmentUtils.kt
ms/blueprintsprocessor/functions/resource-resolution/src/test/kotlin/org/onap/ccsdk/cds/blueprintsprocessor/functions/resource/resolution/utils/ResourceAssignmentUtilsTest.kt

index 497b268..1be9649 100644 (file)
@@ -19,6 +19,7 @@ package org.onap.ccsdk.cds.blueprintsprocessor.functions.resource.resolution.uti
 
 import com.fasterxml.jackson.databind.JsonNode
 import com.fasterxml.jackson.databind.ObjectMapper
+import com.fasterxml.jackson.databind.SerializationFeature
 import com.fasterxml.jackson.databind.node.ArrayNode
 import com.fasterxml.jackson.databind.node.NullNode
 import com.fasterxml.jackson.databind.node.ObjectNode
@@ -181,6 +182,7 @@ class ResourceAssignmentUtils {
             val result: String
             try {
                 val mapper = ObjectMapper()
+                mapper.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true)
                 val root: ObjectNode = mapper.createObjectNode()
 
                 var containsLogProtected = false
@@ -196,7 +198,8 @@ class ResourceAssignmentUtils {
                         root.set<JsonNode>(rName, value)
                     }
                 }
-                result = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(root)
+                result = mapper.writerWithDefaultPrettyPrinter()
+                        .writeValueAsString(mapper.treeToValue(root, Object::class.java))
 
                 if (!containsLogProtected) {
                     logger.info("Generated Resource Param Data ($result)")
index 7746b5c..b4befc2 100644 (file)
@@ -131,17 +131,23 @@ class ResourceAssignmentUtilsTest {
     @Test
     fun `generateResourceDataForAssignments - positive test`() {
         // given a valid resource assignment
-        val validResourceAssignment = createResourceAssignmentForTest("valid_value")
+        val validResourceAssignment1 = createResourceAssignmentForTest("valid_value", "pnf-id")
+        val validResourceAssignment2 = createResourceAssignmentForTest("also_valid", "a1")
 
         // and a list containing that resource assignment
-        val resourceAssignmentList = listOf<ResourceAssignment>(validResourceAssignment)
+        val resourceAssignmentList = listOf<ResourceAssignment>(validResourceAssignment1, validResourceAssignment2)
 
         // when the values of the resources are evaluated
         val outcome = ResourceAssignmentUtils.generateResourceDataForAssignments(resourceAssignmentList)
 
         // then the assignment should produce a valid result
-        val expected = "{\n" + "  \"pnf-id\" : \"valid_value\"\n" + "}"
-        assertEquals(expected, outcome.replace("\r\n", "\n"), "unexpected outcome generated")
+        val expected = """
+            {
+              "a1" : "also_valid",
+              "pnf-id" : "valid_value"
+            }
+        """.trimIndent()
+        assertEquals(expected, outcome.trimIndent(), "unexpected outcome generated")
     }
 
     @Test
@@ -200,10 +206,10 @@ class ResourceAssignmentUtilsTest {
         """.replace("\n|\\s".toRegex(), ""), result)
     }
 
-    private fun createResourceAssignmentForTest(resourceValue: String?): ResourceAssignment {
+    private fun createResourceAssignmentForTest(resourceValue: String?, resourceName: String = "pnf-id"): ResourceAssignment {
         val valueForTest = if (resourceValue == null) null else TextNode(resourceValue)
         val resourceAssignmentForTest = ResourceAssignment().apply {
-            name = "pnf-id"
+            name = resourceName
             dictionaryName = "pnf-id"
             dictionarySource = "input"
             property = PropertyDefinition().apply {