API versioning supported and added different versions for POST APIs
[cps.git] / cps-service / src / test / groovy / org / onap / cps / utils / JsonParserStreamSpec.groovy
1 package org.onap.cps.utils
2
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
17
18 class JsonParserStreamSpec extends Specification{
19
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')
25         and: 'schema context'
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'
39             result.size() == 2
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)
45         where:
46             index   | nodeName
47             0       | 'first-container'
48             1       | 'last-container'
49
50     }
51 }