Custom Model E2E Network Slicing - RAN Inventory
[cps.git] / cps-service / src / test / groovy / org / onap / cps / api / impl / E2ENetworkSliceSpec.groovy
index 904e826..8abc0bf 100755 (executable)
@@ -25,6 +25,7 @@ import org.onap.cps.api.CpsAdminService
 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
@@ -86,4 +87,45 @@ class E2ENetworkSliceSpec extends Specification {
             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