diff options
author | 2021-04-02 12:41:14 +0300 | |
---|---|---|
committer | 2021-04-07 09:17:23 +0000 | |
commit | 26effb23f559df0256327b8d37c865e023a41292 (patch) | |
tree | 14f4a596e0e5d6602d183a741d9de5911b126bbe /cps-service/src/test/groovy/org/onap | |
parent | d138529fe66f39b17047091d7e54117845ba9b50 (diff) |
Fix xpath building for data nodes addressing YANG augmentation
Issue-ID: CPS-316
Change-Id: I8aa0960c2a6af2b8fe5bc2fb90efe36baee7a881
Signed-off-by: Ruslan Kashapov <ruslan.kashapov@pantheon.tech>
Diffstat (limited to 'cps-service/src/test/groovy/org/onap')
-rwxr-xr-x | cps-service/src/test/groovy/org/onap/cps/api/impl/E2ENetworkSliceSpec.groovy | 10 | ||||
-rw-r--r-- | cps-service/src/test/groovy/org/onap/cps/model/DataNodeBuilderSpec.groovy | 59 |
2 files changed, 65 insertions, 4 deletions
diff --git a/cps-service/src/test/groovy/org/onap/cps/api/impl/E2ENetworkSliceSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/api/impl/E2ENetworkSliceSpec.groovy index a24bd0af5..a09166df1 100755 --- a/cps-service/src/test/groovy/org/onap/cps/api/impl/E2ENetworkSliceSpec.groovy +++ b/cps-service/src/test/groovy/org/onap/cps/api/impl/E2ENetworkSliceSpec.groovy @@ -52,7 +52,11 @@ class E2ENetworkSliceSpec extends Specification { def 'E2E model can be parsed by CPS.'() {
given: 'Valid yang resource as name-to-content map'
- def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap('e2e/basic/ietf-inet-types.yang','e2e/basic/ietf-yang-types.yang','e2e/basic/ran-network2020-08-06.yang')
+ def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap(
+ 'ietf/ietf-inet-types@2013-07-15.yang',
+ 'ietf/ietf-yang-types@2013-07-15.yang',
+ 'e2e/basic/ran-network2020-08-06.yang'
+ )
when: 'Create schema set method is invoked'
cpsModuleServiceImpl.createSchemaSet(dataspaceName, schemaSetName, yangResourcesNameToContentMap)
then: 'Parameters are validated and processing is delegated to persistence service'
@@ -144,8 +148,8 @@ class E2ENetworkSliceSpec extends Specification { def 'E2E RAN Schema Model.'(){
given: 'yang resources'
def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap(
- 'e2e/basic/ietf-inet-types.yang',
- 'e2e/basic/ietf-yang-types.yang',
+ 'ietf/ietf-inet-types@2013-07-15.yang',
+ 'ietf/ietf-yang-types@2013-07-15.yang',
'e2e/basic/cps-ran-schema-model@2021-01-28.yang'
)
and : 'json data'
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 dca648b04..901e0b60c 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 @@ -35,6 +35,15 @@ class DataNodeBuilderSpec extends Specification { '/test-tree/branch[@name=\'Right\']/nest': [name: 'Big', birds: ['Owl', 'Raven', 'Crow']] ] + String[] networkTopologyModelRfc8345 = [ + 'ietf/ietf-yang-types@2013-07-15.yang', + 'ietf/ietf-network-topology-state@2018-02-26.yang', + 'ietf/ietf-network-topology@2018-02-26.yang', + 'ietf/ietf-network-state@2018-02-26.yang', + 'ietf/ietf-network@2018-02-26.yang', + 'ietf/ietf-inet-types@2013-07-15.yang' + ] + def 'Converting NormalizedNode (tree) to a DataNode (tree).'() { given: 'the schema context for expected model' def yangResourceNameToContent = TestUtils.getYangResourcesAsMap('test-tree.yang') @@ -74,6 +83,55 @@ class DataNodeBuilderSpec extends Specification { 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) + def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent) getSchemaContext() + and: 'the json data parsed into normalized node object' + def jsonData = TestUtils.getResourceFileContent('ietf/data/ietf-network-topology-sample-rfc8345.json') + def normalizedNode = YangUtils.parseJsonData(jsonData, schemaContext) + when: 'the normalized node is converted to a data node ' + def result = new DataNodeBuilder().withNormalizedNodeTree(normalizedNode).build() + def mappedResult = TestUtils.getFlattenMapByXpath(result) + then: 'all expected data nodes are populated' + mappedResult.size() == 32 + println(mappedResult.keySet().sort()) + and: 'xpaths for augmentation nodes (link and termination-point nodes) were built correctly' + mappedResult.keySet().containsAll([ + "/networks/network[@network-id='otn-hc']/link[@link-id='D1,1-2-1,D2,2-1-1']", + "/networks/network[@network-id='otn-hc']/link[@link-id='D1,1-3-1,D3,3-1-1']", + "/networks/network[@network-id='otn-hc']/link[@link-id='D2,2-1-1,D1,1-2-1']", + "/networks/network[@network-id='otn-hc']/link[@link-id='D2,2-3-1,D3,3-2-1']", + "/networks/network[@network-id='otn-hc']/link[@link-id='D3,3-1-1,D1,1-3-1']", + "/networks/network[@network-id='otn-hc']/link[@link-id='D3,3-2-1,D2,2-3-1']", + "/networks/network[@network-id='otn-hc']/node[@node-id='D1']/termination-point[@tp-id='1-0-1']", + "/networks/network[@network-id='otn-hc']/node[@node-id='D1']/termination-point[@tp-id='1-2-1']", + "/networks/network[@network-id='otn-hc']/node[@node-id='D1']/termination-point[@tp-id='1-3-1']", + "/networks/network[@network-id='otn-hc']/node[@node-id='D2']/termination-point[@tp-id='2-0-1']", + "/networks/network[@network-id='otn-hc']/node[@node-id='D2']/termination-point[@tp-id='2-1-1']", + "/networks/network[@network-id='otn-hc']/node[@node-id='D2']/termination-point[@tp-id='2-3-1']", + "/networks/network[@network-id='otn-hc']/node[@node-id='D3']/termination-point[@tp-id='3-1-1']", + "/networks/network[@network-id='otn-hc']/node[@node-id='D3']/termination-point[@tp-id='3-2-1']" + ]) + } + + def 'Converting NormalizedNode (tree) to a DataNode (tree) for known parent node -- augmentation case.'() { + given: 'a schema context for expected model' + def yangResourceNameToContent = TestUtils.getYangResourcesAsMap(networkTopologyModelRfc8345) + def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent) getSchemaContext() + and: 'parent node xpath referencing augmentation node within a model' + def parentNodeXpath = "/networks/network[@network-id='otn-hc']/link[@link-id='D1,1-2-1,D2,2-1-1']" + and: 'the json data fragment parsed into normalized node object for given parent node xpath' + def jsonData = '{"source": {"source-node": "D1", "source-tp": "1-2-1"}}' + def normalizedNode = YangUtils.parseJsonData(jsonData, schemaContext, parentNodeXpath) + when: 'the normalized node is converted to a data node with given parent node xpath' + def result = new DataNodeBuilder().withNormalizedNodeTree(normalizedNode) + .withParentNodeXpath(parentNodeXpath).build() + then: 'the resulting data node represents a child of augmentation node' + assert result.xpath == "/networks/network[@network-id='otn-hc']/link[@link-id='D1,1-2-1,D2,2-1-1']/source" + assert result.leaves['source-node'] == 'D1' + assert result.leaves['source-tp'] == '1-2-1' + } def static assertLeavesMaps(actualLeavesMap, expectedLeavesMap) { expectedLeavesMap.each { key, value -> @@ -88,5 +146,4 @@ class DataNodeBuilderSpec extends Specification { } } } - } |