diff options
3 files changed, 244 insertions, 5 deletions
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 d6751bb4e2..904e8263b2 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 0000000000..c10c6d9c7c --- /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 0000000000..2a8a925798 --- /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 + <https://www.onap.org>"; + contact + "Editors: + Àhila Pandaram + <mailto:ahila.pandaram@wipro.com> + + Swaminathan Seetharaman + <mailto:swaminathan.seetharaman@wipro.com>"; + 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"; + } + + } + } |