From ee4242c9d89dc1a814f12d0f90880e3f21745f43 Mon Sep 17 00:00:00 2001 From: leventecsanyi Date: Fri, 26 Jul 2024 13:25:12 +0200 Subject: Get data job result - extended openapi - added not-implemented http error for result endpoint - added testware - added stub implementation - fixed writeDataJob bug in stub Issue-ID: CPS-2296 Signed-off-by: leventecsanyi Change-Id: I9398cb73b635bec360df886372690187ff54e0d4 --- dmi-service/openapi/openapi-datajob.yml | 22 ++++++++ .../rest/controller/DmiDatajobsRestController.java | 41 ++++++++++---- .../DmiDatajobsRestControllerSpec.groovy | 12 ++++ .../stub/controller/DmiRestStubController.java | 23 +++++++- docs/api/swagger/openapi-datajob.yaml | 64 ++++++++++++++++++++++ 5 files changed, 149 insertions(+), 13 deletions(-) diff --git a/dmi-service/openapi/openapi-datajob.yml b/dmi-service/openapi/openapi-datajob.yml index 68ee3ecc..aa93623c 100644 --- a/dmi-service/openapi/openapi-datajob.yml +++ b/dmi-service/openapi/openapi-datajob.yml @@ -74,6 +74,20 @@ paths: responses: "501": $ref: '#/components/responses/NotImplemented' + /v1/dataJob/{requestId}/dataProducerJob/{dataProducerJobId}/result: + get: + description: Retrieve the result of a data job. + operationId: getDataJobResult + parameters: + - $ref: '#/components/parameters/requestIdInPath' + - $ref: '#/components/parameters/dataProducerJobIdInPath' + - $ref: '#/components/parameters/dataProducerIdInQuery' + - $ref: '#/components/parameters/destinationInQuery' + tags: + - dmi-datajob + responses: + "501": + $ref: '#/components/responses/NotImplemented' components: parameters: @@ -101,6 +115,14 @@ components: schema: type: string example: some-data-producer-identifier + destinationInQuery: + name: destination + in: query + description: The destination of the results (Kafka topic name or s3 bucket name) + required: true + schema: + type: string + example: some-destination schemas: ErrorMessage: type: object diff --git a/dmi-service/src/main/java/org/onap/cps/ncmp/dmi/datajobs/rest/controller/DmiDatajobsRestController.java b/dmi-service/src/main/java/org/onap/cps/ncmp/dmi/datajobs/rest/controller/DmiDatajobsRestController.java index 8cf9f1fb..928ec6b6 100644 --- a/dmi-service/src/main/java/org/onap/cps/ncmp/dmi/datajobs/rest/controller/DmiDatajobsRestController.java +++ b/dmi-service/src/main/java/org/onap/cps/ncmp/dmi/datajobs/rest/controller/DmiDatajobsRestController.java @@ -34,13 +34,13 @@ public class DmiDatajobsRestController implements DmiDatajobApi { /** * This method is not implemented for ONAP DMI plugin. * - * @param requestId Identifier for the overall Datajob (required) - * @param subjobReadRequest Operation body (optional) - * @return (@ code ResponseEntity) response entity + * @param requestId Identifier for the overall Datajob (required) + * @param subjobReadRequest Operation body (optional) + * @return (@ code ResponseEntity) Response entity */ @Override public ResponseEntity readDataJob(final String requestId, - final SubjobReadRequest subjobReadRequest) { + final SubjobReadRequest subjobReadRequest) { return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED); } @@ -48,23 +48,23 @@ public class DmiDatajobsRestController implements DmiDatajobApi { /** * This method is not implemented for ONAP DMI plugin. * - * @param requestId Identifier for the overall Datajob (required) - * @param subjobWriteRequest Operation body (optional) - * @return (@ code ResponseEntity) response entity + * @param requestId Identifier for the overall Datajob (required) + * @param subjobWriteRequest Operation body (optional) + * @return (@ code ResponseEntity) Response entity */ @Override public ResponseEntity writeDataJob(final String requestId, - final SubjobWriteRequest subjobWriteRequest) { + final SubjobWriteRequest subjobWriteRequest) { return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED); } /** * This method is not implemented for ONAP DMI plugin. * - * @param requestId Identifier for the overall Datajob (required) - * @param dataProducerJobId Identifier for the data producer job (required) - * @param dataProducerId Identifier for the data producer as a query parameter (required) - * @return ResponseEntity(Void) response entity indicating the method is not implemented + * @param requestId Identifier for the overall Datajob (required) + * @param dataProducerJobId Identifier for the data producer job (required) + * @param dataProducerId Identifier for the data producer as a query parameter (required) + * @return ResponseEntity Response entity indicating the method is not implemented */ @Override public ResponseEntity getDataJobStatus(final String requestId, @@ -72,4 +72,21 @@ public class DmiDatajobsRestController implements DmiDatajobApi { final String dataProducerId) { return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED); } + + /** + * This method is not implemented for ONAP DMI plugin. + * + * @param requestId Identifier for the overall Datajob (required) + * @param dataProducerJobId Identifier for the data producer job (required) + * @param dataProducerId Identifier for the data producer as a query parameter (required) + * @param destination The destination of the results, Kafka topic name or s3 bucket name (required) + * @return ResponseEntity Response entity indicating the method is not implemented + */ + @Override + public ResponseEntity getDataJobResult(final String requestId, + final String dataProducerJobId, + final String dataProducerId, + final String destination) { + return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED); + } } diff --git a/dmi-service/src/test/groovy/org/onap/cps/ncmp/dmi/datajobs/rest/controller/DmiDatajobsRestControllerSpec.groovy b/dmi-service/src/test/groovy/org/onap/cps/ncmp/dmi/datajobs/rest/controller/DmiDatajobsRestControllerSpec.groovy index 69d2ebd2..6c05f6f3 100644 --- a/dmi-service/src/test/groovy/org/onap/cps/ncmp/dmi/datajobs/rest/controller/DmiDatajobsRestControllerSpec.groovy +++ b/dmi-service/src/test/groovy/org/onap/cps/ncmp/dmi/datajobs/rest/controller/DmiDatajobsRestControllerSpec.groovy @@ -79,4 +79,16 @@ class DmiDatajobsRestControllerSpec extends Specification{ then: 'response value is Not Implemented' response.status == HttpStatus.NOT_IMPLEMENTED.value() } + + def 'get result request should return 501 HTTP Status' () { + given: 'URL to get the result of a data job' + def getStatus = "${basePathV1}/dataJob/some-identifier/dataProducerJob/some-producer-job-identifier/result?dataProducerId=some-data-producer-identifier&destination=some-destination" + when: 'the request is performed' + def response = mvc.perform( + get(getStatus) + .contentType('application/json') + ).andReturn().response + then: 'response value is Not Implemented' + response.status == HttpStatus.NOT_IMPLEMENTED.value() + } } diff --git a/dmi-stub/dmi-plugin-demo-and-csit-stub-service/src/main/java/org/onap/cps/ncmp/dmi/rest/stub/controller/DmiRestStubController.java b/dmi-stub/dmi-plugin-demo-and-csit-stub-service/src/main/java/org/onap/cps/ncmp/dmi/rest/stub/controller/DmiRestStubController.java index b8b46f06..5021ae76 100644 --- a/dmi-stub/dmi-plugin-demo-and-csit-stub-service/src/main/java/org/onap/cps/ncmp/dmi/rest/stub/controller/DmiRestStubController.java +++ b/dmi-stub/dmi-plugin-demo-and-csit-stub-service/src/main/java/org/onap/cps/ncmp/dmi/rest/stub/controller/DmiRestStubController.java @@ -89,7 +89,7 @@ public class DmiRestStubController { private long readDataForCmHandleDelayMs; @Value("${delay.write-data-for-cm-handle-delay-ms}") private long writeDataForCmHandleDelayMs; - private AtomicInteger subJobWriteRequestCounter; + private final AtomicInteger subJobWriteRequestCounter = new AtomicInteger(); /** * This code defines a REST API endpoint for adding new the module set tag mapping. The endpoint receives the @@ -293,6 +293,27 @@ public class DmiRestStubController { return ResponseEntity.ok("FINISHED"); } + /** + * Retrieves the result of a given data job identified by {@code requestId} and {@code dataProducerJobId}. + * + * @param requestId Identifier for the overall Datajob (required) + * @param dataProducerJobId Identifier for the data producer job (required) + * @param dataProducerId Identifier for the data producer as a query parameter (required) + * @param destination The destination of the results, Kafka topic name or s3 bucket name (required) + * @return A ResponseEntity with HTTP status 200 (OK) and the data job's result as an Object. + */ + @GetMapping("/v1/dataJob/{requestId}/dataProducerJob/{dataProducerJobId}/result") + public ResponseEntity retrieveDataJobResult( + @PathVariable("requestId") final String requestId, + @PathVariable("dataProducerJobId") final String dataProducerJobId, + @RequestParam(name = "dataProducerId") String dataProducerId, + @RequestParam(name = "destination") String destination) { + log.debug("Received request to retrieve data job result. Request ID: {}, Data Producer Job ID: {}, " + + "Data Producer ID: {}, Destination: {}", + requestId, dataProducerJobId, dataProducerId, destination); + return ResponseEntity.ok(Map.of("result", "some status")); + } + private CloudEvent buildAndGetCloudEvent(final String topic, final String requestId, final DataOperationEvent dataOperationEvent) { CloudEvent cloudEvent = null; diff --git a/docs/api/swagger/openapi-datajob.yaml b/docs/api/swagger/openapi-datajob.yaml index a0b6d4f3..18efbc38 100644 --- a/docs/api/swagger/openapi-datajob.yaml +++ b/docs/api/swagger/openapi-datajob.yaml @@ -121,6 +121,60 @@ paths: description: Not Implemented tags: - dmi-datajob + /v1/dataJob/{requestId}/dataProducerJob/{dataProducerJobId}/result: + get: + description: Retrieve the result of a data job. + operationId: getDataJobResult + parameters: + - description: Identifier for the overall Datajob + explode: false + in: path + name: requestId + required: true + schema: + example: some-identifier + type: string + style: simple + - description: Identifier for the data producer job + explode: false + in: path + name: dataProducerJobId + required: true + schema: + example: some-producer-job-identifier + type: string + style: simple + - description: Identifier for the data producer + explode: true + in: query + name: dataProducerId + required: true + schema: + example: some-data-producer-identifier + type: string + style: form + - description: The destination of the results (Kafka topic name or s3 bucket name) + explode: true + in: query + name: destination + required: true + schema: + example: some-destination + type: string + style: form + responses: + "501": + content: + application/json: + example: + status: 501 + message: Not Implemented + details: Method Not Implemented + schema: + $ref: '#/components/schemas/ErrorMessage' + description: Not Implemented + tags: + - dmi-datajob components: parameters: requestIdInPath: @@ -153,6 +207,16 @@ components: example: some-data-producer-identifier type: string style: form + destinationInQuery: + description: The destination of the results (Kafka topic name or s3 bucket name) + explode: true + in: query + name: destination + required: true + schema: + example: some-destination + type: string + style: form responses: NotImplemented: content: -- cgit 1.2.3-korg