From e8c429e2bddcb52b6cd563c5308e49e57e457073 Mon Sep 17 00:00:00 2001 From: "puthuparambil.aditya" Date: Tue, 2 Feb 2021 15:20:48 +0000 Subject: [PATCH] E2E Network Slice test for 'Coverage Area-Tracking Area & TA-Cell mapping' Issue-ID: CPS-199 Signed-off-by: puthuparambil.aditya Change-Id: Id8f7f595d04eb492c3ea065b8fcbf8ac9f3641bc --- .../onap/cps/api/impl/E2ENetworkSliceSpec.groovy | 54 +++++++- cps-service/src/test/resources/e2e/basic/Data.txt | 42 ++++++ .../basic/cps-cavsta-onap-internal2021-01-28.yang | 153 +++++++++++++++++++++ 3 files changed, 244 insertions(+), 5 deletions(-) create mode 100644 cps-service/src/test/resources/e2e/basic/Data.txt create mode 100644 cps-service/src/test/resources/e2e/basic/cps-cavsta-onap-internal2021-01-28.yang 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 d6751bb4e..904e8263b 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 @@ -21,25 +21,69 @@ package org.onap.cps.api.impl import org.onap.cps.TestUtils +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.yang.YangTextSchemaSourceSetBuilder import spock.lang.Specification 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 mockYangTextSchemaSourceSetCache = Mock(YangTextSchemaSourceSetCache) - def objectUnderTest = new CpsModuleServiceImpl() + + def dataspaceName = 'someDataspace' + def anchorName = 'someAnchor' + def schemaSetName = 'someSchemaSet' def setup() { - objectUnderTest.cpsModulePersistenceService = mockModuleStoreService - objectUnderTest.yangTextSchemaSourceSetCache = mockYangTextSchemaSourceSetCache + cpsDataServiceImple.cpsDataPersistenceService = mockDataStoreService + cpsDataServiceImple.cpsAdminService = mockCpsAdminService + cpsDataServiceImple.yangTextSchemaSourceSetCache = mockYangTextSchemaSourceSetCache + cpsModuleServiceImpl.yangTextSchemaSourceSetCache = mockYangTextSchemaSourceSetCache + cpsModuleServiceImpl.cpsModulePersistenceService = mockModuleStoreService } 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') when: 'Create schema set method is invoked' - objectUnderTest.createSchemaSet('someDataspace', 'someSchemaSet', yangResourcesNameToContentMap) + cpsModuleServiceImpl.createSchemaSet(dataspaceName, schemaSetName, yangResourcesNameToContentMap) + then: 'Parameters are validated and processing is delegated to persistence service' + 1 * mockModuleStoreService.storeSchemaSet(dataspaceName, schemaSetName, yangResourcesNameToContentMap) + } + + def 'E2E Coverage Area-Tracking Area & TA-Cell mapping model can be parsed by CPS.'() { + given: 'Valid yang resource as name-to-content map' + def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap( + 'e2e/basic/cps-cavsta-onap-internal2021-01-28.yang') + when: 'Create schema set method is invoked' + cpsModuleServiceImpl.createSchemaSet(dataspaceName, schemaSetName, yangResourcesNameToContentMap) + then: 'Parameters are validated and processing is delegated to persistence service' + 1 * mockModuleStoreService.storeSchemaSet(dataspaceName, schemaSetName, yangResourcesNameToContentMap) + } + + def 'E2E Coverage Area-Tracking Area & TA-Cell mapping data can be parsed by CPS.'() { + given: 'Valid yang resource as name-to-content map' + def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap( + 'e2e/basic/cps-cavsta-onap-internal2021-01-28.yang') + def schemaContext = YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap).getSchemaContext() + and : 'a valid json is provided for the model' + def jsonData = TestUtils.getResourceFileContent('e2e/basic/Data.txt') + and : 'all the further dependencies are mocked ' + mockCpsAdminService.getAnchor(dataspaceName, anchorName) >> + new Anchor().builder().name(anchorName).schemaSetName(schemaSetName).build() + mockYangTextSchemaSourceSetCache.get(dataspaceName, schemaSetName) >> + YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap) + mockModuleStoreService.getYangSchemaResources(dataspaceName, schemaSetName) >> schemaContext + when: 'saveData method is invoked' + cpsDataServiceImple.saveData(dataspaceName, anchorName, jsonData) then: 'Parameters are validated and processing is delegated to persistence service' - 1 * mockModuleStoreService.storeSchemaSet('someDataspace', 'someSchemaSet', yangResourcesNameToContentMap) + 1 * mockDataStoreService.storeDataNode(dataspaceName, anchorName, + {dataNode -> dataNode.xpath == '/ran-coverage-area' && dataNode.childDataNodes.size() == 4}) } } diff --git a/cps-service/src/test/resources/e2e/basic/Data.txt b/cps-service/src/test/resources/e2e/basic/Data.txt new file mode 100644 index 000000000..c10c6d9c7 --- /dev/null +++ b/cps-service/src/test/resources/e2e/basic/Data.txt @@ -0,0 +1,42 @@ +{ +"ran-coverage-area":{ + "pLMNIdList": [ + { + "mcc": "310", + "mnc": "410" + }, + { + "mcc": "2310", + "mnc": "2410" + } + ], + "coverage-area": [ + { + "coverageArea": "Washington", + "coverageAreaTAList": [ + { + "nRTAC": 234, + "taCellsList": [ + { + "cellLocalId": 15709 + } + ] + } + ] + }, + { + "coverageArea": "Dublin", + "coverageAreaTAList": [ + { + "nRTAC": 2234, + "taCellsList": [ + { + "cellLocalId": 15809 + } + ] + } + ] + } + ] + } +} \ No newline at end of file diff --git a/cps-service/src/test/resources/e2e/basic/cps-cavsta-onap-internal2021-01-28.yang b/cps-service/src/test/resources/e2e/basic/cps-cavsta-onap-internal2021-01-28.yang new file mode 100644 index 000000000..2a8a92579 --- /dev/null +++ b/cps-service/src/test/resources/e2e/basic/cps-cavsta-onap-internal2021-01-28.yang @@ -0,0 +1,153 @@ +module cps-cavsta-onap-internal { + yang-version 1.1; + namespace "org:onap:ccsdk:features:sdnr:northbound:cps-cavsta-onap-internal"; + prefix onap-cavsta; + + organization + "Open Network Automation Platform - ONAP + "; + contact + "Editors: + Àhila Pandaram + + + Swaminathan Seetharaman + "; + description + "This module contains YANG definitions for the relationship among coverage area, + tracking area list and cells under each tracking area. + This relationship is used for internal purpose of ONAP to populate the details. + + Copyright (C) 2020-2021 Wipro Limited. + + Licensed under the Apache License, Version 2.0 (the 'License') + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an 'AS IS' BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License."; + + revision 2021-01-28 { + description + "RAN Network YANG Model for ONAP/O-RAN POC"; + reference + "https://wiki.onap.org/display/DW/E2E+Network+Slicing+Use+Case+in+R7+Guilin"; + } + + typedef Tac { + type int64 { + range "0..16777215"; + } + description + "Tracking Area Code"; + reference + "TS 23.003 clause 19.4.2.3"; + } + + + typedef Mcc { + type string; + description + "The mobile country code consists of three decimal digits, + The first digit of the mobile country code identifies the geographic + region (the digits 1 and 8 are not used):"; + reference + "3GPP TS 23.003 subclause 2.2 and 12.1"; + } + + typedef Mnc { + type string; + description + "The mobile network code consists of two or three + decimal digits (for example: MNC of 001 is not the same as MNC of 01)"; + reference + "3GPP TS 23.003 subclause 2.2 and 12.1"; + } + + + grouping trackingAreaGroup{ + leaf nRTAC { + type Tac; + description "Identity of the common Tracking Area Code for the PLMNs + allowedValues: + a) It is the TAC or Extended-TAC. + b) A cell can only broadcast one TAC or Extended-TAC. + See TS 36.300, subclause 10.1.7 (PLMNID and TAC relation). + c) TAC is defined in subclause 19.4.2.3 of 3GPP TS 23.003 and + Extended-TAC is defined in subclause 9.3.1.29 of 3GPP TS 38.473. + d) For a 5G SA (Stand Alone), it has a non-null value."; + } + list taCellsList{ + key cellLocalId; + leaf cellLocalId { + description "Identifies an NR cell of a gNB. Together with corresponding + gNB ID it forms the NR Cell Identifier (NCI)."; + mandatory true; + type int32 { range "0..16383"; } + } + } + } + + grouping PLMNId { + description + "It specifies the PLMN identifier to be used as part of the global RAN node identity"; + reference + "TS 23.658"; + leaf mcc { + type Mcc; + mandatory true; + description + "The mobile country code consists of three decimal digits, + The first digit of the mobile country code identifies the geographic + region (the digits 1 and 8 are not used)"; + } + leaf mnc { + type Mnc; + mandatory true; + description + "The mobile network code consists of two or three + decimal digits (for example: MNC of 001 is not the same as MNC of 01)"; + } + } + + + grouping coverageAreaGroup{ + leaf coverageArea{ + description "An attribute specifies the coverage area of the network slice, + i.e. the geographic region where a 3GPP communication service is accessible, + see Table 7.1-1 of TS 22.261 [28]) and NG.116 [50]."; + type string; + } + + list coverageAreaTAList{ + uses trackingAreaGroup; + key "nRTAC"; + description "This list contains the tracking area list for the coverageArea"; + } + } + + container ran-coverage-area{ + + list pLMNIdList { + description "List of at most six entries of PLMN Identifiers, but at least + one (the primary PLMN Id). + The PLMN Identifier is composed of a Mobile Country Code (MCC) and a + Mobile Network Code (MNC)."; + key "mcc mnc"; + uses PLMNId; + } + + + list coverage-area{ + uses coverageAreaGroup; + key "coverageArea"; + description "This list contains the list of coverage area of a PLMNID"; + } + + } + } -- 2.16.6