From a029cf849b06cd45d6909a9808e3cc52031e6644 Mon Sep 17 00:00:00 2001 From: niamhcore Date: Wed, 3 Feb 2021 16:10:37 +0000 Subject: Custom Model E2E Network Slicing - RAN Inventory Issue-ID: CPS-200 Signed-off-by: niamhcore Change-Id: I846ff2928de6e1fae1483ced05d66cfd1e44615e --- .../onap/cps/api/impl/E2ENetworkSliceSpec.groovy | 42 ++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'cps-service/src/test/groovy') diff --git a/cps-service/src/test/groovy/org/onap/cps/api/impl/E2ENetworkSliceSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/api/impl/E2ENetworkSliceSpec.groovy index 904e8263b2..8abc0bf231 100755 --- a/cps-service/src/test/groovy/org/onap/cps/api/impl/E2ENetworkSliceSpec.groovy +++ b/cps-service/src/test/groovy/org/onap/cps/api/impl/E2ENetworkSliceSpec.groovy @@ -25,6 +25,7 @@ import org.onap.cps.api.CpsAdminService import org.onap.cps.spi.CpsDataPersistenceService import org.onap.cps.spi.CpsModulePersistenceService import org.onap.cps.spi.model.Anchor +import org.onap.cps.spi.model.DataNode import org.onap.cps.yang.YangTextSchemaSourceSetBuilder import spock.lang.Specification @@ -86,4 +87,45 @@ class E2ENetworkSliceSpec extends Specification { 1 * mockDataStoreService.storeDataNode(dataspaceName, anchorName, {dataNode -> dataNode.xpath == '/ran-coverage-area' && dataNode.childDataNodes.size() == 4}) } + + def 'E2E Coverage Area-Tracking Area & TA-Cell mapping data can be parsed for RAN inventory.'() { + def dataNodeStored + given: 'valid yang resource as name-to-content map' + def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap( + 'e2e/basic/cps-ran-inventory.yang') + def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap).getSchemaContext() + and : 'a valid json is provided for the model' + def jsonData = TestUtils.getResourceFileContent('e2e/basic/cps-ran-inventory-data.json') + and : 'all the further dependencies are mocked ' + mockCpsAdminService.getAnchor('someDataspace', 'someAnchor') >> + new Anchor().builder().name('someAnchor').schemaSetName('someSchemaSet').build() + mockYangTextSchemaSourceSetCache.get('someDataspace', 'someSchemaSet') >> YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap) + mockModuleStoreService.getYangSchemaResources('someDataspace', 'someSchemaSet') >> schemaContext + when: 'saveData method is invoked' + cpsDataServiceImple.saveData('someDataspace', 'someAnchor', jsonData) + then: 'parameters are validated and processing is delegated to persistence service' + 1 * mockDataStoreService.storeDataNode('someDataspace', 'someAnchor', _) >> + { args -> dataNodeStored = args[2]} + and: 'the size of the tree is correct' + def cpsRanInventory = treeToFlatMapByXpath(new HashMap<>(), dataNodeStored) + assert cpsRanInventory.size() == 3 + and: 'ran-inventory contains the correct child node' + def ranInventory = cpsRanInventory.get('/ran-inventory') + def sliceProfilesList = cpsRanInventory.get('/ran-inventory/sliceProfilesList[@sliceProfileId=\'f33a9dd8-ae51-4acf-8073-c9390c25f6f1\']') + def pLMNIdList = cpsRanInventory.get('/ran-inventory/sliceProfilesList[@sliceProfileId=\'f33a9dd8-ae51-4acf-8073-c9390c25f6f1\']/pLMNIdList[@mcc=\'310\' and @mnc=\'410\']') + ranInventory.getChildDataNodes().size() == 1 + ranInventory.getChildDataNodes().find( {it.xpath == sliceProfilesList.xpath}) + and: 'sliceProfilesList contains the correct child node' + sliceProfilesList.getChildDataNodes().size() == 1 + sliceProfilesList.getChildDataNodes().find( {it.xpath == pLMNIdList.xpath}) + and: 'pLMNIdList contains the no child nodes' + pLMNIdList.getChildDataNodes().size() == 0 + } + + def static treeToFlatMapByXpath(Map flatMap, DataNode dataNodeTree) { + flatMap.put(dataNodeTree.getXpath(), dataNodeTree) + dataNodeTree.getChildDataNodes() + .forEach(childDataNode -> treeToFlatMapByXpath(flatMap, childDataNode)) + return flatMap + } } -- cgit 1.2.3-korg