diff options
author | emaclee <lee.anjella.macabuhay@est.tech> | 2022-08-19 09:26:39 +0100 |
---|---|---|
committer | Lee Anjella Macabuhay <lee.anjella.macabuhay@est.tech> | 2022-09-01 09:37:42 +0000 |
commit | d340047f82a8301453fc3872e474090366b68472 (patch) | |
tree | dda61a5c559dceb2aa7d26beb7ed292d23b77175 /cps-ncmp-rest | |
parent | c1915b5af27e4ee3ff89fd881e753e029a0bf5da (diff) |
Get all cm handles by DMI plugin Identifier
- api added to get cm handles by dmi plugin identifier
- response object refactored from RestOutputCmHandle to collection of
Strings (cm handle ids)
- added public and private methods in CmHandleQueries to get cm handle ID by dmi plugin
- added unit tests including test to show that there are no duplicates
on response
Issue-ID: CPS-1136
Signed-off-by: emaclee <lee.anjella.macabuhay@est.tech>
Change-Id: Ia3bdc16172a90ad3a3f9ae11cddcad1352188726
Diffstat (limited to 'cps-ncmp-rest')
5 files changed, 70 insertions, 4 deletions
diff --git a/cps-ncmp-rest/docs/openapi/components.yaml b/cps-ncmp-rest/docs/openapi/components.yaml index c1e05876ca..427f083698 100644 --- a/cps-ncmp-rest/docs/openapi/components.yaml +++ b/cps-ncmp-rest/docs/openapi/components.yaml @@ -168,7 +168,6 @@ components: } } - CmHandleQueryParameters: type: object title: Cm Handle query parameters for executing cm handle search @@ -462,6 +461,14 @@ components: schema: type: string default: / + dmiPluginIdentifierInQuery: + name: dmi-plugin-identifier + in: query + description: dmi-plugin-identifier + required: true + schema: + type: string + example: my-dmi-plugin resourceIdentifierInQuery: name: resourceIdentifier in: query diff --git a/cps-ncmp-rest/docs/openapi/ncmp-inventory.yml b/cps-ncmp-rest/docs/openapi/ncmp-inventory.yml index 0a408c2413..0c3dffd217 100755 --- a/cps-ncmp-rest/docs/openapi/ncmp-inventory.yml +++ b/cps-ncmp-rest/docs/openapi/ncmp-inventory.yml @@ -97,3 +97,28 @@ updateDmiRegistration: "errorText": "cm-handle has an invalid character(s) in id" } ] + +getAllCmHandleIdsForRegisteredDmi: + get: + description: Get all cm handle IDs for a registered DMI plugin + tags: + - network-cm-proxy-inventory + summary: Get all cm handle IDs for a registered DMI plugin (DMI plugin, DMI data plugin, DMI model plugin) + operationId: getAllCmHandleIdsForRegisteredDmi + parameters: + - $ref: 'components.yaml#/components/parameters/dmiPluginIdentifierInQuery' + responses: + 200: + description: OK + content: + application/json: + schema: + type: array + items: + type: string + 401: + $ref: 'components.yaml#/components/responses/Unauthorized' + 403: + $ref: 'components.yaml#/components/responses/Forbidden' + 500: + $ref: 'components.yaml#/components/responses/InternalServerError'
\ No newline at end of file diff --git a/cps-ncmp-rest/docs/openapi/openapi-inventory.yml b/cps-ncmp-rest/docs/openapi/openapi-inventory.yml index ee09d050f3..08270bc680 100755 --- a/cps-ncmp-rest/docs/openapi/openapi-inventory.yml +++ b/cps-ncmp-rest/docs/openapi/openapi-inventory.yml @@ -1,5 +1,6 @@ # ============LICENSE_START======================================================= # Copyright (C) 2021 Bell Canada +# Modifications Copyright (C) 2022 Nordix Foundation # ================================================================================ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -26,3 +27,6 @@ servers: paths: /v1/ch: $ref: 'ncmp-inventory.yml#/updateDmiRegistration' + + /v1/ch/cmHandles: + $ref: 'ncmp-inventory.yml#/getAllCmHandleIdsForRegisteredDmi'
\ No newline at end of file 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 index 105a6a559c..0c428e4423 100755 --- 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 @@ -22,6 +22,7 @@ package org.onap.cps.ncmp.rest.controller; import java.util.List; +import java.util.Set; import java.util.stream.Collectors; import javax.validation.Valid; import lombok.RequiredArgsConstructor; @@ -47,6 +48,19 @@ public class NetworkCmProxyInventoryController implements NetworkCmProxyInventor private final NcmpRestInputMapper ncmpRestInputMapper; /** + * Get all cm-handle IDs under a registered DMI plugin. + * + * @param dmiPluginIdentifier DMI plugin identifier + * @return list of cm handle IDs + */ + @Override + public ResponseEntity<List<String>> getAllCmHandleIdsForRegisteredDmi(final String dmiPluginIdentifier) { + final Set<String> cmHandleIds = + networkCmProxyDataService.getAllCmHandleIdsByDmiPluginIdentifier(dmiPluginIdentifier); + return ResponseEntity.ok(List.copyOf(cmHandleIds)); + } + + /** * Update DMI Plugin Registration (used for first registration also). * * @param restDmiPluginRegistration the registration data @@ -69,7 +83,6 @@ public class NetworkCmProxyInventoryController implements NetworkCmProxyInventor return dmiPluginRegistrationErrorResponse.getFailedCreatedCmHandles().isEmpty() && dmiPluginRegistrationErrorResponse.getFailedUpdatedCmHandles().isEmpty() && dmiPluginRegistrationErrorResponse.getFailedRemovedCmHandles().isEmpty(); - } private DmiPluginRegistrationErrorResponse getFailureRegistrationResponse( @@ -103,5 +116,3 @@ public class NetworkCmProxyInventoryController implements NetworkCmProxyInventor } } - - 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 index 6673b2172f..b5a089bba3 100644 --- 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 @@ -27,6 +27,7 @@ import org.onap.cps.ncmp.api.NetworkCmProxyDataService import org.onap.cps.ncmp.api.models.CmHandleRegistrationResponse import org.onap.cps.ncmp.api.models.DmiPluginRegistration import org.onap.cps.ncmp.api.models.DmiPluginRegistrationResponse +import org.onap.cps.ncmp.api.models.NcmpServiceCmHandle import org.onap.cps.ncmp.rest.model.CmHandlerRegistrationErrorResponse import org.onap.cps.ncmp.rest.model.DmiPluginRegistrationErrorResponse import org.onap.cps.ncmp.rest.model.RestDmiPluginRegistration @@ -41,6 +42,7 @@ 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.get import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post @WebMvcTest(NetworkCmProxyInventoryController) @@ -158,6 +160,23 @@ class NetworkCmProxyInventoryControllerSpec extends Specification { 'update delete failed' | successResponse('cm-handle-1') | failedResponse('cm-handle-2') | failedResponse('cm-handle-3') || [] | [failedRestResponse('cm-handle-2')] | [failedRestResponse('cm-handle-3')] } + def 'Get all cm handle IDs by DMI plugin identifier.'() { + given: 'an endpoint for returning cm handle IDs for a registered dmi plugin' + def getUrl = "$ncmpBasePathV1/ch/cmHandles?dmi-plugin-identifier=some-dmi-plugin-identifier" + and: 'a collection of cm handle IDs are returned' + 1 * mockNetworkCmProxyDataService.getAllCmHandleIdsByDmiPluginIdentifier('some-dmi-plugin-identifier') + >> ['cm-handle-id-1','cm-handle-id-2'] + when: 'the endpoint is invoked' + def response = mvc.perform( + get(getUrl) + .contentType(MediaType.APPLICATION_JSON) + .accept(MediaType.APPLICATION_JSON_VALUE) + ).andReturn().response + then: 'the response matches the result returned by the service layer' + assert response.contentAsString.contains('cm-handle-id-1') + assert response.contentAsString.contains('cm-handle-id-2') + } + def failedRestResponse(cmHandle) { return new CmHandlerRegistrationErrorResponse('cmHandle': cmHandle, 'errorCode': '00', 'errorText': 'Failed') } |