From fd2e6ddde2c2260951e2dfd5e3fd7f4bd04976e1 Mon Sep 17 00:00:00 2001 From: niamhcore Date: Wed, 29 Sep 2021 16:43:35 +0100 Subject: Changing resource identifier to a query param *Update dmi operations to build dmi url using query param Issue-ID: CPS-679 Signed-off-by: niamhcore Change-Id: I2292507c5057837932f8e21f1a8e80721066b336 --- cps-ncmp-rest/docs/openapi/components.yaml | 20 +++++++++++++--- cps-ncmp-rest/docs/openapi/ncmproxy.yml | 6 ++--- cps-ncmp-rest/docs/openapi/openapi.yml | 4 ++-- .../rest/controller/NetworkCmProxyController.java | 15 ++++++------ .../controller/NetworkCmProxyControllerSpec.groovy | 28 ++++++++++++++-------- 5 files changed, 47 insertions(+), 26 deletions(-) (limited to 'cps-ncmp-rest') diff --git a/cps-ncmp-rest/docs/openapi/components.yaml b/cps-ncmp-rest/docs/openapi/components.yaml index ffb8dde11..560c945dd 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 diff --git a/cps-ncmp-rest/docs/openapi/ncmproxy.yml b/cps-ncmp-rest/docs/openapi/ncmproxy.yml index 2e5eba754..263c76c13 100755 --- a/cps-ncmp-rest/docs/openapi/ncmproxy.yml +++ b/cps-ncmp-rest/docs/openapi/ncmproxy.yml @@ -211,7 +211,7 @@ 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' @@ -236,7 +236,7 @@ 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' @@ -259,7 +259,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.yml b/cps-ncmp-rest/docs/openapi/openapi.yml index 12356b588..1620eba2f 100755 --- a/cps-ncmp-rest/docs/openapi/openapi.yml +++ b/cps-ncmp-rest/docs/openapi/openapi.yml @@ -41,10 +41,10 @@ paths: /v1/ch: $ref: 'ncmproxy.yml#/updateDmiRegistration' - /v1/ch/{cm-handle}/data/ds/ncmp-datastore:passthrough-operational/{resourceIdentifier}: + /v1/ch/{cm-handle}/data/ds/ncmp-datastore:passthrough-operational: $ref: 'ncmproxy.yml#/getResourceDataForPassthroughOperational' - /v1/ch/{cm-handle}/data/ds/ncmp-datastore:passthrough-running/{resourceIdentifier}: + /v1/ch/{cm-handle}/data/ds/ncmp-datastore:passthrough-running: $ref: 'ncmproxy.yml#/resourceDataForPassthroughRunning' /v1/ch/{cm-handle}/modules: 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 a4d94cebf..0a1a6419e 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 @@ -27,7 +27,6 @@ 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; @@ -167,8 +166,8 @@ public class NetworkCmProxyController implements NetworkCmProxyApi { public ResponseEntity getResourceDataOperationalForCmHandle(final String cmHandle, final String resourceIdentifier, final String accept, - final @Valid String fields, - final @Min(1) @Valid Integer depth) { + final String fields, + final Integer depth) { final Object responseObject = networkCmProxyDataService.getResourceDataOperationalForCmHandle(cmHandle, resourceIdentifier, accept, @@ -191,8 +190,8 @@ public class NetworkCmProxyController implements NetworkCmProxyApi { public ResponseEntity getResourceDataRunningForCmHandle(final String cmHandle, final String resourceIdentifier, final String accept, - final @Valid String fields, - final @Min(1) @Valid Integer depth) { + final String fields, + final Integer depth) { final Object responseObject = networkCmProxyDataService.getResourceDataPassThroughRunningForCmHandle(cmHandle, resourceIdentifier, accept, @@ -205,15 +204,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 createResourceDataRunningForCmHandle(final String cmHandle, - final String resourceIdentifier, + public ResponseEntity createResourceDataRunningForCmHandle(final String resourceIdentifier, + final String cmHandle, final String requestBody, final String contentType) { networkCmProxyDataService.createResourceDataPassThroughRunningForCmHandle(cmHandle, 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 9f2b4e19a..d62ae93b0 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 @@ -193,7 +193,7 @@ class NetworkCmProxyControllerSpec extends Specification { 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&fields=testFields&depth=5" when: 'get data resource request is performed' def response = mvc.perform( get(getUrl) @@ -202,7 +202,7 @@ 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) @@ -210,16 +210,16 @@ class NetworkCmProxyControllerSpec extends Specification { 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 + "&fields=testFields&depth=5" and: 'ncmp service returns json object' mockNetworkCmProxyDataService.getResourceDataPassThroughRunningForCmHandle('testCmHandle', - 'testResourceIdentifier', - 'application/json', - 'testFields', - 5) >> '{valid-json}' + resourceIdentifier, + 'application/json', + 'testFields', + 5) >> '{valid-json}' when: 'get data resource request is performed' def response = mvc.perform( get(getUrl) @@ -230,12 +230,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 +252,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' -- cgit 1.2.3-korg