diff options
author | 2021-01-25 18:46:20 +0000 | |
---|---|---|
committer | 2021-01-27 16:01:33 +0000 | |
commit | 099f89eda3b0c94d20612ebf1d62795ab7dc833a (patch) | |
tree | 9ac4eeb64c92bdf8b4de1773dcfd195158b30a6c /cps-service/src/test/groovy/org/onap | |
parent | 34afca00d1f8b2fabe7708c76be714687e136d68 (diff) |
Draft at proposal where the DataNodeBuilder 'replaces' yang Utils to buidl a DataNode
Most complexity is related to immutable collections and the fact taht we are adding data while recursing
over the orignal data in an uncontrolled order.
I cleaned it up as best I could with no logic in DataNode.
Espcially the handling of LitLeaves requires some specialed handling. Thsi is just a draft solution for that
I still propose we get back to that in dedicated user stories for handling the various types of Yang elements
Hope this helps...
Issue-ID: CPS-137
Signed-off-by: ToineSiebelink <toine.siebelink@est.tech>
Change-Id: Iab7cfcff67412c01bcdab95e707e1350bf60fab1
Diffstat (limited to 'cps-service/src/test/groovy/org/onap')
-rw-r--r-- | cps-service/src/test/groovy/org/onap/cps/model/DataNodeBuilderSpec.groovy | 29 | ||||
-rw-r--r-- | cps-service/src/test/groovy/org/onap/cps/utils/YangUtilsSpec.groovy | 21 |
2 files changed, 29 insertions, 21 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 new file mode 100644 index 000000000..0dbde889a --- /dev/null +++ b/cps-service/src/test/groovy/org/onap/cps/model/DataNodeBuilderSpec.groovy @@ -0,0 +1,29 @@ +package org.onap.cps.model + +import org.onap.cps.TestUtils +import org.onap.cps.spi.model.DataNodeBuilder +import org.onap.cps.utils.YangUtils +import org.onap.cps.yang.YangTextSchemaSourceSetBuilder +import spock.lang.Specification + +class DataNodeBuilderSpec extends Specification { + + 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() + and: 'a normalized node for that model' + def jsonData = TestUtils.getResourceFileContent('bookstore.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']"]) + } +} diff --git a/cps-service/src/test/groovy/org/onap/cps/utils/YangUtilsSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/utils/YangUtilsSpec.groovy index 9237fa29a..e6e5d6a36 100644 --- a/cps-service/src/test/groovy/org/onap/cps/utils/YangUtilsSpec.groovy +++ b/cps-service/src/test/groovy/org/onap/cps/utils/YangUtilsSpec.groovy @@ -54,25 +54,4 @@ class YangUtilsSpec extends Specification{ '{incomplete json' | 'incomplete json' '{"test:bookstore": {"address": "Parnell st." }}' | 'json with un-modelled data' } - - def 'Breaking a Json Data Object into fragments.'() { - given: 'a Yang module' - def yangResourceNameToContent = TestUtils.getYangResourcesAsMap('bookstore.yang') - def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourceNameToContent)getSchemaContext() - def module = schemaContext.findModule('stores', Revision.of('2020-09-15')).get() - and: 'a normalized node for that model' - def jsonData = TestUtils.getResourceFileContent('bookstore.json') - def normalizedNode = YangUtils.parseJsonData(jsonData, schemaContext) - when: 'the json data is fragmented' - def result = YangUtils.fragmentNormalizedNode(normalizedNode, module) - then: 'the system creates a (root) fragment without a parent and 2 children (categories)' - result.parentFragment == null - result.childFragments.size() == 2 - and: 'each child (category) has the root fragment (result) as parent and in turn as 1 child (a list of books)' - result.childFragments.each { it.parentFragment == result && it.childFragments.size() == 1 } - and: 'the fragments have the correct xpaths' - assert result.xpath == '/bookstore' - assert result.childFragments.collect { it.xpath } - .containsAll(["/bookstore/categories[@code='01']", "/bookstore/categories[@code='02']"]) - } } |