diff options
29 files changed, 402 insertions, 96 deletions
diff --git a/checkstyle/pom.xml b/checkstyle/pom.xml index 83d180890..a59208516 100644 --- a/checkstyle/pom.xml +++ b/checkstyle/pom.xml @@ -5,7 +5,7 @@ <modelVersion>4.0.0</modelVersion> <groupId>org.onap.cps</groupId> <artifactId>checkstyle</artifactId> - <version>0.0.1-SNAPSHOT</version> + <version>0.0.2-SNAPSHOT</version> <properties> <nexusproxy>https://nexus.onap.org</nexusproxy> diff --git a/cps-application/pom.xml b/cps-application/pom.xml index 685029b80..8ea2db384 100644 --- a/cps-application/pom.xml +++ b/cps-application/pom.xml @@ -26,7 +26,7 @@ <parent> <groupId>org.onap.cps</groupId> <artifactId>cps-parent</artifactId> - <version>0.0.1-SNAPSHOT</version> + <version>0.0.2-SNAPSHOT</version> <relativePath>../cps-parent/pom.xml</relativePath> </parent> diff --git a/cps-bom/pom.xml b/cps-bom/pom.xml index 9ae8a80b3..cf5025d39 100644 --- a/cps-bom/pom.xml +++ b/cps-bom/pom.xml @@ -5,7 +5,7 @@ <modelVersion>4.0.0</modelVersion> <groupId>org.onap.cps</groupId> <artifactId>cps-bom</artifactId> - <version>0.0.1-SNAPSHOT</version> + <version>0.0.2-SNAPSHOT</version> <packaging>pom</packaging> <description>This artifact contains dependencyManagement declarations of all published CPS components.</description> diff --git a/cps-dependencies/pom.xml b/cps-dependencies/pom.xml index 1beee115b..8e0510580 100755 --- a/cps-dependencies/pom.xml +++ b/cps-dependencies/pom.xml @@ -6,7 +6,7 @@ <modelVersion>4.0.0</modelVersion> <groupId>org.onap.cps</groupId> <artifactId>cps-dependencies</artifactId> - <version>0.0.1-SNAPSHOT</version> + <version>0.0.2-SNAPSHOT</version> <packaging>pom</packaging> <name>${project.groupId}:${project.artifactId}</name> diff --git a/cps-nf-proxy-rest/pom.xml b/cps-nf-proxy-rest/pom.xml index 94420f7fd..ac891e15c 100755 --- a/cps-nf-proxy-rest/pom.xml +++ b/cps-nf-proxy-rest/pom.xml @@ -5,7 +5,7 @@ <parent> <groupId>org.onap.cps</groupId> <artifactId>cps-parent</artifactId> - <version>0.0.1-SNAPSHOT</version> + <version>0.0.2-SNAPSHOT</version> <relativePath>../cps-parent/pom.xml</relativePath> </parent> diff --git a/cps-nf-proxy-service/pom.xml b/cps-nf-proxy-service/pom.xml index d32d0ad38..67ffaeb20 100644 --- a/cps-nf-proxy-service/pom.xml +++ b/cps-nf-proxy-service/pom.xml @@ -6,7 +6,7 @@ <parent> <groupId>org.onap.cps</groupId> <artifactId>cps-parent</artifactId> - <version>0.0.1-SNAPSHOT</version> + <version>0.0.2-SNAPSHOT</version> <relativePath>../cps-parent/pom.xml</relativePath> </parent> diff --git a/cps-parent/pom.xml b/cps-parent/pom.xml index 91d1f4186..0f8e64323 100755 --- a/cps-parent/pom.xml +++ b/cps-parent/pom.xml @@ -24,14 +24,14 @@ <parent> <groupId>org.onap.oparent</groupId> <artifactId>oparent</artifactId> - <version>3.1.0</version> + <version>3.2.0</version> <relativePath/> </parent> <modelVersion>4.0.0</modelVersion> <groupId>org.onap.cps</groupId> <artifactId>cps-parent</artifactId> - <version>0.0.1-SNAPSHOT</version> + <version>0.0.2-SNAPSHOT</version> <packaging>pom</packaging> <properties> diff --git a/cps-rest/docs/api/swagger/components.yml b/cps-rest/docs/api/swagger/components.yml index 3694f36cd..bb1f12002 100755 --- a/cps-rest/docs/api/swagger/components.yml +++ b/cps-rest/docs/api/swagger/components.yml @@ -75,6 +75,14 @@ components: schema: type: string default: / + cpsPathInQuery: + name: cps-path + in: query + description: cps-path + required: false + schema: + type: string + default: / includeDescendantsOptionInQuery: name: include-descendants in: query diff --git a/cps-rest/docs/api/swagger/cpsQuery.yml b/cps-rest/docs/api/swagger/cpsQuery.yml new file mode 100644 index 000000000..91a4bdbfa --- /dev/null +++ b/cps-rest/docs/api/swagger/cpsQuery.yml @@ -0,0 +1,23 @@ +nodesByDataspaceAndAnchorAndCpsPath: + get: + description: Query data nodes for the given dataspace and anchor using CPS path + tags: + - cps-query + summary: Query data nodes + operationId: getNodesByDataspaceAndAnchorAndCpsPath + parameters: + - $ref: 'components.yml#/components/parameters/dataspaceNameInPath' + - $ref: 'components.yml#/components/parameters/anchorNameInPath' + - $ref: 'components.yml#/components/parameters/cpsPathInQuery' + responses: + '200': + $ref: 'components.yml#/components/responses/Ok' + '400': + $ref: 'components.yml#/components/responses/BadRequest' + '401': + $ref: 'components.yml#/components/responses/Unauthorized' + '403': + $ref: 'components.yml#/components/responses/Forbidden' + '404': + $ref: 'components.yml#/components/responses/NotFound' + x-codegen-request-body-name: xpath
\ No newline at end of file diff --git a/cps-rest/docs/api/swagger/openapi.yml b/cps-rest/docs/api/swagger/openapi.yml index 2ead20239..38fbebe67 100755 --- a/cps-rest/docs/api/swagger/openapi.yml +++ b/cps-rest/docs/api/swagger/openapi.yml @@ -50,3 +50,6 @@ paths: /v1/dataspaces/{dataspace-name}/nodes: $ref: 'cpsData.yml#/nodesByDataspace' + + /v1/dataspaces/{dataspace-name}/anchors/{anchor-name}/nodes/query: + $ref: 'cpsQuery.yml#/nodesByDataspaceAndAnchorAndCpsPath'
\ No newline at end of file diff --git a/cps-rest/pom.xml b/cps-rest/pom.xml index 2bb053b81..840228eb9 100755 --- a/cps-rest/pom.xml +++ b/cps-rest/pom.xml @@ -5,7 +5,7 @@ <parent> <groupId>org.onap.cps</groupId> <artifactId>cps-parent</artifactId> - <version>0.0.1-SNAPSHOT</version> + <version>0.0.2-SNAPSHOT</version> <relativePath>../cps-parent/pom.xml</relativePath> </parent> diff --git a/cps-rest/src/main/java/org/onap/cps/rest/controller/QueryRestController.java b/cps-rest/src/main/java/org/onap/cps/rest/controller/QueryRestController.java new file mode 100644 index 000000000..a8816f02b --- /dev/null +++ b/cps-rest/src/main/java/org/onap/cps/rest/controller/QueryRestController.java @@ -0,0 +1,48 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix Foundation + * ================================================================================ + * 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.rest.controller; + +import com.google.gson.Gson; +import java.util.Collection; +import javax.validation.Valid; +import org.onap.cps.api.CpsQueryService; +import org.onap.cps.rest.api.CpsQueryApi; +import org.onap.cps.spi.model.DataNode; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("${rest.api.cps-base-path}") +public class QueryRestController implements CpsQueryApi { + + @Autowired + private CpsQueryService cpsQueryService; + + @Override + public ResponseEntity<Object> getNodesByDataspaceAndAnchorAndCpsPath(final String dataspaceName, + final String anchorName, @Valid final String cpsPath) { + final Collection<DataNode> dataNodes = + cpsQueryService.queryDataNodes(dataspaceName, anchorName, cpsPath); + return new ResponseEntity<>(new Gson().toJson(dataNodes), HttpStatus.OK); + } +} diff --git a/cps-rest/src/test/groovy/org/onap/cps/rest/controller/AdminRestControllerSpec.groovy b/cps-rest/src/test/groovy/org/onap/cps/rest/controller/AdminRestControllerSpec.groovy index 926021e81..ca99743ca 100755 --- a/cps-rest/src/test/groovy/org/onap/cps/rest/controller/AdminRestControllerSpec.groovy +++ b/cps-rest/src/test/groovy/org/onap/cps/rest/controller/AdminRestControllerSpec.groovy @@ -2,6 +2,7 @@ * ============LICENSE_START======================================================= * Copyright (C) 2020 Pantheon.tech * Modifications Copyright (C) 2020 Bell Canada. All rights reserved. + * Copyright (C) 2021 Nordix Foundation * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -27,6 +28,7 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilder import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post import org.modelmapper.ModelMapper +import org.onap.cps.api.CpsQueryService import org.onap.cps.api.CpsAdminService import org.onap.cps.api.CpsDataService import org.onap.cps.api.CpsModuleService @@ -60,6 +62,9 @@ class AdminRestControllerSpec extends Specification { CpsDataService mockCpsDataService = Mock() @SpringBean + CpsQueryService mockCpsQueryService = Mock() + + @SpringBean ModelMapper modelMapper = Mock() @Autowired diff --git a/cps-rest/src/test/groovy/org/onap/cps/rest/controller/DataRestControllerSpec.groovy b/cps-rest/src/test/groovy/org/onap/cps/rest/controller/DataRestControllerSpec.groovy index cca94d1ae..b9b680d35 100755 --- a/cps-rest/src/test/groovy/org/onap/cps/rest/controller/DataRestControllerSpec.groovy +++ b/cps-rest/src/test/groovy/org/onap/cps/rest/controller/DataRestControllerSpec.groovy @@ -28,6 +28,7 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilder import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put import org.modelmapper.ModelMapper +import org.onap.cps.api.CpsQueryService import org.onap.cps.api.CpsAdminService import org.onap.cps.api.CpsDataService import org.onap.cps.api.CpsModuleService @@ -60,6 +61,9 @@ class DataRestControllerSpec extends Specification { CpsAdminService mockCpsAdminService = Mock() @SpringBean + CpsQueryService mockCpsQueryService = Mock() + + @SpringBean ModelMapper modelMapper = Mock() @Autowired diff --git a/cps-rest/src/test/groovy/org/onap/cps/rest/controller/QueryRestControllerSpec.groovy b/cps-rest/src/test/groovy/org/onap/cps/rest/controller/QueryRestControllerSpec.groovy new file mode 100644 index 000000000..4d9a558ef --- /dev/null +++ b/cps-rest/src/test/groovy/org/onap/cps/rest/controller/QueryRestControllerSpec.groovy @@ -0,0 +1,84 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix Foundation + * ================================================================================ + * 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.rest.controller + +import com.google.common.collect.ImmutableMap +import com.google.gson.Gson +import org.modelmapper.ModelMapper +import org.onap.cps.api.CpsAdminService +import org.onap.cps.api.CpsDataService +import org.onap.cps.api.CpsModuleService +import org.onap.cps.api.CpsQueryService +import org.onap.cps.spi.model.DataNode +import org.onap.cps.spi.model.DataNodeBuilder +import org.spockframework.spring.SpringBean +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.beans.factory.annotation.Value +import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest +import org.springframework.http.HttpStatus +import org.springframework.test.web.servlet.MockMvc +import spock.lang.Shared +import spock.lang.Specification + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get + +@WebMvcTest +class QueryRestControllerSpec extends Specification { + + @SpringBean + CpsDataService mockCpsDataService = Mock() + + @SpringBean + CpsModuleService mockCpsModuleService = Mock() + + @SpringBean + CpsAdminService mockCpsAdminService = Mock() + + @SpringBean + CpsQueryService mockCpsQueryService = Mock() + + @SpringBean + ModelMapper modelMapper = Mock() + + @Autowired + MockMvc mvc + + @Value('${rest.api.cps-base-path}') + def basePath + + def 'Query data node by cps path for the given dataspace and anchor.'() { + given: 'service method returns a list containing a data node' + def dataspaceName = 'my_dataspace' + def anchorName = 'my_anchor' + def cpsPath = '/xpath/leaves[@leaf=\'value\']' + def dataNode = new DataNodeBuilder().withXpath("/xpath") + .withLeaves(ImmutableMap.of("leaf", "value")).build() + ArrayList<DataNode> dataNodeList = new ArrayList(); + dataNodeList.add(dataNode) + mockCpsQueryService.queryDataNodes(dataspaceName, anchorName, cpsPath) >> dataNodeList + and: 'the query endpoint' + def dataNodeEndpoint = "$basePath/v1/dataspaces/$dataspaceName/anchors/$anchorName/nodes/query" + when: 'query data nodes API is invoked' + def response = mvc.perform(get(dataNodeEndpoint).param('cps-path', cpsPath)).andReturn().response + then: 'the response contains the the datanode in json format' + response.status == HttpStatus.OK.value() + response.getContentAsString().contains(new Gson().toJson(dataNode)) + } +}
\ No newline at end of file diff --git a/cps-rest/src/test/groovy/org/onap/cps/rest/exceptions/CpsRestExceptionHandlerSpec.groovy b/cps-rest/src/test/groovy/org/onap/cps/rest/exceptions/CpsRestExceptionHandlerSpec.groovy index 8b02d73e8..4e10e2c14 100644 --- a/cps-rest/src/test/groovy/org/onap/cps/rest/exceptions/CpsRestExceptionHandlerSpec.groovy +++ b/cps-rest/src/test/groovy/org/onap/cps/rest/exceptions/CpsRestExceptionHandlerSpec.groovy @@ -1,6 +1,7 @@ /* * ============LICENSE_START======================================================= * Copyright (C) 2020 Pantheon.tech + * Copyright (C) 2021 Nordix Foundation * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,6 +25,7 @@ import org.modelmapper.ModelMapper import org.onap.cps.api.CpsAdminService import org.onap.cps.api.CpsDataService import org.onap.cps.api.CpsModuleService +import org.onap.cps.api.CpsQueryService import org.onap.cps.spi.exceptions.AnchorAlreadyDefinedException import org.onap.cps.spi.exceptions.CpsException import org.onap.cps.spi.exceptions.DataInUseException @@ -60,6 +62,9 @@ class CpsRestExceptionHandlerSpec extends Specification { CpsDataService mockCpsDataService = Mock() @SpringBean + CpsQueryService mockCpsQueryService = Mock() + + @SpringBean ModelMapper modelMapper = Mock() @Autowired diff --git a/cps-ri/pom.xml b/cps-ri/pom.xml index 005fa272f..fb1e6ad3c 100644 --- a/cps-ri/pom.xml +++ b/cps-ri/pom.xml @@ -5,7 +5,7 @@ <parent>
<groupId>org.onap.cps</groupId>
<artifactId>cps-parent</artifactId>
- <version>0.0.1-SNAPSHOT</version>
+ <version>0.0.2-SNAPSHOT</version>
<relativePath>../cps-parent/pom.xml</relativePath>
</parent>
diff --git a/cps-service/pom.xml b/cps-service/pom.xml index fc4ca1209..7225e4340 100644 --- a/cps-service/pom.xml +++ b/cps-service/pom.xml @@ -5,7 +5,7 @@ <parent>
<groupId>org.onap.cps</groupId>
<artifactId>cps-parent</artifactId>
- <version>0.0.1-SNAPSHOT</version>
+ <version>0.0.2-SNAPSHOT</version>
<relativePath>../cps-parent/pom.xml</relativePath>
</parent>
diff --git a/cps-service/src/main/java/org/onap/cps/api/CpsQueryService.java b/cps-service/src/main/java/org/onap/cps/api/CpsQueryService.java index a66e08436..b432af800 100644 --- a/cps-service/src/main/java/org/onap/cps/api/CpsQueryService.java +++ b/cps-service/src/main/java/org/onap/cps/api/CpsQueryService.java @@ -19,9 +19,24 @@ package org.onap.cps.api; +import java.util.Collection; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.onap.cps.spi.model.DataNode; + /* * Query interface for handling cps queries. */ public interface CpsQueryService { + /** + * Get data nodes for the given dataspace and anchor by cps path. + * + * @param dataspaceName dataspace name + * @param anchorName anchor name + * @param cpsPath cps path + * @return a collection of data nodes + */ + Collection<DataNode> queryDataNodes(@NonNull String dataspaceName, @NonNull String anchorName, + @NonNull String cpsPath); + } diff --git a/cps-service/src/main/java/org/onap/cps/api/impl/CpsQueryServiceImpl.java b/cps-service/src/main/java/org/onap/cps/api/impl/CpsQueryServiceImpl.java new file mode 100644 index 000000000..63d0a0fbb --- /dev/null +++ b/cps-service/src/main/java/org/onap/cps/api/impl/CpsQueryServiceImpl.java @@ -0,0 +1,40 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix Foundation + * ================================================================================ + * 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 java.util.Collection; +import org.onap.cps.api.CpsQueryService; +import org.onap.cps.spi.CpsDataPersistenceService; +import org.onap.cps.spi.model.DataNode; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class CpsQueryServiceImpl implements CpsQueryService { + + @Autowired + private CpsDataPersistenceService cpsDataPersistenceService; + + @Override + public Collection<DataNode> queryDataNodes(final String dataspaceName, final String anchorName, + final String cpsPath) { + return cpsDataPersistenceService.queryDataNodes(dataspaceName, anchorName, cpsPath); + } +}
\ No newline at end of file diff --git a/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsQueryServiceImplSpec.groovy b/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsQueryServiceImplSpec.groovy new file mode 100644 index 000000000..6e044b044 --- /dev/null +++ b/cps-service/src/test/groovy/org/onap/cps/api/impl/CpsQueryServiceImplSpec.groovy @@ -0,0 +1,44 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2021 Nordix Foundation + * ================================================================================ + * 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 org.onap.cps.spi.CpsDataPersistenceService +import spock.lang.Specification + +class CpsQueryServiceImplSpec extends Specification { + def mockCpsDataPersistenceService = Mock(CpsDataPersistenceService) + + def objectUnderTest = new CpsQueryServiceImpl() + + def setup() { + objectUnderTest.cpsDataPersistenceService = mockCpsDataPersistenceService + } + + def 'Query data nodes by cps path.'() { + given: 'a dataspace name, an anchor name and a cps path' + def dataspaceName = 'some dataspace' + def anchorName = 'some anchor' + def cpsPath = '/cps-path' + when: 'queryDataNodes is invoked' + objectUnderTest.queryDataNodes(dataspaceName, anchorName, cpsPath) + then: 'the persistence service is called once with the correct parameters' + 1 * mockCpsDataPersistenceService.queryDataNodes(dataspaceName, anchorName, cpsPath) + } +}
\ No newline at end of file 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 75c98a82d..a24bd0af5 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 @@ -106,7 +106,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')
@@ -122,18 +122,23 @@ class E2ENetworkSliceSpec extends Specification { { args -> dataNodeStored = args[2]}
and: 'the size of the tree is correct'
def cpsRanInventory = TestUtils.getFlattenMapByXpath(dataNodeStored)
- assert cpsRanInventory.size() == 3
+ 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 'E2E RAN Schema Model.'(){
diff --git a/cps-service/src/test/resources/e2e/basic/cps-ran-inventory-data.json b/cps-service/src/test/resources/e2e/basic/cps-ran-inventory-data.json index 1dbdab2ca..fb2efb1c9 100644 --- a/cps-service/src/test/resources/e2e/basic/cps-ran-inventory-data.json +++ b/cps-service/src/test/resources/e2e/basic/cps-ran-inventory-data.json @@ -1,31 +1,34 @@ { -"ran-inventory":{ - "rannfnssiid": "14559ead-f4fe-4c1c-a94c-8015fad3ea35", - "subnetStatus": "active", - "nsstid": "2372a5dc-ee24-4a45-85f5-65103dfdc5b4", - "slicetype": "embb", - "isshareable": "Shareable", - "sliceProfilesList": [ - { - "sliceProfileId": "f33a9dd8-ae51-4acf-8073-c9390c25f6f1", - "sNSSAI": "001-11000", - "maxNumberofUEs": 300, - "latency": 5, - "uLThptPerSlice": 40, - "dLThptPerSlice": 50, - "maxNumberofConns": 500, - "uEMobilityLevel": "FULLY MOBILITY", - "coverageAreaList": [ - "Washington" - ], - "resourceSharingLevel": "Shareable", - "pLMNIdList": [ - { - "mcc": "310", - "mnc": "410" - } - ] - } - ] + "cps-ran-inventory:ran-inventory":{ + "ran-slices":[{ + "rannfnssiid": "14559ead-f4fe-4c1c-a94c-8015fad3ea35", + "subnetStatus": "active", + "nsstid": "2372a5dc-ee24-4a45-85f5-65103dfdc5b4", + "slicetype": "embb", + "isshareable": "Shareable", + "sliceProfilesList": [ + { + "sliceProfileId": "f33a9dd8-ae51-4acf-8073-c9390c25f6f1", + "sNSSAI": "001-11000", + "maxNumberofUEs": 300, + "latency": 5, + "uLThptPerSlice": 40, + "dLThptPerSlice": 50, + "maxNumberofConns": 500, + "uEMobilityLevel": "FULLY MOBILITY", + "coverageAreaList": [ + "Washington" + ], + "resourceSharingLevel": "Shareable", + "pLMNIdList": [ + { + "mcc": "310", + "mnc": "410" + } + ] + } + ] + } + ] } }
\ No newline at end of file diff --git a/cps-service/src/test/resources/e2e/basic/cps-ran-inventory.yang b/cps-service/src/test/resources/e2e/basic/cps-ran-inventory@2021-01-28.yang index 0e504cafa..c16a68251 100644 --- a/cps-service/src/test/resources/e2e/basic/cps-ran-inventory.yang +++ b/cps-service/src/test/resources/e2e/basic/cps-ran-inventory@2021-01-28.yang @@ -57,46 +57,46 @@ module cps-ran-inventory { } grouping SliceProfile{ - leaf sliceProfileId{ - type string; - mandatory true; - description "slice profile id"; - } - leaf sNSSAI{ - type string; - mandatory false; - description "The S-NSSAI may include both the SST and SD fields (in which case the S-NSSAI length is 32 bits in total), or the S-NSSAI may just include the SST field (in which case the S-NSSAI length is 8 bits only)"; - } - leaf maxNumberofUEs{ - type int64 { range "0..68719476735"; } - mandatory false; - description "maximum number of UEs"; - } - leaf latency{ - type int64 { range "0..68719476735"; } - mandatory false; - description "latency of the slice requested by the operator"; - } - leaf uLThptPerSlice{ - type int64 { range "0..68719476735"; } - mandatory false; - description "uplink throughput of the slice requested by the operator"; - } - leaf dLThptPerSlice{ - type int64 { range "0..68719476735"; } - mandatory false; - description "downlink throughput of the slice requested by the operator"; - } - leaf maxNumberofConns{ - type int64 { range "0..68719476735"; } - mandatory false; - description "maximum number of connections to be served by the slice"; - } - leaf uEMobilityLevel{ - type string; - mandatory false; - description "Mobility level of the UE"; - } + leaf sliceProfileId{ + type string; + mandatory true; + description "slice profile id"; + } + leaf sNSSAI{ + type string; + mandatory false; + description "The S-NSSAI may include both the SST and SD fields (in which case the S-NSSAI length is 32 bits in total), or the S-NSSAI may just include the SST field (in which case the S-NSSAI length is 8 bits only)"; + } + leaf maxNumberofUEs{ + type int64 { range "0..68719476735"; } + mandatory false; + description "maximum number of UEs"; + } + leaf latency{ + type int64 { range "0..68719476735"; } + mandatory false; + description "latency of the slice requested by the operator"; + } + leaf uLThptPerSlice{ + type int64 { range "0..68719476735"; } + mandatory false; + description "uplink throughput of the slice requested by the operator"; + } + leaf dLThptPerSlice{ + type int64 { range "0..68719476735"; } + mandatory false; + description "downlink throughput of the slice requested by the operator"; + } + leaf maxNumberofConns{ + type int64 { range "0..68719476735"; } + mandatory false; + description "maximum number of connections to be served by the slice"; + } + leaf uEMobilityLevel{ + type string; + mandatory false; + description "Mobility level of the UE"; + } leaf resourceSharingLevel{ type string; description "Resource sharing level"; @@ -117,7 +117,7 @@ module cps-ran-inventory { uses PLMNId; } - } + } grouping PLMNId { description @@ -141,17 +141,17 @@ module cps-ran-inventory { } } - container ran-inventory{ + grouping ran-slices{ leaf rannfnssiid{ description "NSSI of a RAN network function"; type string; } list sliceProfilesList{ - uses SliceProfile; - key "sliceProfileId"; - description "List of slice profiles supported by the ran slice"; - } + uses SliceProfile; + key "sliceProfileId"; + description "List of slice profiles supported by the ran slice"; + } leaf subnetStatus{ description "status of RAN NF NSSI"; @@ -173,4 +173,11 @@ module cps-ran-inventory { type string; } } + container ran-inventory{ + list ran-slices{ + uses ran-slices; + key "rannfnssiid"; + description "List of RAN Slices"; + } + } } @@ -24,12 +24,12 @@ <parent>
<groupId>org.onap.oparent</groupId>
<artifactId>oparent</artifactId>
- <version>3.1.0</version>
+ <version>3.2.0</version>
</parent>
<groupId>org.onap.cps</groupId>
<artifactId>cps-aggregator</artifactId>
- <version>0.0.1-SNAPSHOT</version>
+ <version>0.0.2-SNAPSHOT</version>
<packaging>pom</packaging>
<name>cps</name>
diff --git a/releases/0.0.1-container.yaml b/releases/0.0.1-container.yaml new file mode 100644 index 000000000..d07101978 --- /dev/null +++ b/releases/0.0.1-container.yaml @@ -0,0 +1,8 @@ +distribution_type: container +container_release_tag: 0.0.1 +project: cps +log_dir: cps-maven-docker-stage-master/109/ +ref: c6b259cc6706585bb6123de362f57a895304c894 +containers: + - name: 'cps-and-nf-proxy' + version: '0.0.1'
\ No newline at end of file diff --git a/releases/0.0.1.yaml b/releases/0.0.1.yaml new file mode 100644 index 000000000..6cca9a3a9 --- /dev/null +++ b/releases/0.0.1.yaml @@ -0,0 +1,4 @@ +distribution_type: maven +log_dir: cps-maven-stage-master/109/ +project: cps +version: 0.0.1
\ No newline at end of file diff --git a/spotbugs/pom.xml b/spotbugs/pom.xml index 133c4f731..2a0788ee1 100644 --- a/spotbugs/pom.xml +++ b/spotbugs/pom.xml @@ -5,7 +5,7 @@ <modelVersion>4.0.0</modelVersion> <groupId>org.onap.cps</groupId> <artifactId>spotbugs</artifactId> - <version>0.0.1-SNAPSHOT</version> + <version>0.0.2-SNAPSHOT</version> <properties> <nexusproxy>https://nexus.onap.org</nexusproxy> diff --git a/version.properties b/version.properties index 12156a9a6..304745a79 100644 --- a/version.properties +++ b/version.properties @@ -1,9 +1,9 @@ # Note that these variables cannot be structured (e.g. : version.release or version.snapshot etc... ) # because they are used in Jenkins, whose plug-in doesn't support this -major=1 +major=0 minor=0 -patch=0 +patch=2 base_version=${major}.${minor}.${patch} |