X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=cps-service%2Fsrc%2Ftest%2Fgroovy%2Forg%2Fonap%2Fcps%2Fapi%2Fimpl%2FE2ENetworkSliceSpec.groovy;h=d18bcf55efc89b84c6a8b5b207e72ce2d26acd57;hb=5427ef054effb1aadfaaab300282545c99c37a61;hp=ac4ef278ee8ffcfccdb39761a9e0e76b00302347;hpb=355ed99c7305beee02fe05c61c4592f1f782a96e;p=cps.git 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 ac4ef278e..d18bcf55e 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 @@ -1,7 +1,8 @@ -/*- +/* * ============LICENSE_START======================================================= - * Copyright (C) 2021 Nordix Foundation. All rights reserved. - * Modifications Copyright (C) 2021 Bell Canada. + * Copyright (C) 2021 Nordix Foundation. + * Modifications Copyright (C) 2021-2022 Bell Canada. + * Modifications Copyright (C) 2021 Pantheon.tech * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,10 +24,11 @@ package org.onap.cps.api.impl import org.onap.cps.TestUtils import org.onap.cps.api.CpsAdminService +import org.onap.cps.notification.NotificationService 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.utils.YangUtils import org.onap.cps.yang.YangTextSchemaSourceSetBuilder import spock.lang.Specification @@ -34,25 +36,31 @@ class E2ENetworkSliceSpec extends Specification { def mockModuleStoreService = Mock(CpsModulePersistenceService) def mockDataStoreService = Mock(CpsDataPersistenceService) def mockCpsAdminService = Mock(CpsAdminService) - def cpsModuleServiceImpl = new CpsModuleServiceImpl() - def cpsDataServiceImple = new CpsDataServiceImpl() + def mockNotificationService = Mock(NotificationService) + def cpsDataServiceImpl = new CpsDataServiceImpl() def mockYangTextSchemaSourceSetCache = Mock(YangTextSchemaSourceSetCache) + def cpsModuleServiceImpl = new CpsModuleServiceImpl(mockModuleStoreService, + mockYangTextSchemaSourceSetCache,mockCpsAdminService ) def dataspaceName = 'someDataspace' def anchorName = 'someAnchor' def schemaSetName = 'someSchemaSet' + def noTimestamp = null def setup() { - cpsDataServiceImple.cpsDataPersistenceService = mockDataStoreService - cpsDataServiceImple.cpsAdminService = mockCpsAdminService - cpsDataServiceImple.yangTextSchemaSourceSetCache = mockYangTextSchemaSourceSetCache - cpsModuleServiceImpl.yangTextSchemaSourceSetCache = mockYangTextSchemaSourceSetCache - cpsModuleServiceImpl.cpsModulePersistenceService = mockModuleStoreService + cpsDataServiceImpl.cpsDataPersistenceService = mockDataStoreService + cpsDataServiceImpl.cpsAdminService = mockCpsAdminService + cpsDataServiceImpl.yangTextSchemaSourceSetCache = mockYangTextSchemaSourceSetCache + cpsDataServiceImpl.notificationService = mockNotificationService } def 'E2E model can be parsed by CPS.'() { given: 'Valid yang resource as name-to-content map' - def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap('e2e/basic/ietf-inet-types.yang','e2e/basic/ietf-yang-types.yang','e2e/basic/ran-network2020-08-06.yang') + def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap( + 'ietf/ietf-inet-types@2013-07-15.yang', + 'ietf/ietf-yang-types@2013-07-15.yang', + 'e2e/basic/ran-network2020-08-06.yang' + ) when: 'Create schema set method is invoked' cpsModuleServiceImpl.createSchemaSet(dataspaceName, schemaSetName, yangResourcesNameToContentMap) then: 'Parameters are validated and processing is delegated to persistence service' @@ -84,7 +92,7 @@ class E2ENetworkSliceSpec extends Specification { YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap) mockModuleStoreService.getYangSchemaResources(dataspaceName, schemaSetName) >> schemaContext when: 'saveData method is invoked' - cpsDataServiceImple.saveData(dataspaceName, anchorName, jsonData) + cpsDataServiceImpl.saveData(dataspaceName, anchorName, jsonData, noTimestamp) then: 'Parameters are validated and processing is delegated to persistence service' 1 * mockDataStoreService.storeDataNode('someDataspace', 'someAnchor', _) >> { args -> dataNodeStored = args[2]} @@ -106,7 +114,7 @@ class E2ENetworkSliceSpec extends Specification { def dataNodeStored given: 'valid yang resource as name-to-content map' def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap( - 'e2e/basic/cps-ran-inventory.yang') + 'e2e/basic/cps-ran-inventory@2021-01-28.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') @@ -116,30 +124,43 @@ class E2ENetworkSliceSpec extends Specification { mockYangTextSchemaSourceSetCache.get('someDataspace', 'someSchemaSet') >> YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap) mockModuleStoreService.getYangSchemaResources('someDataspace', 'someSchemaSet') >> schemaContext when: 'saveData method is invoked' - cpsDataServiceImple.saveData('someDataspace', 'someAnchor', jsonData) + cpsDataServiceImpl.saveData('someDataspace', 'someAnchor', jsonData, noTimestamp) 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 + def cpsRanInventory = TestUtils.getFlattenMapByXpath(dataNodeStored) + assert cpsRanInventory.size() == 4 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\']') + def ranSlices = cpsRanInventory.get('/ran-inventory/ran-slices[@rannfnssiid=\'14559ead-f4fe-4c1c-a94c-8015fad3ea35\']') + def sliceProfilesList = cpsRanInventory.get('/ran-inventory/ran-slices[@rannfnssiid=\'14559ead-f4fe-4c1c-a94c-8015fad3ea35\']/sliceProfilesList[@sliceProfileId=\'f33a9dd8-ae51-4acf-8073-c9390c25f6f1\']') + 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\']') ranInventory.getChildDataNodes().size() == 1 - ranInventory.getChildDataNodes().find( {it.xpath == sliceProfilesList.xpath}) + ranInventory.getChildDataNodes().find( {it.xpath == ranSlices.xpath}) + and: 'ranSlices contains the correct child node' + ranSlices.getChildDataNodes().size() == 1 + ranSlices.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' + and: 'pLMNIdList contains no children' 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 + def 'E2E RAN Schema Model.'(){ + given: 'yang resources' + def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap( + 'ietf/ietf-inet-types@2013-07-15.yang', + 'ietf/ietf-yang-types@2013-07-15.yang', + 'e2e/basic/cps-ran-schema-model@2021-05-19.yang' + ) + and : 'json data' + def jsonData = TestUtils.getResourceFileContent('e2e/basic/cps-ran-schema-model-data-v4.json') + expect: 'schema context is built with no exception indicating the schema set being valid ' + def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap).getSchemaContext() + and: 'data is parsed with no exception indicating the model match' + YangUtils.parseJsonData(jsonData, schemaContext) != null } }