summaryrefslogtreecommitdiffstats
path: root/cps-ncmp-rest
diff options
context:
space:
mode:
Diffstat (limited to 'cps-ncmp-rest')
-rw-r--r--cps-ncmp-rest/docs/openapi/components.yaml45
-rwxr-xr-xcps-ncmp-rest/docs/openapi/ncmp-inventory.yml40
-rwxr-xr-xcps-ncmp-rest/docs/openapi/ncmp.yml (renamed from cps-ncmp-rest/docs/openapi/ncmproxy.yml)36
-rwxr-xr-xcps-ncmp-rest/docs/openapi/openapi-inventory.yml28
-rwxr-xr-xcps-ncmp-rest/docs/openapi/openapi.yml21
-rw-r--r--cps-ncmp-rest/pom.xml38
-rwxr-xr-xcps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyController.java71
-rwxr-xr-xcps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyInventoryController.java70
-rw-r--r--cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyControllerSpec.groovy50
-rw-r--r--cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyInventoryControllerSpec.groovy65
-rw-r--r--cps-ncmp-rest/src/test/resources/application.yml2
11 files changed, 323 insertions, 143 deletions
diff --git a/cps-ncmp-rest/docs/openapi/components.yaml b/cps-ncmp-rest/docs/openapi/components.yaml
index ffb8dde113..d35919da4b 100644
--- a/cps-ncmp-rest/docs/openapi/components.yaml
+++ b/cps-ncmp-rest/docs/openapi/components.yaml
@@ -104,13 +104,27 @@ components:
schema:
type: string
default: /
- resourceIdentifierInPath:
+ resourceIdentifierInQuery:
name: resourceIdentifier
- in: path
- description: Resource identifier to get/set the resource data
+ in: query
+ description: The format of resource identifier depend on the associated DMI Plugin implementation. For ONAP DMI Plugin it will be RESTConf paths but it can really be anything.
required: true
+ allowReserved: true
schema:
type: string
+ examples:
+ sample1:
+ value:
+ resourceIdentifier: \parent\child
+ sample2:
+ value:
+ resourceIdentifier: \parent\listElement[key=value]
+ sample3:
+ value:
+ resourceIdentifier: \parent\listElement[key=value]\grandChild
+ sample4:
+ value:
+ resourceIdentifier: parent=1,child=abc
acceptParamInHeader:
name: Accept
in: header
@@ -119,21 +133,24 @@ components:
schema:
type: string
enum: [ application/json, application/yang-data+json ]
- fieldsParamInQuery:
- name: fields
+ optionsParamInQuery:
+ name: options
in: query
- description: Fields parameter to filter resource
+ description: options parameter in query, it is mandatory to wrap key(s)=value(s) in parenthesis'()'.
required: false
schema:
type: string
- depthParamInQuery:
- name: depth
- in: query
- description: Depth parameter for response
- required: false
- schema:
- type: integer
- minimum: 1
+ allowReserved: true
+ examples:
+ sample1:
+ value:
+ options: (key1=value1,key2=value2)
+ sample2:
+ value:
+ options: (key1=value1,key2=value1/value2)
+ sample3:
+ value:
+ options: (key1=10,key2=value2,key3=[val31;val32])
contentParamInHeader:
name: Content-Type
in: header
diff --git a/cps-ncmp-rest/docs/openapi/ncmp-inventory.yml b/cps-ncmp-rest/docs/openapi/ncmp-inventory.yml
new file mode 100755
index 0000000000..b0a50aa83a
--- /dev/null
+++ b/cps-ncmp-rest/docs/openapi/ncmp-inventory.yml
@@ -0,0 +1,40 @@
+# ============LICENSE_START=======================================================
+# Copyright (C) 2021 Bell Canada
+# ================================================================================
+# 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=========================================================
+
+updateDmiRegistration:
+ post:
+ description: Register a DMI Plugin with any new, updated or removed CM Handles.
+ tags:
+ - network-cm-proxy-inventory
+ summary: DMI notifies NCMP of new CM Handles
+ operationId: updateDmiPluginRegistration
+ requestBody:
+ required: true
+ content:
+ application/json:
+ schema:
+ $ref: 'components.yaml#/components/schemas/RestDmiPluginRegistration'
+ responses:
+ 201:
+ $ref: 'components.yaml#/components/responses/Created'
+ 400:
+ $ref: 'components.yaml#/components/responses/BadRequest'
+ 401:
+ $ref: 'components.yaml#/components/responses/Unauthorized'
+ 403:
+ $ref: 'components.yaml#/components/responses/Forbidden'
diff --git a/cps-ncmp-rest/docs/openapi/ncmproxy.yml b/cps-ncmp-rest/docs/openapi/ncmp.yml
index 2e5eba754d..52245c3cc0 100755
--- a/cps-ncmp-rest/docs/openapi/ncmproxy.yml
+++ b/cps-ncmp-rest/docs/openapi/ncmp.yml
@@ -1,6 +1,7 @@
# ============LICENSE_START=======================================================
# Copyright (C) 2021 Nordix Foundation
# Modifications Copyright (C) 2021 Pantheon.tech
+# Modifications Copyright (C) 2021 Bell Canada
# ================================================================================
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -179,29 +180,6 @@ listNodeByCmHandleAndXpath:
404:
$ref: 'components.yaml#/components/responses/NotFound'
-updateDmiRegistration:
- post:
- description: Register a DMI Plugin with any new, updated or removed CM Handles.
- tags:
- - network-cm-proxy
- summary: DMI notifies NCMP of new CM Handles
- operationId: updateDmiPluginRegistration
- requestBody:
- required: true
- content:
- application/json:
- schema:
- $ref: 'components.yaml#/components/schemas/RestDmiPluginRegistration'
- responses:
- 201:
- $ref: 'components.yaml#/components/responses/Created'
- 400:
- $ref: 'components.yaml#/components/responses/BadRequest'
- 401:
- $ref: 'components.yaml#/components/responses/Unauthorized'
- 403:
- $ref: 'components.yaml#/components/responses/Forbidden'
-
getResourceDataForPassthroughOperational:
get:
tags:
@@ -211,10 +189,9 @@ getResourceDataForPassthroughOperational:
operationId: getResourceDataOperationalForCmHandle
parameters:
- $ref: 'components.yaml#/components/parameters/cmHandleInPath'
- - $ref: 'components.yaml#/components/parameters/resourceIdentifierInPath'
+ - $ref: 'components.yaml#/components/parameters/resourceIdentifierInQuery'
- $ref: 'components.yaml#/components/parameters/acceptParamInHeader'
- - $ref: 'components.yaml#/components/parameters/fieldsParamInQuery'
- - $ref: 'components.yaml#/components/parameters/depthParamInQuery'
+ - $ref: 'components.yaml#/components/parameters/optionsParamInQuery'
responses:
200:
$ref: 'components.yaml#/components/responses/Ok'
@@ -236,10 +213,9 @@ resourceDataForPassthroughRunning:
operationId: getResourceDataRunningForCmHandle
parameters:
- $ref: 'components.yaml#/components/parameters/cmHandleInPath'
- - $ref: 'components.yaml#/components/parameters/resourceIdentifierInPath'
+ - $ref: 'components.yaml#/components/parameters/resourceIdentifierInQuery'
- $ref: 'components.yaml#/components/parameters/acceptParamInHeader'
- - $ref: 'components.yaml#/components/parameters/fieldsParamInQuery'
- - $ref: 'components.yaml#/components/parameters/depthParamInQuery'
+ - $ref: 'components.yaml#/components/parameters/optionsParamInQuery'
responses:
200:
$ref: 'components.yaml#/components/responses/Ok'
@@ -259,7 +235,7 @@ resourceDataForPassthroughRunning:
operationId: createResourceDataRunningForCmHandle
parameters:
- $ref: 'components.yaml#/components/parameters/cmHandleInPath'
- - $ref: 'components.yaml#/components/parameters/resourceIdentifierInPath'
+ - $ref: 'components.yaml#/components/parameters/resourceIdentifierInQuery'
- $ref: 'components.yaml#/components/parameters/contentParamInHeader'
requestBody:
required: true
diff --git a/cps-ncmp-rest/docs/openapi/openapi-inventory.yml b/cps-ncmp-rest/docs/openapi/openapi-inventory.yml
new file mode 100755
index 0000000000..ee09d050f3
--- /dev/null
+++ b/cps-ncmp-rest/docs/openapi/openapi-inventory.yml
@@ -0,0 +1,28 @@
+# ============LICENSE_START=======================================================
+# Copyright (C) 2021 Bell Canada
+# ================================================================================
+# 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=========================================================
+
+openapi: 3.0.1
+info:
+ title: NCMP Inventory API
+ description: NCMP Inventory API
+ version: "1.0"
+servers:
+ - url: /ncmpInventory
+paths:
+ /v1/ch:
+ $ref: 'ncmp-inventory.yml#/updateDmiRegistration'
diff --git a/cps-ncmp-rest/docs/openapi/openapi.yml b/cps-ncmp-rest/docs/openapi/openapi.yml
index 12356b5887..69c2a117d6 100755
--- a/cps-ncmp-rest/docs/openapi/openapi.yml
+++ b/cps-ncmp-rest/docs/openapi/openapi.yml
@@ -27,25 +27,22 @@ servers:
- url: /ncmp
paths:
/v1/cm-handles/{cm-handle}/node:
- $ref: 'ncmproxy.yml#/nodeByCmHandleAndXpath'
+ $ref: 'ncmp.yml#/nodeByCmHandleAndXpath'
/v1/cm-handles/{cm-handle}/list-node:
- $ref: 'ncmproxy.yml#/listNodeByCmHandleAndXpath'
+ $ref: 'ncmp.yml#/listNodeByCmHandleAndXpath'
/v1/cm-handles/{cm-handle}/nodes/query:
- $ref: 'ncmproxy.yml#/nodesByCmHandleAndCpsPath'
+ $ref: 'ncmp.yml#/nodesByCmHandleAndCpsPath'
/v1/cm-handles/{cm-handle}/nodes:
- $ref: 'ncmproxy.yml#/nodesByCmHandleAndXpath'
+ $ref: 'ncmp.yml#/nodesByCmHandleAndXpath'
- /v1/ch:
- $ref: 'ncmproxy.yml#/updateDmiRegistration'
+ /v1/ch/{cm-handle}/data/ds/ncmp-datastore:passthrough-operational:
+ $ref: 'ncmp.yml#/getResourceDataForPassthroughOperational'
- /v1/ch/{cm-handle}/data/ds/ncmp-datastore:passthrough-operational/{resourceIdentifier}:
- $ref: 'ncmproxy.yml#/getResourceDataForPassthroughOperational'
-
- /v1/ch/{cm-handle}/data/ds/ncmp-datastore:passthrough-running/{resourceIdentifier}:
- $ref: 'ncmproxy.yml#/resourceDataForPassthroughRunning'
+ /v1/ch/{cm-handle}/data/ds/ncmp-datastore:passthrough-running:
+ $ref: 'ncmp.yml#/resourceDataForPassthroughRunning'
/v1/ch/{cm-handle}/modules:
- $ref: 'ncmproxy.yml#/fetchModuleReferencesByCmHandle' \ No newline at end of file
+ $ref: 'ncmp.yml#/fetchModuleReferencesByCmHandle' \ No newline at end of file
diff --git a/cps-ncmp-rest/pom.xml b/cps-ncmp-rest/pom.xml
index b47ea17331..c4c72bb93b 100644
--- a/cps-ncmp-rest/pom.xml
+++ b/cps-ncmp-rest/pom.xml
@@ -112,7 +112,7 @@
<artifactId>swagger-codegen-maven-plugin</artifactId>
<executions>
<execution>
- <id>code-gen</id>
+ <id>ncmp-code-gen</id>
<goals>
<goal>generate</goal>
</goals>
@@ -131,6 +131,40 @@
</configOptions>
</configuration>
</execution>
+ <execution>
+ <id>ncmp-code-gen-inventory</id>
+ <goals>
+ <goal>generate</goal>
+ </goals>
+ <configuration>
+ <inputSpec>${project.basedir}/docs/openapi/openapi-inventory.yml</inputSpec>
+ <invokerPackage>org.onap.cps.ncmp.rest.controller</invokerPackage>
+ <modelPackage>org.onap.cps.ncmp.rest.model</modelPackage>
+ <apiPackage>org.onap.cps.ncmp.rest.api</apiPackage>
+ <language>spring</language>
+ <generateSupportingFiles>false</generateSupportingFiles>
+ <configOptions>
+ <sourceFolder>src/gen/java</sourceFolder>
+ <dateLibrary>java11</dateLibrary>
+ <interfaceOnly>true</interfaceOnly>
+ <useTags>true</useTags>
+ </configOptions>
+ </configuration>
+ </execution>
+ <execution>
+ <id>ncmp-inventory-openapi-yaml-gen</id>
+ <goals>
+ <goal>generate</goal>
+ </goals>
+ <phase>compile</phase>
+ <configuration>
+ <inputSpec>${project.basedir}/docs/openapi/openapi-inventory.yml</inputSpec>
+ <language>openapi-yaml</language>
+ <configOptions>
+ <outputFile>openapi-inventory.yaml</outputFile>
+ </configOptions>
+ </configuration>
+ </execution>
</executions>
</plugin>
<plugin>
@@ -148,7 +182,7 @@
<resource>
<directory>${project.basedir}/target/generated-sources/swagger/</directory>
<includes>
- <include>openapi.yaml</include>
+ <include>openapi*.yaml</include>
</includes>
</resource>
</resources>
diff --git a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyController.java b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyController.java
index a4d94cebfd..9b15a7890d 100755
--- a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyController.java
+++ b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyController.java
@@ -3,6 +3,7 @@
* Copyright (C) 2021 Pantheon.tech
* Modifications (C) 2021 Nordix Foundation
* Modification Copyright (C) 2021 highstreet technologies GmbH
+ * Modifications (C) 2021 Bell Canada
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -21,18 +22,13 @@
package org.onap.cps.ncmp.rest.controller;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.util.Collection;
import javax.validation.Valid;
-import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import org.onap.cps.ncmp.api.NetworkCmProxyDataService;
-import org.onap.cps.ncmp.api.models.DmiPluginRegistration;
import org.onap.cps.ncmp.rest.api.NetworkCmProxyApi;
-import org.onap.cps.ncmp.rest.model.RestDmiPluginRegistration;
import org.onap.cps.spi.FetchDescendantsOption;
import org.onap.cps.spi.model.DataNode;
import org.onap.cps.spi.model.ModuleReference;
@@ -50,17 +46,12 @@ public class NetworkCmProxyController implements NetworkCmProxyApi {
private final NetworkCmProxyDataService networkCmProxyDataService;
- private final ObjectMapper objectMapper;
-
/**
* Constructor Injection for Dependencies.
* @param networkCmProxyDataService Data Service Interface
- * @param objectMapper Object Mapper
*/
- public NetworkCmProxyController(final NetworkCmProxyDataService networkCmProxyDataService,
- final ObjectMapper objectMapper) {
+ public NetworkCmProxyController(final NetworkCmProxyDataService networkCmProxyDataService) {
this.networkCmProxyDataService = networkCmProxyDataService;
- this.objectMapper = objectMapper;
}
/**
@@ -102,19 +93,6 @@ public class NetworkCmProxyController implements NetworkCmProxyApi {
}
/**
- * Update DMI Plugin Registration (used for first registration also).
- * @param restDmiPluginRegistration the registration data
- */
- @Override
- public ResponseEntity<Void> updateDmiPluginRegistration(
- final @Valid RestDmiPluginRegistration restDmiPluginRegistration) {
- final DmiPluginRegistration dmiPluginRegistration =
- convertRestObjectToJavaApiObject(restDmiPluginRegistration);
- networkCmProxyDataService.updateDmiRegistrationAndSyncModule(dmiPluginRegistration);
- return new ResponseEntity<>(HttpStatus.CREATED);
- }
-
- /**
* Query Data Nodes.
* @deprecated This Method is no longer used as part of NCMP.
*/
@@ -158,22 +136,19 @@ public class NetworkCmProxyController implements NetworkCmProxyApi {
*
* @param cmHandle cm handle identifier
* @param resourceIdentifier resource identifier
- * @param accept accept header parameter
- * @param fields fields query parameter
- * @param depth depth query parameter
+ * @param acceptParamInHeader accept header parameter
+ * @param optionsParamInQuery options query parameter
* @return {@code ResponseEntity} response from dmi plugin
*/
@Override
public ResponseEntity<Object> getResourceDataOperationalForCmHandle(final String cmHandle,
- final String resourceIdentifier,
- final String accept,
- final @Valid String fields,
- final @Min(1) @Valid Integer depth) {
+ final @NotNull @Valid String resourceIdentifier,
+ final String acceptParamInHeader,
+ final @Valid String optionsParamInQuery) {
final Object responseObject = networkCmProxyDataService.getResourceDataOperationalForCmHandle(cmHandle,
resourceIdentifier,
- accept,
- fields,
- depth);
+ acceptParamInHeader,
+ optionsParamInQuery);
return ResponseEntity.ok(responseObject);
}
@@ -182,22 +157,19 @@ public class NetworkCmProxyController implements NetworkCmProxyApi {
*
* @param cmHandle cm handle identifier
* @param resourceIdentifier resource identifier
- * @param accept accept header parameter
- * @param fields fields query parameter
- * @param depth depth query parameter
+ * @param acceptParamInHeader accept header parameter
+ * @param optionsParamInQuery options query parameter
* @return {@code ResponseEntity} response from dmi plugin
*/
@Override
public ResponseEntity<Object> getResourceDataRunningForCmHandle(final String cmHandle,
- final String resourceIdentifier,
- final String accept,
- final @Valid String fields,
- final @Min(1) @Valid Integer depth) {
+ final @NotNull @Valid String resourceIdentifier,
+ final String acceptParamInHeader,
+ final @Valid String optionsParamInQuery) {
final Object responseObject = networkCmProxyDataService.getResourceDataPassThroughRunningForCmHandle(cmHandle,
resourceIdentifier,
- accept,
- fields,
- depth);
+ acceptParamInHeader,
+ optionsParamInQuery);
return ResponseEntity.ok(responseObject);
}
@@ -205,15 +177,15 @@ public class NetworkCmProxyController implements NetworkCmProxyApi {
* Create resource data in datastore pass through running
* for given cm-handle.
*
- * @param cmHandle cm handle identifier
* @param resourceIdentifier resource identifier
+ * @param cmHandle cm handle identifier
* @param requestBody requestBody
* @param contentType content type of body
* @return {@code ResponseEntity} response from dmi plugi
*/
@Override
- public ResponseEntity<Void> createResourceDataRunningForCmHandle(final String cmHandle,
- final String resourceIdentifier,
+ public ResponseEntity<Void> createResourceDataRunningForCmHandle(final String resourceIdentifier,
+ final String cmHandle,
final String requestBody,
final String contentType) {
networkCmProxyDataService.createResourceDataPassThroughRunningForCmHandle(cmHandle,
@@ -228,9 +200,4 @@ public class NetworkCmProxyController implements NetworkCmProxyApi {
return new ResponseEntity<>(new Gson().toJson(moduleReferences), HttpStatus.OK);
}
- private DmiPluginRegistration convertRestObjectToJavaApiObject(
- final RestDmiPluginRegistration restDmiPluginRegistration) {
- return objectMapper.convertValue(restDmiPluginRegistration, DmiPluginRegistration.class);
- }
-
}
diff --git a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyInventoryController.java b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyInventoryController.java
new file mode 100755
index 0000000000..3b72cec389
--- /dev/null
+++ b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/NetworkCmProxyInventoryController.java
@@ -0,0 +1,70 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2021 Bell Canada
+ * ================================================================================
+ * 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.ncmp.rest.controller;
+
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import javax.validation.Valid;
+import org.onap.cps.ncmp.api.NetworkCmProxyDataService;
+import org.onap.cps.ncmp.api.models.DmiPluginRegistration;
+import org.onap.cps.ncmp.rest.api.NetworkCmProxyInventoryApi;
+import org.onap.cps.ncmp.rest.model.RestDmiPluginRegistration;
+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.ncmp-inventory-base-path}")
+public class NetworkCmProxyInventoryController implements NetworkCmProxyInventoryApi {
+
+ private final NetworkCmProxyDataService networkCmProxyDataService;
+ private final ObjectMapper objectMapper;
+
+ /**
+ * Constructor Injection for Dependencies.
+ * @param networkCmProxyDataService Data Service Interface
+ * @param objectMapper Object Mapper
+ */
+ public NetworkCmProxyInventoryController(final NetworkCmProxyDataService networkCmProxyDataService,
+ final ObjectMapper objectMapper) {
+ this.networkCmProxyDataService = networkCmProxyDataService;
+ this.objectMapper = objectMapper;
+ }
+
+ /**
+ * Update DMI Plugin Registration (used for first registration also).
+ * @param restDmiPluginRegistration the registration data
+ */
+ @Override
+ public ResponseEntity<Void> updateDmiPluginRegistration(
+ final @Valid RestDmiPluginRegistration restDmiPluginRegistration) {
+ final DmiPluginRegistration dmiPluginRegistration =
+ convertRestObjectToJavaApiObject(restDmiPluginRegistration);
+ networkCmProxyDataService.updateDmiRegistrationAndSyncModule(dmiPluginRegistration);
+ return new ResponseEntity<>(HttpStatus.CREATED);
+ }
+
+ private DmiPluginRegistration convertRestObjectToJavaApiObject(
+ final RestDmiPluginRegistration restDmiPluginRegistration) {
+ return objectMapper.convertValue(restDmiPluginRegistration, DmiPluginRegistration.class);
+ }
+
+}
diff --git a/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyControllerSpec.groovy b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyControllerSpec.groovy
index 9f2b4e19a3..342f41b26f 100644
--- a/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyControllerSpec.groovy
+++ b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyControllerSpec.groovy
@@ -31,9 +31,7 @@ import static org.springframework.test.web.servlet.request.MockMvcRequestBuilder
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put
-import com.fasterxml.jackson.databind.ObjectMapper
import com.google.gson.Gson
-import org.onap.cps.TestUtils
import org.onap.cps.ncmp.api.NetworkCmProxyDataService
import org.onap.cps.spi.model.DataNodeBuilder
import org.spockframework.spring.SpringBean
@@ -54,9 +52,6 @@ class NetworkCmProxyControllerSpec extends Specification {
@SpringBean
NetworkCmProxyDataService mockNetworkCmProxyDataService = Mock()
- @SpringBean
- ObjectMapper objectMapper = new ObjectMapper()
-
@Value('${rest.api.ncmp-base-path}/v1')
def ncmpBasePathV1
@@ -175,25 +170,10 @@ class NetworkCmProxyControllerSpec extends Specification {
response.contentAsString.contains('"leaf":"value"')
}
- def 'Register CM Handle Event' () {
- given: 'jsonData'
- def jsonData = TestUtils.getResourceFileContent('dmi-registration.json')
- when: 'post request is performed'
- def response = mvc.perform(
- post("$ncmpBasePathV1/ch")
- .contentType(MediaType.APPLICATION_JSON)
- .content(jsonData)
- ).andReturn().response
- then: 'the cm handles are registered with the service'
- 1 * mockNetworkCmProxyDataService.updateDmiRegistrationAndSyncModule(_)
- and: 'response status is created'
- response.status == HttpStatus.CREATED.value()
- }
-
def 'Get Resource Data from pass-through operational.' () {
given: 'resource data url'
def getUrl = "$ncmpBasePathV1/ch/testCmHandle/data/ds/ncmp-datastore:passthrough-operational" +
- "/testResourceIdentifier?fields=testFields&depth=5"
+ "?resourceIdentifier=parent/child&options=(a=1,b=2)"
when: 'get data resource request is performed'
def response = mvc.perform(
get(getUrl)
@@ -202,24 +182,22 @@ class NetworkCmProxyControllerSpec extends Specification {
).andReturn().response
then: 'the NCMP data service is called with getResourceDataOperationalForCmHandle'
1 * mockNetworkCmProxyDataService.getResourceDataOperationalForCmHandle('testCmHandle',
- 'testResourceIdentifier',
+ 'parent/child',
'application/json',
- 'testFields',
- 5)
+ '(a=1,b=2)')
and: 'response status is Ok'
response.status == HttpStatus.OK.value()
}
- def 'Get Resource Data from pass-through running.' () {
+ def 'Get Resource Data from pass-through running with #scenario value in resource identifier param.' () {
given: 'resource data url'
def getUrl = "$ncmpBasePathV1/ch/testCmHandle/data/ds/ncmp-datastore:passthrough-running" +
- "/testResourceIdentifier?fields=testFields&depth=5"
+ "?resourceIdentifier=" + resourceIdentifier + "&options=(a=1,b=2)"
and: 'ncmp service returns json object'
mockNetworkCmProxyDataService.getResourceDataPassThroughRunningForCmHandle('testCmHandle',
- 'testResourceIdentifier',
- 'application/json',
- 'testFields',
- 5) >> '{valid-json}'
+ resourceIdentifier,
+ 'application/json',
+ '(a=1,b=2)') >> '{valid-json}'
when: 'get data resource request is performed'
def response = mvc.perform(
get(getUrl)
@@ -230,12 +208,20 @@ class NetworkCmProxyControllerSpec extends Specification {
response.status == HttpStatus.OK.value()
and: 'response contains valid object body'
response.getContentAsString() == '{valid-json}'
+ where: 'tokens are used in the resource identifier parameter'
+ scenario | resourceIdentifier
+ '/' | 'id/with/slashes'
+ '?' | 'idWith?'
+ ',' | 'idWith,'
+ '=' | 'idWith='
+ '[]' | 'idWith[]'
+ '? needs to be encoded as %3F' | 'idWith%3F'
}
def 'Create Resource Data from pass-through running with #scenario.' () {
given: 'resource data url'
def getUrl = "$ncmpBasePathV1/ch/testCmHandle/data/ds/ncmp-datastore:passthrough-running" +
- "/testResourceIdentifier"
+ "?resourceIdentifier=parent/child"
when: 'get data resource request is performed'
def response = mvc.perform(
post(getUrl)
@@ -244,7 +230,7 @@ class NetworkCmProxyControllerSpec extends Specification {
).andReturn().response
then: 'ncmp service method to create resource called'
1 * mockNetworkCmProxyDataService.createResourceDataPassThroughRunningForCmHandle('testCmHandle',
- 'testResourceIdentifier', requestBody, 'application/json;charset=UTF-8')
+ 'parent/child', requestBody, 'application/json;charset=UTF-8')
and: 'resource is created'
response.status == HttpStatus.CREATED.value()
where: 'given request body'
diff --git a/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyInventoryControllerSpec.groovy b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyInventoryControllerSpec.groovy
new file mode 100644
index 0000000000..e558ac45bf
--- /dev/null
+++ b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyInventoryControllerSpec.groovy
@@ -0,0 +1,65 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2021 Bell Canada
+ * ================================================================================
+ * 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.ncmp.rest.controller
+
+import com.fasterxml.jackson.databind.ObjectMapper
+import org.onap.cps.TestUtils
+import org.onap.cps.ncmp.api.NetworkCmProxyDataService
+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.context.annotation.Import
+import org.springframework.http.HttpStatus
+import org.springframework.http.MediaType
+import org.springframework.test.web.servlet.MockMvc
+import spock.lang.Specification
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post
+
+@WebMvcTest(NetworkCmProxyInventoryController)
+@Import(ObjectMapper)
+class NetworkCmProxyInventoryControllerSpec extends Specification {
+
+ @Autowired
+ MockMvc mvc
+
+ @SpringBean
+ NetworkCmProxyDataService mockNetworkCmProxyDataService = Mock()
+
+ @Value('${rest.api.ncmp-inventory-base-path}/v1')
+ def ncmpBasePathV1
+
+ def 'Register CM Handle Event' () {
+ given: 'jsonData'
+ def jsonData = TestUtils.getResourceFileContent('dmi-registration.json')
+ when: 'post request is performed'
+ def response = mvc.perform(
+ post("$ncmpBasePathV1/ch")
+ .contentType(MediaType.APPLICATION_JSON)
+ .content(jsonData)
+ ).andReturn().response
+ then: 'the cm handles are registered with the service'
+ 1 * mockNetworkCmProxyDataService.updateDmiRegistrationAndSyncModule(_)
+ and: 'response status is created'
+ response.status == HttpStatus.CREATED.value()
+ }
+
+}
+
diff --git a/cps-ncmp-rest/src/test/resources/application.yml b/cps-ncmp-rest/src/test/resources/application.yml
index 848738a764..f2ca8c759b 100644
--- a/cps-ncmp-rest/src/test/resources/application.yml
+++ b/cps-ncmp-rest/src/test/resources/application.yml
@@ -20,4 +20,4 @@
rest:
api:
ncmp-base-path: /ncmp
-spring:
+ ncmp-inventory-base-path: /ncmpInventory