package org.onap.cps.api.impl\r
\r
import org.onap.cps.TestUtils\r
+import org.onap.cps.api.CpsAdminService\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.yang.YangTextSchemaSourceSetBuilder\r
import spock.lang.Specification\r
\r
-\r
class E2ENetworkSliceSpec extends Specification {\r
def mockModuleStoreService = Mock(CpsModulePersistenceService)\r
- def objectUnderTest = new CpsModuleServiceImpl()\r
+ def mockDataStoreService = Mock(CpsDataPersistenceService)\r
+ def mockCpsAdminService = Mock(CpsAdminService)\r
+ def cpsModuleServiceImpl = new CpsModuleServiceImpl()\r
+ def cpsDataServiceImple = new CpsDataServiceImpl()\r
+ def mockYangTextSchemaSourceSetCache = Mock(YangTextSchemaSourceSetCache)\r
+\r
+ def dataspaceName = 'someDataspace'\r
+ def anchorName = 'someAnchor'\r
+ def schemaSetName = 'someSchemaSet'\r
\r
def setup() {\r
- objectUnderTest.cpsModulePersistenceService = mockModuleStoreService\r
+ cpsDataServiceImple.cpsDataPersistenceService = mockDataStoreService\r
+ cpsDataServiceImple.cpsAdminService = mockCpsAdminService\r
+ cpsDataServiceImple.yangTextSchemaSourceSetCache = mockYangTextSchemaSourceSetCache\r
+ cpsModuleServiceImpl.yangTextSchemaSourceSetCache = mockYangTextSchemaSourceSetCache\r
+ cpsModuleServiceImpl.cpsModulePersistenceService = mockModuleStoreService\r
}\r
\r
def 'E2E model can be parsed by CPS.'() {\r
given: 'Valid yang resource as name-to-content map'\r
def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap('e2e/basic/ietf-inet-types.yang','e2e/basic/ietf-yang-types.yang','e2e/basic/ran-network2020-08-06.yang')\r
when: 'Create schema set method is invoked'\r
- objectUnderTest.createSchemaSet('someDataspace', 'someSchemaSet', yangResourcesNameToContentMap)\r
+ cpsModuleServiceImpl.createSchemaSet(dataspaceName, schemaSetName, yangResourcesNameToContentMap)\r
+ then: 'Parameters are validated and processing is delegated to persistence service'\r
+ 1 * mockModuleStoreService.storeSchemaSet(dataspaceName, schemaSetName, yangResourcesNameToContentMap)\r
+ }\r
+\r
+ def 'E2E Coverage Area-Tracking Area & TA-Cell mapping model can be parsed by CPS.'() {\r
+ given: 'Valid yang resource as name-to-content map'\r
+ def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap(\r
+ 'e2e/basic/cps-cavsta-onap-internal2021-01-28.yang')\r
+ when: 'Create schema set method is invoked'\r
+ cpsModuleServiceImpl.createSchemaSet(dataspaceName, schemaSetName, yangResourcesNameToContentMap)\r
then: 'Parameters are validated and processing is delegated to persistence service'\r
- 1 * mockModuleStoreService.storeSchemaSet('someDataspace', 'someSchemaSet', yangResourcesNameToContentMap)\r
+ 1 * mockModuleStoreService.storeSchemaSet(dataspaceName, schemaSetName, yangResourcesNameToContentMap)\r
+ }\r
+\r
+ def 'E2E Coverage Area-Tracking Area & TA-Cell mapping data can be parsed by CPS.'() {\r
+ given: 'Valid yang resource as name-to-content map'\r
+ def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap(\r
+ 'e2e/basic/cps-cavsta-onap-internal2021-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/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
+ mockYangTextSchemaSourceSetCache.get(dataspaceName, schemaSetName) >>\r
+ YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap)\r
+ mockModuleStoreService.getYangSchemaResources(dataspaceName, schemaSetName) >> schemaContext\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
+ }\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
+ 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
+ and : 'all the further dependencies are mocked '\r
+ mockCpsAdminService.getAnchor('someDataspace', 'someAnchor') >>\r
+ new Anchor().builder().name('someAnchor').schemaSetName('someSchemaSet').build()\r
+ mockYangTextSchemaSourceSetCache.get('someDataspace', 'someSchemaSet') >> YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap)\r
+ mockModuleStoreService.getYangSchemaResources('someDataspace', 'someSchemaSet') >> schemaContext\r
+ when: 'saveData method is invoked'\r
+ cpsDataServiceImple.saveData('someDataspace', 'someAnchor', jsonData)\r
+ then: 'parameters are validated and processing is delegated to persistence service'\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
+ 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
+ ranInventory.getChildDataNodes().size() == 1\r
+ ranInventory.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
+ pLMNIdList.getChildDataNodes().size() == 0\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
}\r
}\r