From e8299274db313f4f83a10b9f627d51d0b910377d Mon Sep 17 00:00:00 2001 From: emaclee Date: Mon, 3 Oct 2022 12:03:00 +0100 Subject: Tests added for multiple data tree analysis **this commit is for analysis purposes only, not for merge - add unit test for gson JSONreader - add unit test for ODL JsonParserStream Issue-ID: CPS-1286 Signed-off-by: emaclee Change-Id: Ia4a8c3e36f83b4cd857b4ff20f6a37e418ffd2ec --- .../test/groovy/org/onap/cps/utils/GsonSpec.groovy | 40 +++++++++++++++++ .../org/onap/cps/utils/JsonParserStreamSpec.groovy | 51 ++++++++++++++++++++++ 2 files changed, 91 insertions(+) create mode 100644 cps-service/src/test/groovy/org/onap/cps/utils/GsonSpec.groovy create mode 100644 cps-service/src/test/groovy/org/onap/cps/utils/JsonParserStreamSpec.groovy (limited to 'cps-service/src/test/groovy/org') diff --git a/cps-service/src/test/groovy/org/onap/cps/utils/GsonSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/utils/GsonSpec.groovy new file mode 100644 index 000000000..c100ea31d --- /dev/null +++ b/cps-service/src/test/groovy/org/onap/cps/utils/GsonSpec.groovy @@ -0,0 +1,40 @@ +package org.onap.cps.utils + +import com.google.gson.stream.JsonReader +import org.onap.cps.TestUtils +import spock.lang.Specification + + +class GsonSpec extends Specification{ + + def 'Iterate over JSON data with gson JsonReader'(){ + given: 'json data with two objects and JSON reader' + def jsonData = TestUtils.getResourceFileContent('multiple-object-data.json') + def objectUnderTest = new JsonReader(new StringReader(jsonData)); + when: 'data is iterated over with JsonReader methods' + iterateWithJsonReader(objectUnderTest) + then: 'no exception is thrown' + noExceptionThrown() + } + + def iterateWithJsonReader(JsonReader jsonReader){ + switch(jsonReader.peek()) { + case "STRING": + print(jsonReader.nextString() + " ") + break; + case "BEGIN_OBJECT": + jsonReader.beginObject(); + while (jsonReader.hasNext()) { + print(jsonReader.nextName() + " ") + iterateWithJsonReader(jsonReader) + } + jsonReader.endObject(); + println("") + break; + default: + break; + } + } + + +} diff --git a/cps-service/src/test/groovy/org/onap/cps/utils/JsonParserStreamSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/utils/JsonParserStreamSpec.groovy new file mode 100644 index 000000000..68f9251eb --- /dev/null +++ b/cps-service/src/test/groovy/org/onap/cps/utils/JsonParserStreamSpec.groovy @@ -0,0 +1,51 @@ +package org.onap.cps.utils + +import com.google.gson.stream.JsonReader +import org.onap.cps.yang.YangTextSchemaSourceSetBuilder +import org.opendaylight.yangtools.yang.common.QName +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier +import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode +import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode +import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier +import org.opendaylight.yangtools.yang.data.codec.gson.JsonParserStream +import org.opendaylight.yangtools.yang.data.impl.schema.Builders +import org.opendaylight.yangtools.yang.data.impl.schema.ImmutableNormalizedNodeStreamWriter +import org.opendaylight.yangtools.yang.data.impl.schema.builder.api.DataContainerNodeBuilder +import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext; +import spock.lang.Specification +import org.onap.cps.TestUtils + +class JsonParserStreamSpec extends Specification{ + + def 'Multiple data tree parsing with ODL JsonStreamParser'(){ + given: 'json data with two objects and JSON reader' + def jsonData = TestUtils.getResourceFileContent('multiple-object-data.json') + def jsonReader = new JsonReader(new StringReader(jsonData)) + def yangResourcesMap = TestUtils.getYangResourcesAsMap('multipleDataTree.yang') + and: 'schema context' + def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourcesMap).getSchemaContext() + and: 'variable to store the result of parsing' + DataContainerNodeBuilder builder = + Builders.containerBuilder().withNodeIdentifier(new YangInstanceIdentifier.NodeIdentifier(schemaContext.getQName())); + def normalizedNodeStreamWriter = ImmutableNormalizedNodeStreamWriter.from(builder); + def jsonCodecFactory = JSONCodecFactorySupplier.DRAFT_LHOTKA_NETMOD_YANG_JSON_02 + .getShared((EffectiveModelContext) schemaContext); + and: 'JSON parser stream' + def jsonParserStream = JsonParserStream.create(normalizedNodeStreamWriter, jsonCodecFactory) + when: 'parsing is invoked with the given JSON reader' + jsonParserStream.parse(jsonReader) + def result = builder.build() + then: 'result is the correct size' + result.size() == 2 + then: 'data container child is a type of normalized node' + def dataContainerChild = result.getValue()[index] + dataContainerChild instanceof NormalizedNode == true + then: 'qualified name created is as expected' + dataContainerChild.nodeType == QName.create('org:onap:ccsdk:multiDataTree', '2020-09-15', nodeName) + where: + index | nodeName + 0 | 'first-container' + 1 | 'last-container' + + } +} \ No newline at end of file -- cgit 1.2.3-korg