diff options
-rw-r--r-- | cps-application/src/test/java/org/onap/cps/architecture/CpsArchitectureTest.java | 6 | ||||
-rw-r--r-- | cps-service/src/main/java/org/onap/cps/impl/CpsAnchorServiceImpl.java (renamed from cps-service/src/main/java/org/onap/cps/api/impl/CpsAnchorServiceImpl.java) | 2 | ||||
-rw-r--r-- | cps-service/src/main/java/org/onap/cps/impl/CpsDataServiceImpl.java (renamed from cps-service/src/main/java/org/onap/cps/api/impl/CpsDataServiceImpl.java) | 2 | ||||
-rw-r--r-- | cps-service/src/main/java/org/onap/cps/impl/CpsDataspaceServiceImpl.java (renamed from cps-service/src/main/java/org/onap/cps/api/impl/CpsDataspaceServiceImpl.java) | 2 | ||||
-rw-r--r-- | cps-service/src/main/java/org/onap/cps/impl/CpsDeltaServiceImpl.java (renamed from cps-service/src/main/java/org/onap/cps/api/impl/CpsDeltaServiceImpl.java) | 2 | ||||
-rw-r--r-- | cps-service/src/main/java/org/onap/cps/impl/CpsModuleServiceImpl.java (renamed from cps-service/src/main/java/org/onap/cps/api/impl/CpsModuleServiceImpl.java) | 2 | ||||
-rw-r--r-- | cps-service/src/main/java/org/onap/cps/impl/CpsQueryServiceImpl.java (renamed from cps-service/src/main/java/org/onap/cps/api/impl/CpsQueryServiceImpl.java) | 2 | ||||
-rw-r--r-- | cps-service/src/main/java/org/onap/cps/impl/YangTextSchemaSourceSetCache.java (renamed from cps-service/src/main/java/org/onap/cps/api/impl/YangTextSchemaSourceSetCache.java) | 2 | ||||
-rw-r--r-- | cps-service/src/main/java/org/onap/cps/utils/PrefixResolver.java | 2 | ||||
-rw-r--r-- | cps-service/src/main/java/org/onap/cps/utils/YangParser.java | 2 | ||||
-rw-r--r-- | cps-service/src/test/groovy/org/onap/cps/impl/CpsAnchorServiceImplSpec.groovy (renamed from cps-service/src/test/groovy/org/onap/cps/api/impl/CpsAnchorServiceImplSpec.groovy) | 3 | ||||
-rw-r--r-- | cps-service/src/test/groovy/org/onap/cps/impl/CpsDataServiceImplSpec.groovy (renamed from cps-service/src/test/groovy/org/onap/cps/api/impl/CpsDataServiceImplSpec.groovy) | 2 | ||||
-rw-r--r-- | cps-service/src/test/groovy/org/onap/cps/impl/CpsDataspaceServiceImplSpec.groovy (renamed from cps-service/src/test/groovy/org/onap/cps/api/impl/CpsDataspaceServiceImplSpec.groovy) | 3 | ||||
-rw-r--r-- | cps-service/src/test/groovy/org/onap/cps/impl/CpsDeltaServiceImplSpec.groovy (renamed from cps-service/src/test/groovy/org/onap/cps/api/impl/CpsDeltaServiceImplSpec.groovy) | 2 | ||||
-rw-r--r-- | cps-service/src/test/groovy/org/onap/cps/impl/CpsModuleServiceImplSpec.groovy (renamed from cps-service/src/test/groovy/org/onap/cps/api/impl/CpsModuleServiceImplSpec.groovy) | 2 | ||||
-rw-r--r-- | cps-service/src/test/groovy/org/onap/cps/impl/CpsQueryServiceImplSpec.groovy (renamed from cps-service/src/test/groovy/org/onap/cps/api/impl/CpsQueryServiceImplSpec.groovy) | 3 | ||||
-rwxr-xr-x | cps-service/src/test/groovy/org/onap/cps/impl/E2ENetworkSliceSpec.groovy (renamed from cps-service/src/test/groovy/org/onap/cps/api/impl/E2ENetworkSliceSpec.groovy) | 352 | ||||
-rw-r--r-- | cps-service/src/test/groovy/org/onap/cps/impl/YangTextSchemaSourceSetCacheSpec.groovy (renamed from cps-service/src/test/groovy/org/onap/cps/api/impl/YangTextSchemaSourceSetCacheSpec.groovy) | 2 | ||||
-rw-r--r-- | cps-service/src/test/groovy/org/onap/cps/utils/PrefixResolverSpec.groovy | 2 | ||||
-rw-r--r-- | cps-service/src/test/groovy/org/onap/cps/utils/YangParserSpec.groovy | 2 | ||||
-rw-r--r-- | docs/api/swagger/ncmp/openapi.yaml | 50 |
21 files changed, 219 insertions, 228 deletions
diff --git a/cps-application/src/test/java/org/onap/cps/architecture/CpsArchitectureTest.java b/cps-application/src/test/java/org/onap/cps/architecture/CpsArchitectureTest.java index e68343b364..06ca632f36 100644 --- a/cps-application/src/test/java/org/onap/cps/architecture/CpsArchitectureTest.java +++ b/cps-application/src/test/java/org/onap/cps/architecture/CpsArchitectureTest.java @@ -43,11 +43,9 @@ public class CpsArchitectureTest extends ArchitectureTestBase { @ArchTest static final ArchRule cpsServiceImplShouldDependOnServiceAndEventsAndPathParserPackages = - // I think impl package should be moved from the api package. - // So in a way this whole rule is breaking our architecture goals - classes().that().resideInAPackage("org.onap.cps.api.impl..").should().onlyDependOnClassesThat() + classes().that().resideInAPackage("org.onap.cps.impl..").should().onlyDependOnClassesThat() .resideInAnyPackage(commonAndListedPackages("org.onap.cps.api..", - "org.onap.cps.api.impl..", + "org.onap.cps.impl..", "org.onap.cps.events..", "org.onap.cps.impl.utils..", "org.onap.cps.spi..", diff --git a/cps-service/src/main/java/org/onap/cps/api/impl/CpsAnchorServiceImpl.java b/cps-service/src/main/java/org/onap/cps/impl/CpsAnchorServiceImpl.java index 2a2ddc6c11..fb22311128 100644 --- a/cps-service/src/main/java/org/onap/cps/api/impl/CpsAnchorServiceImpl.java +++ b/cps-service/src/main/java/org/onap/cps/impl/CpsAnchorServiceImpl.java @@ -18,7 +18,7 @@ * ============LICENSE_END========================================================= */ -package org.onap.cps.api.impl; +package org.onap.cps.impl; import java.util.Collection; import lombok.RequiredArgsConstructor; diff --git a/cps-service/src/main/java/org/onap/cps/api/impl/CpsDataServiceImpl.java b/cps-service/src/main/java/org/onap/cps/impl/CpsDataServiceImpl.java index 3b5baf5e68..f2513173a6 100644 --- a/cps-service/src/main/java/org/onap/cps/api/impl/CpsDataServiceImpl.java +++ b/cps-service/src/main/java/org/onap/cps/impl/CpsDataServiceImpl.java @@ -22,7 +22,7 @@ * ============LICENSE_END========================================================= */ -package org.onap.cps.api.impl; +package org.onap.cps.impl; import io.micrometer.core.annotation.Timed; import java.io.Serializable; diff --git a/cps-service/src/main/java/org/onap/cps/api/impl/CpsDataspaceServiceImpl.java b/cps-service/src/main/java/org/onap/cps/impl/CpsDataspaceServiceImpl.java index af48f202bb..15caa2276d 100644 --- a/cps-service/src/main/java/org/onap/cps/api/impl/CpsDataspaceServiceImpl.java +++ b/cps-service/src/main/java/org/onap/cps/impl/CpsDataspaceServiceImpl.java @@ -21,7 +21,7 @@ * ============LICENSE_END========================================================= */ -package org.onap.cps.api.impl; +package org.onap.cps.impl; import java.util.Collection; import lombok.RequiredArgsConstructor; diff --git a/cps-service/src/main/java/org/onap/cps/api/impl/CpsDeltaServiceImpl.java b/cps-service/src/main/java/org/onap/cps/impl/CpsDeltaServiceImpl.java index a515b5d65a..7a9d142506 100644 --- a/cps-service/src/main/java/org/onap/cps/api/impl/CpsDeltaServiceImpl.java +++ b/cps-service/src/main/java/org/onap/cps/impl/CpsDeltaServiceImpl.java @@ -18,7 +18,7 @@ * ============LICENSE_END========================================================= */ -package org.onap.cps.api.impl; +package org.onap.cps.impl; import java.io.Serializable; import java.util.ArrayList; diff --git a/cps-service/src/main/java/org/onap/cps/api/impl/CpsModuleServiceImpl.java b/cps-service/src/main/java/org/onap/cps/impl/CpsModuleServiceImpl.java index 6740262bcc..7622ba5fe2 100644 --- a/cps-service/src/main/java/org/onap/cps/api/impl/CpsModuleServiceImpl.java +++ b/cps-service/src/main/java/org/onap/cps/impl/CpsModuleServiceImpl.java @@ -21,7 +21,7 @@ * ============LICENSE_END========================================================= */ -package org.onap.cps.api.impl; +package org.onap.cps.impl; import io.micrometer.core.annotation.Timed; import java.util.Collection; diff --git a/cps-service/src/main/java/org/onap/cps/api/impl/CpsQueryServiceImpl.java b/cps-service/src/main/java/org/onap/cps/impl/CpsQueryServiceImpl.java index 1d6f0c3ab6..e534e0aea1 100644 --- a/cps-service/src/main/java/org/onap/cps/api/impl/CpsQueryServiceImpl.java +++ b/cps-service/src/main/java/org/onap/cps/impl/CpsQueryServiceImpl.java @@ -19,7 +19,7 @@ * ============LICENSE_END========================================================= */ -package org.onap.cps.api.impl; +package org.onap.cps.impl; import io.micrometer.core.annotation.Timed; import java.util.Collection; diff --git a/cps-service/src/main/java/org/onap/cps/api/impl/YangTextSchemaSourceSetCache.java b/cps-service/src/main/java/org/onap/cps/impl/YangTextSchemaSourceSetCache.java index b893bcea09..688669c941 100644 --- a/cps-service/src/main/java/org/onap/cps/api/impl/YangTextSchemaSourceSetCache.java +++ b/cps-service/src/main/java/org/onap/cps/impl/YangTextSchemaSourceSetCache.java @@ -20,7 +20,7 @@ * ============LICENSE_END========================================================= */ -package org.onap.cps.api.impl; +package org.onap.cps.impl; import com.google.errorprone.annotations.CanIgnoreReturnValue; import io.micrometer.core.instrument.Metrics; diff --git a/cps-service/src/main/java/org/onap/cps/utils/PrefixResolver.java b/cps-service/src/main/java/org/onap/cps/utils/PrefixResolver.java index 646ed556f5..bd348a25d1 100644 --- a/cps-service/src/main/java/org/onap/cps/utils/PrefixResolver.java +++ b/cps-service/src/main/java/org/onap/cps/utils/PrefixResolver.java @@ -21,11 +21,11 @@ package org.onap.cps.utils; import lombok.RequiredArgsConstructor; -import org.onap.cps.api.impl.YangTextSchemaSourceSetCache; import org.onap.cps.api.model.Anchor; import org.onap.cps.cpspath.parser.CpsPathPrefixType; import org.onap.cps.cpspath.parser.CpsPathQuery; import org.onap.cps.cpspath.parser.CpsPathUtil; +import org.onap.cps.impl.YangTextSchemaSourceSetCache; import org.onap.cps.yang.YangTextSchemaSourceSet; import org.opendaylight.yangtools.yang.common.QName; import org.opendaylight.yangtools.yang.model.api.DataNodeContainer; diff --git a/cps-service/src/main/java/org/onap/cps/utils/YangParser.java b/cps-service/src/main/java/org/onap/cps/utils/YangParser.java index 7fa10a134a..08f450e2f1 100644 --- a/cps-service/src/main/java/org/onap/cps/utils/YangParser.java +++ b/cps-service/src/main/java/org/onap/cps/utils/YangParser.java @@ -29,8 +29,8 @@ import java.util.Map; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.onap.cps.api.exceptions.DataValidationException; -import org.onap.cps.api.impl.YangTextSchemaSourceSetCache; import org.onap.cps.api.model.Anchor; +import org.onap.cps.impl.YangTextSchemaSourceSetCache; import org.onap.cps.yang.TimedYangTextSchemaSourceSetBuilder; import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode; import org.opendaylight.yangtools.yang.model.api.SchemaContext; diff --git a/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsAnchorServiceImplSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/impl/CpsAnchorServiceImplSpec.groovy index 223ae71987..22f5c9f83e 100644 --- a/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsAnchorServiceImplSpec.groovy +++ b/cps-service/src/test/groovy/org/onap/cps/impl/CpsAnchorServiceImplSpec.groovy @@ -18,7 +18,8 @@ * ============LICENSE_END========================================================= */ -package org.onap.cps.api.impl +package org.onap.cps.impl + import org.onap.cps.impl.utils.CpsValidator import org.onap.cps.spi.CpsAdminPersistenceService diff --git a/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsDataServiceImplSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/impl/CpsDataServiceImplSpec.groovy index ff44cb20a2..3ea859ae6d 100644 --- a/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsDataServiceImplSpec.groovy +++ b/cps-service/src/test/groovy/org/onap/cps/impl/CpsDataServiceImplSpec.groovy @@ -21,7 +21,7 @@ * ============LICENSE_END========================================================= */ -package org.onap.cps.api.impl +package org.onap.cps.impl import ch.qos.logback.classic.Level import ch.qos.logback.classic.Logger diff --git a/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsDataspaceServiceImplSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/impl/CpsDataspaceServiceImplSpec.groovy index ae68929c42..468fe76d41 100644 --- a/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsDataspaceServiceImplSpec.groovy +++ b/cps-service/src/test/groovy/org/onap/cps/impl/CpsDataspaceServiceImplSpec.groovy @@ -18,7 +18,8 @@ * ============LICENSE_END========================================================= */ -package org.onap.cps.api.impl +package org.onap.cps.impl + import org.onap.cps.impl.utils.CpsValidator import org.onap.cps.spi.CpsAdminPersistenceService diff --git a/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsDeltaServiceImplSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/impl/CpsDeltaServiceImplSpec.groovy index 65dac62710..d3dfcf8826 100644 --- a/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsDeltaServiceImplSpec.groovy +++ b/cps-service/src/test/groovy/org/onap/cps/impl/CpsDeltaServiceImplSpec.groovy @@ -18,7 +18,7 @@ * ============LICENSE_END========================================================= */ -package org.onap.cps.api.impl +package org.onap.cps.impl import org.onap.cps.api.model.DataNode import spock.lang.Specification diff --git a/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsModuleServiceImplSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/impl/CpsModuleServiceImplSpec.groovy index d1101fc248..ce871621e5 100644 --- a/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsModuleServiceImplSpec.groovy +++ b/cps-service/src/test/groovy/org/onap/cps/impl/CpsModuleServiceImplSpec.groovy @@ -21,7 +21,7 @@ * ============LICENSE_END========================================================= */ -package org.onap.cps.api.impl +package org.onap.cps.impl import org.onap.cps.TestUtils import org.onap.cps.api.CpsAnchorService diff --git a/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsQueryServiceImplSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/impl/CpsQueryServiceImplSpec.groovy index 7d2932570e..80db83b27a 100644 --- a/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsQueryServiceImplSpec.groovy +++ b/cps-service/src/test/groovy/org/onap/cps/impl/CpsQueryServiceImplSpec.groovy @@ -19,7 +19,8 @@ * ============LICENSE_END========================================================= */ -package org.onap.cps.api.impl +package org.onap.cps.impl + import org.onap.cps.impl.utils.CpsValidator import org.onap.cps.spi.CpsDataPersistenceService diff --git a/cps-service/src/test/groovy/org/onap/cps/api/impl/E2ENetworkSliceSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/impl/E2ENetworkSliceSpec.groovy index f2fed7c899..4ab71f7228 100755 --- a/cps-service/src/test/groovy/org/onap/cps/api/impl/E2ENetworkSliceSpec.groovy +++ b/cps-service/src/test/groovy/org/onap/cps/impl/E2ENetworkSliceSpec.groovy @@ -1,176 +1,176 @@ -/*
- * ============LICENSE_START=======================================================
- * Copyright (C) 2021-2024 Nordix Foundation.
- * Modifications Copyright (C) 2021-2022 Bell Canada.
- * Modifications Copyright (C) 2021 Pantheon.tech
- * Modifications Copyright (C) 2022-2024 TechMahindra Ltd.
- * ================================================================================
- * 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.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.cps.api.impl
-
-import com.fasterxml.jackson.databind.ObjectMapper
-import org.onap.cps.TestUtils
-import org.onap.cps.api.CpsAnchorService
-import org.onap.cps.api.CpsDeltaService
-import org.onap.cps.events.CpsDataUpdateEventsService
-import org.onap.cps.impl.utils.CpsValidator
-import org.onap.cps.spi.CpsDataPersistenceService
-import org.onap.cps.spi.CpsModulePersistenceService
-import org.onap.cps.api.model.Anchor
-import org.onap.cps.utils.ContentType
-import org.onap.cps.utils.JsonObjectMapper
-import org.onap.cps.utils.PrefixResolver
-import org.onap.cps.utils.YangParser
-import org.onap.cps.utils.YangParserHelper
-import org.onap.cps.yang.TimedYangTextSchemaSourceSetBuilder
-import org.onap.cps.yang.YangTextSchemaSourceSetBuilder
-import spock.lang.Specification
-
-class E2ENetworkSliceSpec extends Specification {
- def mockModuleStoreService = Mock(CpsModulePersistenceService)
- def mockDataStoreService = Mock(CpsDataPersistenceService)
- def mockCpsAnchorService = Mock(CpsAnchorService)
- def mockYangTextSchemaSourceSetCache = Mock(YangTextSchemaSourceSetCache)
- def mockCpsValidator = Mock(CpsValidator)
- def timedYangTextSchemaSourceSetBuilder = new TimedYangTextSchemaSourceSetBuilder()
- def yangParser = new YangParser(new YangParserHelper(), mockYangTextSchemaSourceSetCache, timedYangTextSchemaSourceSetBuilder)
- def mockCpsDeltaService = Mock(CpsDeltaService)
- def jsonObjectMapper = new JsonObjectMapper(new ObjectMapper())
- def mockPrefixResolver = Mock(PrefixResolver)
-
- def cpsModuleServiceImpl = new CpsModuleServiceImpl(mockModuleStoreService,
- mockYangTextSchemaSourceSetCache, mockCpsAnchorService, mockCpsValidator,timedYangTextSchemaSourceSetBuilder)
-
- def mockDataUpdateEventsService = Mock(CpsDataUpdateEventsService)
- def cpsDataServiceImpl = new CpsDataServiceImpl(mockDataStoreService, mockDataUpdateEventsService, mockCpsAnchorService, mockCpsValidator,
- yangParser, mockCpsDeltaService, jsonObjectMapper, mockPrefixResolver)
- def dataspaceName = 'someDataspace'
- def anchorName = 'someAnchor'
- def schemaSetName = 'someSchemaSet'
- def noTimestamp = null
-
- def 'E2E model can be parsed by CPS.'() {
- given: 'Valid yang resource as name-to-content map'
- 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'
- 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()
- def dataNodeStored
- and : 'a valid json is provided for the model'
- def jsonData = TestUtils.getResourceFileContent('e2e/basic/cps-Cavsta-Data.txt')
- and : 'all the further dependencies are mocked '
- mockCpsAnchorService.getAnchor(dataspaceName, anchorName) >>
- new Anchor().builder().name(anchorName).schemaSetName(schemaSetName).dataspaceName(dataspaceName).build()
- mockYangTextSchemaSourceSetCache.get(dataspaceName, schemaSetName) >>
- YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap)
- mockModuleStoreService.getYangSchemaResources(dataspaceName, schemaSetName) >> schemaContext
- when: 'saveData method is invoked'
- cpsDataServiceImpl.saveData(dataspaceName, anchorName, jsonData, noTimestamp)
- then: 'Parameters are validated and processing is delegated to persistence service'
- 1 * mockDataStoreService.storeDataNodes('someDataspace', 'someAnchor', _) >>
- { args -> dataNodeStored = args[2]}
- def child = dataNodeStored[0].childDataNodes[0]
- assert child.childDataNodes.size() == 1
- and: 'list of Tracking Area for a Coverage Area are stored with correct xpath and child nodes '
- def listOfTAForCoverageArea = child.childDataNodes[0]
- listOfTAForCoverageArea.xpath == '/ran-coverage-area/pLMNIdList[@mcc=\'310\' and @mnc=\'410\']/' +
- 'coverage-area[@coverageArea=\'Washington\']'
- listOfTAForCoverageArea.childDataNodes[0].leaves.get('nRTAC') == 234
- and: 'list of cells in a tracking area are stored with correct xpath and child nodes '
- def listOfCellsInTrackingArea = listOfTAForCoverageArea.childDataNodes[0]
- listOfCellsInTrackingArea.xpath == '/ran-coverage-area/pLMNIdList[@mcc=\'310\' and @mnc=\'410\']/' +
- 'coverage-area[@coverageArea=\'Washington\']/coverageAreaTAList[@nRTAC=\'234\']'
- listOfCellsInTrackingArea.childDataNodes[0].leaves.get('cellLocalId') == 15709
- }
-
- def 'E2E Coverage Area-Tracking Area & TA-Cell mapping data can be parsed for RAN inventory.'() {
- def dataNodeStored
- given: 'valid yang resource as name-to-content map'
- def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap(
- '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')
- and : 'all the further dependencies are mocked '
- mockCpsAnchorService.getAnchor('someDataspace', 'someAnchor') >>
- new Anchor().builder().name('someAnchor').schemaSetName('someSchemaSet').dataspaceName(dataspaceName).build()
- mockYangTextSchemaSourceSetCache.get('someDataspace', 'someSchemaSet') >> YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap)
- mockModuleStoreService.getYangSchemaResources('someDataspace', 'someSchemaSet') >> schemaContext
- when: 'saveData method is invoked'
- cpsDataServiceImpl.saveData('someDataspace', 'someAnchor', jsonData, noTimestamp)
- then: 'parameters are validated and processing is delegated to persistence service'
- 1 * mockDataStoreService.storeDataNodes('someDataspace', 'someAnchor', _) >>
- { args -> dataNodeStored = args[2]}
- and: 'the size of the tree is correct'
- def cpsRanInventory = TestUtils.getFlattenMapByXpath(dataNodeStored[0])
- assert cpsRanInventory.size() == 4
- and: 'ran-inventory contains the correct child node'
- def ranInventory = cpsRanInventory.get('/ran-inventory')
- 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 == 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 no children'
- pLMNIdList.getChildDataNodes().size() == 0
-
- }
-
- 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'
- new YangParserHelper().parseData(ContentType.JSON, jsonData, schemaContext, '', false) != null
- }
-}
+/* + * ============LICENSE_START======================================================= + * Copyright (C) 2021-2024 Nordix Foundation. + * Modifications Copyright (C) 2021-2022 Bell Canada. + * Modifications Copyright (C) 2021 Pantheon.tech + * Modifications Copyright (C) 2022-2024 TechMahindra Ltd. + * ================================================================================ + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.cps.impl + +import com.fasterxml.jackson.databind.ObjectMapper +import org.onap.cps.TestUtils +import org.onap.cps.api.CpsAnchorService +import org.onap.cps.api.CpsDeltaService +import org.onap.cps.events.CpsDataUpdateEventsService +import org.onap.cps.impl.utils.CpsValidator +import org.onap.cps.spi.CpsDataPersistenceService +import org.onap.cps.spi.CpsModulePersistenceService +import org.onap.cps.api.model.Anchor +import org.onap.cps.utils.ContentType +import org.onap.cps.utils.JsonObjectMapper +import org.onap.cps.utils.PrefixResolver +import org.onap.cps.utils.YangParser +import org.onap.cps.utils.YangParserHelper +import org.onap.cps.yang.TimedYangTextSchemaSourceSetBuilder +import org.onap.cps.yang.YangTextSchemaSourceSetBuilder +import spock.lang.Specification + +class E2ENetworkSliceSpec extends Specification { + def mockModuleStoreService = Mock(CpsModulePersistenceService) + def mockDataStoreService = Mock(CpsDataPersistenceService) + def mockCpsAnchorService = Mock(CpsAnchorService) + def mockYangTextSchemaSourceSetCache = Mock(YangTextSchemaSourceSetCache) + def mockCpsValidator = Mock(CpsValidator) + def timedYangTextSchemaSourceSetBuilder = new TimedYangTextSchemaSourceSetBuilder() + def yangParser = new YangParser(new YangParserHelper(), mockYangTextSchemaSourceSetCache, timedYangTextSchemaSourceSetBuilder) + def mockCpsDeltaService = Mock(CpsDeltaService) + def jsonObjectMapper = new JsonObjectMapper(new ObjectMapper()) + def mockPrefixResolver = Mock(PrefixResolver) + + def cpsModuleServiceImpl = new CpsModuleServiceImpl(mockModuleStoreService, + mockYangTextSchemaSourceSetCache, mockCpsAnchorService, mockCpsValidator,timedYangTextSchemaSourceSetBuilder) + + def mockDataUpdateEventsService = Mock(CpsDataUpdateEventsService) + def cpsDataServiceImpl = new CpsDataServiceImpl(mockDataStoreService, mockDataUpdateEventsService, mockCpsAnchorService, mockCpsValidator, + yangParser, mockCpsDeltaService, jsonObjectMapper, mockPrefixResolver) + def dataspaceName = 'someDataspace' + def anchorName = 'someAnchor' + def schemaSetName = 'someSchemaSet' + def noTimestamp = null + + def 'E2E model can be parsed by CPS.'() { + given: 'Valid yang resource as name-to-content map' + 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' + 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() + def dataNodeStored + and : 'a valid json is provided for the model' + def jsonData = TestUtils.getResourceFileContent('e2e/basic/cps-Cavsta-Data.txt') + and : 'all the further dependencies are mocked ' + mockCpsAnchorService.getAnchor(dataspaceName, anchorName) >> + new Anchor().builder().name(anchorName).schemaSetName(schemaSetName).dataspaceName(dataspaceName).build() + mockYangTextSchemaSourceSetCache.get(dataspaceName, schemaSetName) >> + YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap) + mockModuleStoreService.getYangSchemaResources(dataspaceName, schemaSetName) >> schemaContext + when: 'saveData method is invoked' + cpsDataServiceImpl.saveData(dataspaceName, anchorName, jsonData, noTimestamp) + then: 'Parameters are validated and processing is delegated to persistence service' + 1 * mockDataStoreService.storeDataNodes('someDataspace', 'someAnchor', _) >> + { args -> dataNodeStored = args[2]} + def child = dataNodeStored[0].childDataNodes[0] + assert child.childDataNodes.size() == 1 + and: 'list of Tracking Area for a Coverage Area are stored with correct xpath and child nodes ' + def listOfTAForCoverageArea = child.childDataNodes[0] + listOfTAForCoverageArea.xpath == '/ran-coverage-area/pLMNIdList[@mcc=\'310\' and @mnc=\'410\']/' + + 'coverage-area[@coverageArea=\'Washington\']' + listOfTAForCoverageArea.childDataNodes[0].leaves.get('nRTAC') == 234 + and: 'list of cells in a tracking area are stored with correct xpath and child nodes ' + def listOfCellsInTrackingArea = listOfTAForCoverageArea.childDataNodes[0] + listOfCellsInTrackingArea.xpath == '/ran-coverage-area/pLMNIdList[@mcc=\'310\' and @mnc=\'410\']/' + + 'coverage-area[@coverageArea=\'Washington\']/coverageAreaTAList[@nRTAC=\'234\']' + listOfCellsInTrackingArea.childDataNodes[0].leaves.get('cellLocalId') == 15709 + } + + def 'E2E Coverage Area-Tracking Area & TA-Cell mapping data can be parsed for RAN inventory.'() { + def dataNodeStored + given: 'valid yang resource as name-to-content map' + def yangResourcesNameToContentMap = TestUtils.getYangResourcesAsMap( + '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') + and : 'all the further dependencies are mocked ' + mockCpsAnchorService.getAnchor('someDataspace', 'someAnchor') >> + new Anchor().builder().name('someAnchor').schemaSetName('someSchemaSet').dataspaceName(dataspaceName).build() + mockYangTextSchemaSourceSetCache.get('someDataspace', 'someSchemaSet') >> YangTextSchemaSourceSetBuilder.of(yangResourcesNameToContentMap) + mockModuleStoreService.getYangSchemaResources('someDataspace', 'someSchemaSet') >> schemaContext + when: 'saveData method is invoked' + cpsDataServiceImpl.saveData('someDataspace', 'someAnchor', jsonData, noTimestamp) + then: 'parameters are validated and processing is delegated to persistence service' + 1 * mockDataStoreService.storeDataNodes('someDataspace', 'someAnchor', _) >> + { args -> dataNodeStored = args[2]} + and: 'the size of the tree is correct' + def cpsRanInventory = TestUtils.getFlattenMapByXpath(dataNodeStored[0]) + assert cpsRanInventory.size() == 4 + and: 'ran-inventory contains the correct child node' + def ranInventory = cpsRanInventory.get('/ran-inventory') + 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 == 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 no children' + pLMNIdList.getChildDataNodes().size() == 0 + + } + + 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' + new YangParserHelper().parseData(ContentType.JSON, jsonData, schemaContext, '', false) != null + } +} diff --git a/cps-service/src/test/groovy/org/onap/cps/api/impl/YangTextSchemaSourceSetCacheSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/impl/YangTextSchemaSourceSetCacheSpec.groovy index 5b9d11f439..fe49d04f3c 100644 --- a/cps-service/src/test/groovy/org/onap/cps/api/impl/YangTextSchemaSourceSetCacheSpec.groovy +++ b/cps-service/src/test/groovy/org/onap/cps/impl/YangTextSchemaSourceSetCacheSpec.groovy @@ -19,7 +19,7 @@ * ============LICENSE_END========================================================= */ -package org.onap.cps.api.impl +package org.onap.cps.impl import org.onap.cps.TestUtils import org.onap.cps.impl.utils.CpsValidator diff --git a/cps-service/src/test/groovy/org/onap/cps/utils/PrefixResolverSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/utils/PrefixResolverSpec.groovy index f80678f7d3..3198e54092 100644 --- a/cps-service/src/test/groovy/org/onap/cps/utils/PrefixResolverSpec.groovy +++ b/cps-service/src/test/groovy/org/onap/cps/utils/PrefixResolverSpec.groovy @@ -23,7 +23,7 @@ package org.onap.cps.utils import org.onap.cps.TestUtils -import org.onap.cps.api.impl.YangTextSchemaSourceSetCache +import org.onap.cps.impl.YangTextSchemaSourceSetCache import org.onap.cps.api.model.Anchor import org.onap.cps.yang.YangTextSchemaSourceSet import org.onap.cps.yang.YangTextSchemaSourceSetBuilder diff --git a/cps-service/src/test/groovy/org/onap/cps/utils/YangParserSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/utils/YangParserSpec.groovy index 62c681eb07..a2fadb7e9f 100644 --- a/cps-service/src/test/groovy/org/onap/cps/utils/YangParserSpec.groovy +++ b/cps-service/src/test/groovy/org/onap/cps/utils/YangParserSpec.groovy @@ -29,7 +29,7 @@ import org.onap.cps.yang.YangTextSchemaSourceSet import org.opendaylight.yangtools.yang.data.api.schema.ContainerNode import org.opendaylight.yangtools.yang.model.api.SchemaContext import spock.lang.Specification -import org.onap.cps.api.impl.YangTextSchemaSourceSetCache +import org.onap.cps.impl.YangTextSchemaSourceSetCache class YangParserSpec extends Specification { diff --git a/docs/api/swagger/ncmp/openapi.yaml b/docs/api/swagger/ncmp/openapi.yaml index 4e369f5dce..692266183b 100644 --- a/docs/api/swagger/ncmp/openapi.yaml +++ b/docs/api/swagger/ncmp/openapi.yaml @@ -38,7 +38,7 @@ paths: examples: sample 1: value: - resourceIdentifier: "\GNBDUFunction" + resourceIdentifier: \GNBDUFunction sample 2: value: resourceIdentifier: "\\GNBDUFunction[@gNBId='1001']" @@ -155,7 +155,7 @@ paths: examples: sample 1: value: - resourceIdentifier: "\GNBDUFunction" + resourceIdentifier: \GNBDUFunction sample 2: value: resourceIdentifier: "\\GNBDUFunction[@gNBId='1001']" @@ -299,7 +299,7 @@ paths: examples: sample 1: value: - resourceIdentifier: "\GNBDUFunction" + resourceIdentifier: \GNBDUFunction sample 2: value: resourceIdentifier: "\\GNBDUFunction[@gNBId='1001']" @@ -419,7 +419,7 @@ paths: examples: sample 1: value: - resourceIdentifier: "\GNBDUFunction" + resourceIdentifier: \GNBDUFunction sample 2: value: resourceIdentifier: "\\GNBDUFunction[@gNBId='1001']" @@ -544,7 +544,7 @@ paths: examples: sample 1: value: - resourceIdentifier: "\GNBDUFunction" + resourceIdentifier: \GNBDUFunction sample 2: value: resourceIdentifier: "\\GNBDUFunction[@gNBId='1001']" @@ -1542,7 +1542,7 @@ components: examples: sample 1: value: - resourceIdentifier: "\GNBDUFunction" + resourceIdentifier: \GNBDUFunction sample 2: value: resourceIdentifier: "\\GNBDUFunction[@gNBId='1001']" @@ -1872,19 +1872,13 @@ components: RestModuleDefinition: example: moduleName: my-module-name - content: | - module _3gpp-nr-nrm-gnbdufunction { - yang-version 1.1; - namespace 'urn:3gpp:sa5:_3gpp-nr-nrm-gnbdufunction'; - prefix gnbdu3gpp; - revision '2020-09-15' { - description - 'Defines the YANG mapping of the GNBDUFunction Information - Object Class (IOC) that is part of the NR Network Resource Model (NRM). - Copyright 2024, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, - TTA, TTC). All rights reserved.'; - } - } + content: "module _3gpp-nr-nrm-gnbdufunction {\n yang-version 1.1;\n namespace\ + \ 'urn:3gpp:sa5:_3gpp-nr-nrm-gnbdufunction';\n prefix gnbdu3gpp;\n revision\ + \ '2020-09-15' {\n description\n 'Defines the YANG mapping of the\ + \ GNBDUFunction Information \n Object Class (IOC) that is part of the\ + \ NR Network Resource Model (NRM). \n Copyright 2024, 3GPP Organizational\ + \ Partners (ARIB, ATIS, CCSA, ETSI, TSDSI,\n TTA, TTC). All rights reserved.';\n\ + \ }\n}\n" revision: 2020-09-15 properties: moduleName: @@ -1894,17 +1888,13 @@ components: example: 2020-09-15 type: string content: - example: | - module _3gpp-nr-nrm-gnbdufunction { - yang-version 1.1; - namespace 'urn:3gpp:sa5:_3gpp-nr-nrm-gnbdufunction'; - prefix gnbdu3gpp; - revision '2020-09-15' { - description - 'Defines the YANG mapping of the GNBDUFunction Information - Object Class (IOC) that is part of the NR Network Resource Model (NRM). - Copyright 2024, 3GPP Organizational Partners (ARIB, ATIS, CCSA, ETSI, TSDSI, - TTA, TTC). All rights reserved.'; + example: "module _3gpp-nr-nrm-gnbdufunction {\n yang-version 1.1;\n namespace\ + \ 'urn:3gpp:sa5:_3gpp-nr-nrm-gnbdufunction';\n prefix gnbdu3gpp;\n revision\ + \ '2020-09-15' {\n description\n 'Defines the YANG mapping of the\ + \ GNBDUFunction Information \n Object Class (IOC) that is part of\ + \ the NR Network Resource Model (NRM). \n Copyright 2024, 3GPP Organizational\ + \ Partners (ARIB, ATIS, CCSA, ETSI, TSDSI,\n TTA, TTC). All rights\ + \ reserved.';\n }\n}\n" type: string title: Module definitions type: object |