summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--checkstyle/pom.xml2
-rw-r--r--cps-application/pom.xml2
-rw-r--r--cps-bom/pom.xml2
-rwxr-xr-xcps-dependencies/pom.xml2
-rwxr-xr-xcps-nf-proxy-rest/pom.xml2
-rw-r--r--cps-nf-proxy-service/pom.xml2
-rwxr-xr-xcps-parent/pom.xml4
-rwxr-xr-xcps-rest/docs/api/swagger/components.yml8
-rw-r--r--cps-rest/docs/api/swagger/cpsQuery.yml23
-rwxr-xr-xcps-rest/docs/api/swagger/openapi.yml3
-rwxr-xr-xcps-rest/pom.xml2
-rw-r--r--cps-rest/src/main/java/org/onap/cps/rest/controller/QueryRestController.java48
-rwxr-xr-xcps-rest/src/test/groovy/org/onap/cps/rest/controller/AdminRestControllerSpec.groovy5
-rwxr-xr-xcps-rest/src/test/groovy/org/onap/cps/rest/controller/DataRestControllerSpec.groovy4
-rw-r--r--cps-rest/src/test/groovy/org/onap/cps/rest/controller/QueryRestControllerSpec.groovy84
-rw-r--r--cps-rest/src/test/groovy/org/onap/cps/rest/exceptions/CpsRestExceptionHandlerSpec.groovy5
-rw-r--r--cps-ri/pom.xml2
-rw-r--r--cps-service/pom.xml2
-rw-r--r--cps-service/src/main/java/org/onap/cps/api/CpsQueryService.java15
-rw-r--r--cps-service/src/main/java/org/onap/cps/api/impl/CpsQueryServiceImpl.java40
-rw-r--r--cps-service/src/test/groovy/org/onap/cps/api/impl/CpsQueryServiceImplSpec.groovy44
-rwxr-xr-xcps-service/src/test/groovy/org/onap/cps/api/impl/E2ENetworkSliceSpec.groovy17
-rw-r--r--cps-service/src/test/resources/e2e/basic/cps-ran-inventory-data.json59
-rw-r--r--cps-service/src/test/resources/e2e/basic/cps-ran-inventory@2021-01-28.yang (renamed from cps-service/src/test/resources/e2e/basic/cps-ran-inventory.yang)99
-rw-r--r--pom.xml4
-rw-r--r--releases/0.0.1-container.yaml8
-rw-r--r--releases/0.0.1.yaml4
-rw-r--r--spotbugs/pom.xml2
-rw-r--r--version.properties4
29 files changed, 402 insertions, 96 deletions
diff --git a/checkstyle/pom.xml b/checkstyle/pom.xml
index 83d1808909..a592085166 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 685029b809..8ea2db3840 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 9ae8a80b3f..cf5025d399 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 1beee115b0..8e0510580f 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 94420f7fd2..ac891e15c3 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 d32d0ad38a..67ffaeb200 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 91d1f4186b..0f8e64323f 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 3694f36cd3..bb1f120022 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 0000000000..91a4bdbfa1
--- /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 2ead202398..38fbebe67b 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 2bb053b81c..840228eb99 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 0000000000..a8816f02b4
--- /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 926021e817..ca99743ca8 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 cca94d1aec..b9b680d35f 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 0000000000..4d9a558ef0
--- /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 8b02d73e84..4e10e2c142 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 005fa272f8..fb1e6ad3c8 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 fc4ca12097..7225e43403 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 a66e084364..b432af8009 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 0000000000..63d0a0fbb9
--- /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 0000000000..6e044b0444
--- /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 75c98a82d9..a24bd0af5c 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 1dbdab2ca7..fb2efb1c92 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 0e504cafad..c16a682512 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";
+ }
+ }
}
diff --git a/pom.xml b/pom.xml
index 22742a34ea..de96249532 100644
--- a/pom.xml
+++ b/pom.xml
@@ -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 0000000000..d071019789
--- /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 0000000000..6cca9a3a9b
--- /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 133c4f7319..2a0788ee11 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 12156a9a64..304745a792 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}