summaryrefslogtreecommitdiffstats
path: root/cps-service/src/test
diff options
context:
space:
mode:
authorToine Siebelink <toine.siebelink@est.tech>2021-01-29 11:18:03 +0000
committerGerrit Code Review <gerrit@onap.org>2021-01-29 11:18:03 +0000
commitf470af59fa9148f6e5c3031a61ec64ee501d4ecd (patch)
tree9559571c02c1f5aec4281c152f1ea2f69cd535b9 /cps-service/src/test
parent4bcccd1a0b84f637c9383b31299ee9bd84f5f486 (diff)
parentc59254f9b7c604aa5f085e3f71971b6d67c70ba8 (diff)
Merge "Fix the datanode build logic (incorrect parsing of containers and mapped lists)"
Diffstat (limited to 'cps-service/src/test')
-rw-r--r--cps-service/src/test/groovy/org/onap/cps/model/DataNodeBuilderSpec.groovy53
-rw-r--r--cps-service/src/test/resources/test-tree.json28
-rw-r--r--cps-service/src/test/resources/test-tree.yang24
3 files changed, 94 insertions, 11 deletions
diff --git a/cps-service/src/test/groovy/org/onap/cps/model/DataNodeBuilderSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/model/DataNodeBuilderSpec.groovy
index 0dbde889a4..d881e77ade 100644
--- a/cps-service/src/test/groovy/org/onap/cps/model/DataNodeBuilderSpec.groovy
+++ b/cps-service/src/test/groovy/org/onap/cps/model/DataNodeBuilderSpec.groovy
@@ -1,6 +1,7 @@
package org.onap.cps.model
import org.onap.cps.TestUtils
+import org.onap.cps.spi.model.DataNode
import org.onap.cps.spi.model.DataNodeBuilder
import org.onap.cps.utils.YangUtils
import org.onap.cps.yang.YangTextSchemaSourceSetBuilder
@@ -8,22 +9,52 @@ import spock.lang.Specification
class DataNodeBuilderSpec extends Specification {
+ Map<String, Map<String, Object>> expectedLeavesByXpathMap = [
+ '/test-tree' : [],
+ '/test-tree/branch[@name=\'Left\']' : [name: 'Left'],
+ '/test-tree/branch[@name=\'Left\']/nest' : [name: 'Small', birds: ['Sparrow', 'Robin', 'Finch']],
+ '/test-tree/branch[@name=\'Right\']' : [name: 'Right'],
+ '/test-tree/branch[@name=\'Right\']/nest': [name: 'Big', birds: ['Owl', 'Raven', 'Crow']]
+ ]
+
def 'Converting Normalized Node (tree) to a DataNode (tree).'() {
given: 'a Yang module'
- def yangResourceNameToContent = TestUtils.getYangResourcesAsMap('bookstore.yang')
- def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent)getSchemaContext()
+ def yangResourceNameToContent = TestUtils.getYangResourcesAsMap('test-tree.yang')
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent) getSchemaContext()
and: 'a normalized node for that model'
- def jsonData = TestUtils.getResourceFileContent('bookstore.json')
+ def jsonData = TestUtils.getResourceFileContent('test-tree.json')
def normalizedNode = YangUtils.parseJsonData(jsonData, schemaContext)
when: 'the normalized node is converted to a DataNode (tree)'
def result = new DataNodeBuilder().withNormalizedNodeTree(normalizedNode).build()
- then: 'the system creates a (root) fragment without a parent and 2 children (categories)'
- result.childDataNodes.size() == 2
- and: 'each child (category) has the root fragment (result) as parent and in turn as 1 child (a list of books)'
- result.childDataNodes.each { it.childDataNodes.size() == 1 }
- and: 'the fragments have the correct xpaths'
- assert result.xpath == '/bookstore'
- assert result.childDataNodes.collect { it.xpath }
- .containsAll(["/bookstore/categories[@code='01']", "/bookstore/categories[@code='02']"])
+ def mappedResult = treeToFlatMapByXpath(new HashMap<>(), result)
+ then: '5 DataNode objects with unique xpath were created in total'
+ mappedResult.size() == 5
+ and: 'all expected xpaths were built'
+ mappedResult.keySet().containsAll(expectedLeavesByXpathMap.keySet())
+ and: 'each data node contains the expected attributes'
+ mappedResult.each {
+ xpath, dataNode -> assertLeavesMaps(dataNode.getLeaves(), expectedLeavesByXpathMap[xpath])
+ }
+ }
+
+ def static assertLeavesMaps(actualLeavesMap, expectedLeavesMap) {
+ expectedLeavesMap.each { key, value ->
+ {
+ def actualValue = actualLeavesMap[key]
+ if (value instanceof Collection<?> && actualValue instanceof Collection<?>) {
+ assert value.size() == actualValue.size()
+ assert value.containsAll(actualValue)
+ } else {
+ assert value == actualValue
+ }
+ }
+ }
+ }
+
+ def treeToFlatMapByXpath(Map<String, DataNode> flatMap, DataNode dataNodeTree) {
+ flatMap.put(dataNodeTree.getXpath(), dataNodeTree)
+ dataNodeTree.getChildDataNodes()
+ .forEach(childDataNode -> treeToFlatMapByXpath(flatMap, childDataNode))
+ return flatMap
}
}
diff --git a/cps-service/src/test/resources/test-tree.json b/cps-service/src/test/resources/test-tree.json
new file mode 100644
index 0000000000..bc9cbd7cea
--- /dev/null
+++ b/cps-service/src/test/resources/test-tree.json
@@ -0,0 +1,28 @@
+{
+ "test-tree": {
+ "branch": [
+ {
+ "name": "Left",
+ "nest": {
+ "name": "Small",
+ "birds": [
+ "Sparrow",
+ "Robin",
+ "Finch"
+ ]
+ }
+ },
+ {
+ "name": "Right",
+ "nest": {
+ "name": "Big",
+ "birds": [
+ "Owl",
+ "Raven",
+ "Crow"
+ ]
+ }
+ }
+ ]
+ }
+} \ No newline at end of file
diff --git a/cps-service/src/test/resources/test-tree.yang b/cps-service/src/test/resources/test-tree.yang
new file mode 100644
index 0000000000..faba8a11d4
--- /dev/null
+++ b/cps-service/src/test/resources/test-tree.yang
@@ -0,0 +1,24 @@
+module test-tree {
+ yang-version 1.1;
+
+ namespace "org:onap:cps:test:test-tree";
+ prefix tree;
+ revision "2020-02-02";
+
+ container test-tree {
+ list branch {
+ key "name";
+ leaf name {
+ type string;
+ }
+ container nest {
+ leaf name {
+ type string;
+ }
+ leaf-list birds {
+ type string;
+ }
+ }
+ }
+ }
+}