From ecd7f5e418c17d8f0f3f12af4fd0a543084e8254 Mon Sep 17 00:00:00 2001 From: tragait Date: Thu, 13 Jan 2022 13:15:14 +0000 Subject: [PATCH] patch operation for ncmp running Signed-off-by: tragait Change-Id: Ib136291963a5d7f115c8637708a1d5a64c62c9f2 Issue-ID: CPS-641 --- cps-ncmp-rest/docs/openapi/components.yaml | 44 ++++++++++++++++ cps-ncmp-rest/docs/openapi/ncmp.yml | 4 +- .../rest/controller/NetworkCmProxyController.java | 4 +- .../cps/ncmp/api/NetworkCmProxyDataService.java | 3 +- .../api/impl/NetworkCmProxyDataServiceImpl.java | 4 +- csit/data/bookstorePatchExample.json | 59 ++++++++++++++++++++++ csit/tests/ncmp-passthrough/ncmp-passthrough.robot | 21 ++++++++ 7 files changed, 132 insertions(+), 7 deletions(-) create mode 100644 csit/data/bookstorePatchExample.json diff --git a/cps-ncmp-rest/docs/openapi/components.yaml b/cps-ncmp-rest/docs/openapi/components.yaml index d9bd49a09..e63f9c0b8 100644 --- a/cps-ncmp-rest/docs/openapi/components.yaml +++ b/cps-ncmp-rest/docs/openapi/components.yaml @@ -151,6 +151,50 @@ components: - authors: - Philip Pullman + dataSamplePatchRequest: + summary: Sample patch request + description: Sample patch request body + value: + ietf-restconf:yang-patch: + patch-id: patch-1 + edit: + - edit-id: edit1 + operation: merge + target: / + value: + test:bookstore: + bookstore-name: Chapters + categories: + - code: '01' + name: Science + books: + - authors: + - Author1 + - Author2 + - code: '02' + name: Arts + books: + - authors: + - Author3 + - edit-id: edit2 + operation: merge + target: / + value: + test:bookstore: + bookstore-name: Novels + categories: + - code: '03' + name: History + books: + - authors: + - Iain M. Banks + - Ursula K. Le Guin + - code: '04' + name: Fiction + books: + - authors: + - Philip Pullman + dataSampleResponse: summary: Sample response description: Sample response for selecting 'sample 1'. diff --git a/cps-ncmp-rest/docs/openapi/ncmp.yml b/cps-ncmp-rest/docs/openapi/ncmp.yml index 7845a34ad..75a529504 100755 --- a/cps-ncmp-rest/docs/openapi/ncmp.yml +++ b/cps-ncmp-rest/docs/openapi/ncmp.yml @@ -340,12 +340,12 @@ resourceDataForPassthroughRunning: requestBody: required: true content: - application/json: + '*/*': schema: type: object examples: dataSampleRequest: - $ref: 'components.yaml#/components/examples/dataSampleRequest' + $ref: 'components.yaml#/components/examples/dataSamplePatchRequest' responses: 200: $ref: 'components.yaml#/components/responses/Ok' 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 e3c457eaf..a6b09e845 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 @@ -204,9 +204,9 @@ public class NetworkCmProxyController implements NetworkCmProxyApi { public ResponseEntity patchResourceDataRunningForCmHandle(final String resourceIdentifier, final String cmHandle, final Object requestBody, final String contentType) { - networkCmProxyDataService.writeResourceDataPassThroughRunningForCmHandle(cmHandle, + final Object responseObject = networkCmProxyDataService.writeResourceDataPassThroughRunningForCmHandle(cmHandle, resourceIdentifier, PATCH, GSON.toJson(requestBody), contentType); - return new ResponseEntity<>(HttpStatus.OK); + return ResponseEntity.ok(responseObject); } /** diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/NetworkCmProxyDataService.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/NetworkCmProxyDataService.java index ec816ed73..ea34f957f 100644 --- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/NetworkCmProxyDataService.java +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/NetworkCmProxyDataService.java @@ -147,8 +147,9 @@ public interface NetworkCmProxyDataService { * @param operation required operation * @param requestBody request body to create resource * @param contentType content type in body + * @return {@code Object} return data */ - void writeResourceDataPassThroughRunningForCmHandle(String cmHandle, + Object writeResourceDataPassThroughRunningForCmHandle(String cmHandle, String resourceIdentifier, OperationEnum operation, String requestBody, diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java index 7ded95fa0..0ea6f3964 100755 --- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java @@ -194,12 +194,12 @@ public class NetworkCmProxyDataServiceImpl implements NetworkCmProxyDataService } @Override - public void writeResourceDataPassThroughRunningForCmHandle(final String cmHandle, + public Object writeResourceDataPassThroughRunningForCmHandle(final String cmHandle, final String resourceIdentifier, final OperationEnum operation, final String requestData, final String dataType) { - handleResponse( + return handleResponse( dmiDataOperations.writeResourceDataPassThroughRunningFromDmi( cmHandle, resourceIdentifier, operation, requestData, dataType), "Not able to " + operation + " resource data."); diff --git a/csit/data/bookstorePatchExample.json b/csit/data/bookstorePatchExample.json new file mode 100644 index 000000000..039ea4bcd --- /dev/null +++ b/csit/data/bookstorePatchExample.json @@ -0,0 +1,59 @@ +{ + "ietf-restconf:yang-patch":{ + "patch-id":"patch-1", + "edit":[ + { + "edit-id":"edit1", + "operation":"merge", + "target":"/", + "value":{ + "bookstore": { + "categories": [ + { + "code": "100", + "books": [ + { + "title": "A new book in a new category", + "pub_year": "2019", + "authors": [ + "Rahul" + ], + "lang": "English", + "price": "2011" + } + ], + "name": "Category100" + } + ] + } + } + }, + { + "edit-id":"edit2", + "operation":"merge", + "target":"/", + "value":{ + "bookstore": { + "categories": [ + { + "code": "02", + "name": "Horror", + "books": [ + { + "title": "A New book in existing category", + "lang": "English", + "authors": [ + "Joe & Rahul" + ], + "pub_year": "2003", + "price": "2000" + } + ] + } + ] + } + } + } + ] + } +} \ No newline at end of file diff --git a/csit/tests/ncmp-passthrough/ncmp-passthrough.robot b/csit/tests/ncmp-passthrough/ncmp-passthrough.robot index 36350ad52..1d977b9d9 100644 --- a/csit/tests/ncmp-passthrough/ncmp-passthrough.robot +++ b/csit/tests/ncmp-passthrough/ncmp-passthrough.robot @@ -116,3 +116,24 @@ Verify delete to bookstore using passthrough-running removed only category 01 Should Be Equal As Strings "${item['name']}" "Horror" END END + +Patch will add new category with new book and add a new book to an existing category + ${uri}= Set Variable ${ncmpBasePath}/v1/ch/PNFDemo/data/ds/ncmp-datastore:passthrough-running?resourceIdentifier=stores:bookstore + ${headers}= Create Dictionary Content-Type=application/yang.patch+json Authorization=${auth} + ${jsonData}= Get Binary File ${DATADIR}${/}bookstorePatchExample.json + ${response}= PATCH On Session CPS_URL ${uri} headers=${headers} data=${jsonData} + Should Be Equal As Strings ${response.status_code} 200 + ${verifyUri}= Set Variable ${ncmpBasePath}/v1/ch/PNFDemo/data/ds/ncmp-datastore:passthrough-running?resourceIdentifier=stores:bookstore/categories=100 + ${verifyHeaders}= Create Dictionary Authorization=${auth} + ${verifyResponse}= Get On Session CPS_URL ${verifyUri} headers=${verifyHeaders} + ${responseJson}= Set Variable ${verifyResponse.json()} + Should Be Equal As Strings ${verifyResponse.status_code} 200 + FOR ${item} IN @{responseJson['stores:categories']} + IF "${item['code']}" == "100" + Should Be Equal As Strings "${item['name']}" "Category100" + END + END + ${verifyUri}= Set Variable ${ncmpBasePath}/v1/ch/PNFDemo/data/ds/ncmp-datastore:passthrough-running?resourceIdentifier=stores:bookstore/categories=02/books=A%20New%20book%20in%20existing%20category + ${verifyResponse}= Get On Session CPS_URL ${verifyUri} headers=${verifyHeaders} + ${responseJson}= Set Variable ${verifyResponse.json()} + Should Be Equal As Strings ${verifyResponse.status_code} 200 \ No newline at end of file -- 2.16.6