/*
* ============LICENSE_START=======================================================
* Copyright (C) 2021 Pantheon.tech
+ * Modifications Copyright (C) 2021 Nordix Foundation.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
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']]
+ '/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']],
+ '/test-tree/fruit[@color=\'Green\' and @name=\'Apple\']': [color: 'Green', name: 'Apple']
]
String[] networkTopologyModelRfc8345 = [
def result = new DataNodeBuilder().withNormalizedNodeTree(normalizedNode).build()
def mappedResult = TestUtils.getFlattenMapByXpath(result)
then: '5 DataNode objects with unique xpath were created in total'
- mappedResult.size() == 5
+ mappedResult.size() == 6
and: 'all expected xpaths were built'
mappedResult.keySet().containsAll(expectedLeavesByXpathMap.keySet())
and: 'each data node contains the expected attributes'
mappedResult.keySet()
.containsAll(['/test-tree/branch[@name=\'Branch\']', '/test-tree/branch[@name=\'Branch\']/nest'])
}
+
def 'Converting NormalizedNode (tree) to a DataNode (tree) -- augmentation case.'() {
given: 'a schema context for expected model'
def yangResourceNameToContent = TestUtils.getYangResourcesAsMap(networkTopologyModelRfc8345)
assert result.leaves['source-tp'] == '1-2-1'
}
+ def 'Converting NormalizedNode into DataNode collection: #scenario.'() {
+ given: 'a schema context for expected model'
+ def yangResourceNameToContent = TestUtils.getYangResourcesAsMap('test-tree.yang')
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent) getSchemaContext()
+ and: 'parent node xpath referencing parent of list element'
+ def parentNodeXpath = "/test-tree"
+ and: 'the json data fragment (list element) parsed into normalized node object'
+ def normalizedNode = YangUtils.parseJsonData(jsonData, schemaContext, parentNodeXpath)
+ when: 'the normalized node is converted to a data node collection'
+ def result = new DataNodeBuilder().withNormalizedNodeTree(normalizedNode)
+ .withParentNodeXpath(parentNodeXpath).buildCollection()
+ def resultXpaths = result.collect { it.getXpath() }
+ then: 'the resulting collection contains data nodes for expected list elements'
+ assert resultXpaths.size() == expectedSize
+ assert resultXpaths.containsAll(expectedXpaths)
+ where: 'following parameters are used'
+ scenario | jsonData | expectedSize | expectedXpaths
+ 'single entry' | '{"branch": [{"name": "One"}]}' | 1 | ['/test-tree/branch[@name=\'One\']']
+ 'multiple entries' | '{"branch": [{"name": "One"}, {"name": "Two"}]}' | 2 | ['/test-tree/branch[@name=\'One\']', '/test-tree/branch[@name=\'Two\']']
+ }
+
def static assertLeavesMaps(actualLeavesMap, expectedLeavesMap) {
expectedLeavesMap.each { key, value ->
{