1 package org.onap.cps.utils
3 import com.google.gson.stream.JsonReader
4 import org.onap.cps.yang.YangTextSchemaSourceSetBuilder
5 import org.opendaylight.yangtools.yang.common.QName
6 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier
7 import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode
8 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode
9 import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier
10 import org.opendaylight.yangtools.yang.data.codec.gson.JsonParserStream
11 import org.opendaylight.yangtools.yang.data.impl.schema.Builders
12 import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter
13 import org.opendaylight.yangtools.yang.data.api.schema.builder.DataContainerNodeBuilder
14 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
15 import spock.lang.Specification
16 import org.onap.cps.TestUtils
18 class JsonParserStreamSpec extends Specification{
20 def 'Multiple data tree parsing with ODL JsonStreamParser'(){
21 given: 'json data with two objects and JSON reader'
22 def jsonData = TestUtils.getResourceFileContent('multiple-object-data.json')
23 def jsonReader = new JsonReader(new StringReader(jsonData))
24 def yangResourcesMap = TestUtils.getYangResourcesAsMap('multipleDataTree.yang')
26 def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourcesMap).getSchemaContext()
27 and: 'variable to store the result of parsing'
28 DataContainerNodeBuilder<YangInstanceIdentifier.NodeIdentifier, ContainerNode> builder =
29 Builders.containerBuilder().withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(schemaContext.getQName()));
30 def normalizedNodeStreamWriter = ImmutableNormalizedNodeStreamWriter.from(builder);
31 def jsonCodecFactory = JSONCodecFactorySupplier.DRAFT_LHOTKA_NETMOD_YANG_JSON_02
32 .getShared((EffectiveModelContext) schemaContext);
33 and: 'JSON parser stream'
34 def jsonParserStream = JsonParserStream.create(normalizedNodeStreamWriter, jsonCodecFactory)
35 when: 'parsing is invoked with the given JSON reader'
36 jsonParserStream.parse(jsonReader)
37 def result = builder.build()
38 then: 'result is the correct size'
40 then: 'data container child is a type of normalized node'
41 def dataContainerChild = result.body().getAt(index)
42 dataContainerChild instanceof NormalizedNode == true
43 then: 'qualified name created is as expected'
44 dataContainerChild.identifier.nodeType == QName.create('org:onap:ccsdk:multiDataTree', '2020-09-15', nodeName)