/*-\r
* ============LICENSE_START=======================================================\r
* Copyright (C) 2021 Nordix Foundation. All rights reserved.\r
+ * Modifications Copyright (C) 2021 Bell Canada.\r
* ================================================================================\r
* Licensed under the Apache License, Version 2.0 (the "License");\r
* you may not use this file except in compliance with the License.\r
import org.onap.cps.spi.CpsDataPersistenceService\r
import org.onap.cps.spi.CpsModulePersistenceService\r
import org.onap.cps.spi.model.Anchor\r
-import org.onap.cps.spi.model.DataNode\r
+import org.onap.cps.utils.YangUtils\r
import org.onap.cps.yang.YangTextSchemaSourceSetBuilder\r
import spock.lang.Specification\r
\r
def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap(\r
'e2e/basic/cps-cavsta-onap-internal2021-01-28.yang')\r
def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap).getSchemaContext()\r
+ def dataNodeStored\r
and : 'a valid json is provided for the model'\r
- def jsonData = TestUtils.getResourceFileContent('e2e/basic/Data.txt')\r
+ def jsonData = TestUtils.getResourceFileContent('e2e/basic/cps-Cavsta-Data.txt')\r
and : 'all the further dependencies are mocked '\r
mockCpsAdminService.getAnchor(dataspaceName, anchorName) >>\r
new Anchor().builder().name(anchorName).schemaSetName(schemaSetName).build()\r
when: 'saveData method is invoked'\r
cpsDataServiceImple.saveData(dataspaceName, anchorName, jsonData)\r
then: 'Parameters are validated and processing is delegated to persistence service'\r
- 1 * mockDataStoreService.storeDataNode(dataspaceName, anchorName,\r
- {dataNode -> dataNode.xpath == '/ran-coverage-area' && dataNode.childDataNodes.size() == 4})\r
+ 1 * mockDataStoreService.storeDataNode('someDataspace', 'someAnchor', _) >>\r
+ { args -> dataNodeStored = args[2]}\r
+ def child = dataNodeStored.childDataNodes[0]\r
+ assert child.childDataNodes.size() == 1\r
+ and: 'list of Tracking Area for a Coverage Area are stored with correct xpath and child nodes '\r
+ def listOfTAForCoverageArea = child.childDataNodes[0]\r
+ listOfTAForCoverageArea.xpath == '/ran-coverage-area/pLMNIdList[@mcc=\'310\' and @mnc=\'410\']/' +\r
+ 'coverage-area[@coverageArea=\'Washington\']'\r
+ listOfTAForCoverageArea.childDataNodes[0].leaves.get('nRTAC') == 234\r
+ and: 'list of cells in a tracking area are stored with correct xpath and child nodes '\r
+ def listOfCellsInTrackingArea = listOfTAForCoverageArea.childDataNodes[0]\r
+ listOfCellsInTrackingArea.xpath == '/ran-coverage-area/pLMNIdList[@mcc=\'310\' and @mnc=\'410\']/' +\r
+ 'coverage-area[@coverageArea=\'Washington\']/coverageAreaTAList[@nRTAC=\'234\']'\r
+ listOfCellsInTrackingArea.childDataNodes[0].leaves.get('cellLocalId') == 15709\r
}\r
\r
def 'E2E Coverage Area-Tracking Area & TA-Cell mapping data can be parsed for RAN inventory.'() {\r
def dataNodeStored\r
given: 'valid yang resource as name-to-content map'\r
def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap(\r
- 'e2e/basic/cps-ran-inventory.yang')\r
+ 'e2e/basic/cps-ran-inventory@2021-01-28.yang')\r
def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap).getSchemaContext()\r
and : 'a valid json is provided for the model'\r
def jsonData = TestUtils.getResourceFileContent('e2e/basic/cps-ran-inventory-data.json')\r
1 * mockDataStoreService.storeDataNode('someDataspace', 'someAnchor', _) >>\r
{ args -> dataNodeStored = args[2]}\r
and: 'the size of the tree is correct'\r
- def cpsRanInventory = treeToFlatMapByXpath(new HashMap<>(), dataNodeStored)\r
- assert cpsRanInventory.size() == 3\r
+ def cpsRanInventory = TestUtils.getFlattenMapByXpath(dataNodeStored)\r
+ assert cpsRanInventory.size() == 4\r
and: 'ran-inventory contains the correct child node'\r
def ranInventory = cpsRanInventory.get('/ran-inventory')\r
- def sliceProfilesList = cpsRanInventory.get('/ran-inventory/sliceProfilesList[@sliceProfileId=\'f33a9dd8-ae51-4acf-8073-c9390c25f6f1\']')\r
- def pLMNIdList = cpsRanInventory.get('/ran-inventory/sliceProfilesList[@sliceProfileId=\'f33a9dd8-ae51-4acf-8073-c9390c25f6f1\']/pLMNIdList[@mcc=\'310\' and @mnc=\'410\']')\r
+ def ranSlices = cpsRanInventory.get('/ran-inventory/ran-slices[@rannfnssiid=\'14559ead-f4fe-4c1c-a94c-8015fad3ea35\']')\r
+ def sliceProfilesList = cpsRanInventory.get('/ran-inventory/ran-slices[@rannfnssiid=\'14559ead-f4fe-4c1c-a94c-8015fad3ea35\']/sliceProfilesList[@sliceProfileId=\'f33a9dd8-ae51-4acf-8073-c9390c25f6f1\']')\r
+ def pLMNIdList = cpsRanInventory.get('/ran-inventory/ran-slices[@rannfnssiid=\'14559ead-f4fe-4c1c-a94c-8015fad3ea35\']/sliceProfilesList[@sliceProfileId=\'f33a9dd8-ae51-4acf-8073-c9390c25f6f1\']/pLMNIdList[@mcc=\'310\' and @mnc=\'410\']')\r
ranInventory.getChildDataNodes().size() == 1\r
- ranInventory.getChildDataNodes().find( {it.xpath == sliceProfilesList.xpath})\r
+ ranInventory.getChildDataNodes().find( {it.xpath == ranSlices.xpath})\r
+ and: 'ranSlices contains the correct child node'\r
+ ranSlices.getChildDataNodes().size() == 1\r
+ ranSlices.getChildDataNodes().find( {it.xpath == sliceProfilesList.xpath})\r
and: 'sliceProfilesList contains the correct child node'\r
sliceProfilesList.getChildDataNodes().size() == 1\r
sliceProfilesList.getChildDataNodes().find( {it.xpath == pLMNIdList.xpath})\r
- and: 'pLMNIdList contains the no child nodes'\r
+ and: 'pLMNIdList contains no children'\r
pLMNIdList.getChildDataNodes().size() == 0\r
+\r
}\r
\r
- def static treeToFlatMapByXpath(Map<String, DataNode> flatMap, DataNode dataNodeTree) {\r
- flatMap.put(dataNodeTree.getXpath(), dataNodeTree)\r
- dataNodeTree.getChildDataNodes()\r
- .forEach(childDataNode -> treeToFlatMapByXpath(flatMap, childDataNode))\r
- return flatMap\r
+ def 'E2E RAN Schema Model.'(){\r
+ given: 'yang resources'\r
+ def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap(\r
+ 'e2e/basic/ietf-inet-types.yang',\r
+ 'e2e/basic/ietf-yang-types.yang',\r
+ 'e2e/basic/cps-ran-schema-model@2021-01-28.yang'\r
+ )\r
+ and : 'json data'\r
+ def jsonData = TestUtils.getResourceFileContent('e2e/basic/cps-ran-schema-model-data-v4.json')\r
+ expect: 'schema context is built with no exception indicating the schema set being valid '\r
+ def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap).getSchemaContext()\r
+ and: 'data is parsed with no exception indicating the model match'\r
+ YangUtils.parseJsonData(jsonData, schemaContext) != null\r
}\r
}\r