/*
* ============LICENSE_START=======================================================
* Copyright (C) 2021-2022 Bell Canada
- * Modifications Copyright (C) 2021-2022 Nordix Foundation
+ * Modifications Copyright (C) 2021-2023 Nordix Foundation
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
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.rest.model.CmHandleQueryParameters
import org.onap.cps.ncmp.rest.model.CmHandlerRegistrationErrorResponse
import org.onap.cps.ncmp.rest.model.DmiPluginRegistrationErrorResponse
import org.onap.cps.ncmp.rest.model.RestDmiPluginRegistration
+import org.onap.cps.ncmp.api.models.CmHandleQueryServiceParameters
import org.onap.cps.utils.JsonObjectMapper
import org.spockframework.spring.SpringBean
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.test.web.servlet.MockMvc
import spock.lang.Specification
-import static org.onap.cps.ncmp.api.models.CmHandleRegistrationResponse.RegistrationError.CM_HANDLE_ALREADY_EXIST
-import static org.onap.cps.ncmp.api.models.CmHandleRegistrationResponse.RegistrationError.CM_HANDLE_DOES_NOT_EXIST
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post
@WebMvcTest(NetworkCmProxyInventoryController)
DmiPluginRegistration mockDmiPluginRegistration = Mock()
+ CmHandleQueryServiceParameters cmHandleQueryServiceParameters = Mock()
+
+ @SpringBean
JsonObjectMapper jsonObjectMapper = new JsonObjectMapper(new ObjectMapper())
@Value('${rest.api.ncmp-inventory-base-path}/v1')
response.status == HttpStatus.BAD_REQUEST.value()
}
+ def 'CmHandle search endpoint test #scenario.'() {
+ given: 'a query object'
+ def cmHandleQueryParameters = jsonObjectMapper.asJsonString(new CmHandleQueryParameters())
+ and: 'the mapper service returns a converted object'
+ ncmpRestInputMapper.toCmHandleQueryServiceParameters(_) >> cmHandleQueryServiceParameters
+ and: 'the service returns the desired results'
+ mockNetworkCmProxyDataService.executeCmHandleIdSearchForInventory(cmHandleQueryServiceParameters) >> serviceMockResponse
+ when: 'post request is performed & search is called with the given request parameters'
+ def response = mvc.perform(
+ post("$ncmpBasePathV1/ch/searches")
+ .contentType(MediaType.APPLICATION_JSON)
+ .content(cmHandleQueryParameters)
+ ).andReturn().response
+ then: 'response status is OK'
+ assert response.status == HttpStatus.OK.value()
+ and: 'the response data matches the service response.'
+ jsonObjectMapper.convertJsonString(response.getContentAsString(), List) == serviceMockResponse
+ where: 'the service respond with'
+ scenario | serviceMockResponse
+ 'empty response' | []
+ 'populates response' | ['cmHandle1', 'cmHandle2']
+ }
+
+ def 'CmHandle search endpoint test #scenario with blank cmHandleQueryParameters.'() {
+ given: 'a query object'
+ def cmHandleQueryParameters = "{}"
+ and: 'the mapper service returns a converted object'
+ ncmpRestInputMapper.toCmHandleQueryServiceParameters(_) >> cmHandleQueryServiceParameters
+ and: 'the service returns the desired results'
+ mockNetworkCmProxyDataService.executeCmHandleIdSearchForInventory(cmHandleQueryServiceParameters) >> serviceMockResponse
+ when: 'post request is performed & search is called with the given request parameters'
+ def response = mvc.perform(
+ post("$ncmpBasePathV1/ch/searches")
+ .contentType(MediaType.APPLICATION_JSON)
+ .content(cmHandleQueryParameters)
+ ).andReturn().response
+ then: 'response status is OK'
+ assert response.status == HttpStatus.OK.value()
+ and: 'the response data matches the service response.'
+ jsonObjectMapper.convertJsonString(response.getContentAsString(), List) == serviceMockResponse
+ where: 'the service respond with'
+ scenario | serviceMockResponse
+ 'empty response' | []
+ 'populates response' | ['cmHandle1', 'cmHandle2']
+ }
+
+ def 'CmHandle search endpoint Error Handling.'() {
+ given: 'the mapper service returns a converted object'
+ ncmpRestInputMapper.toCmHandleQueryServiceParameters(_) >> cmHandleQueryServiceParameters
+ and: 'the service returns the desired results'
+ mockNetworkCmProxyDataService.executeCmHandleIdSearchForInventory(cmHandleQueryServiceParameters) >> []
+ when: 'post request is performed & search is called with the given request parameters'
+ def response = mvc.perform(
+ post("$ncmpBasePathV1/ch/searches")
+ .contentType(MediaType.APPLICATION_JSON)
+ .content(cmHandleQueryParameters)
+ ).andReturn().response
+ then: 'response status is BAD_REQUEST'
+ assert response.status == HttpStatus.BAD_REQUEST.value()
+ where: 'the cmHandleQueryParameters are'
+ scenario | cmHandleQueryParameters
+ 'empty string' | ""
+ 'non-json string' | "this is a test"
+ }
+
def 'DMI Registration: All cm-handles operations processed successfully.'() {
given: 'a dmi plugin registration'
def dmiRegistrationRequest = '{}'
responseBody.getFailedUpdatedCmHandles() == expectedFailedUpdateCmHandle
responseBody.getFailedRemovedCmHandles() == expectedFailedRemovedCmHandle
where:
- scenario | createCmHandleResponse | updateCmHandleResponse | removeCmHandleResponse || expectedFailedCreatedCmHandle | expectedFailedUpdateCmHandle | expectedFailedRemovedCmHandle
- 'only create failed' | failedResponse('cm-handle-1') | successResponse('cm-handle-2') | successResponse('cm-handle-3') || [failedRestResponse('cm-handle-1')] | [] | []
- 'only update failed' | successResponse('cm-handle-1') | failedResponse('cm-handle-2') | successResponse('cm-handle-3') || [] | [failedRestResponse('cm-handle-2')] | []
- 'only delete failed' | successResponse('cm-handle-1') | successResponse('cm-handle-2') | failedResponse('cm-handle-3') || [] | [] | [failedRestResponse('cm-handle-3')]
- 'all three failed' | failedResponse('cm-handle-1') | failedResponse('cm-handle-2') | failedResponse('cm-handle-3') || [failedRestResponse('cm-handle-1')] | [failedRestResponse('cm-handle-2')] | [failedRestResponse('cm-handle-3')]
- 'create update failed' | failedResponse('cm-handle-1') | failedResponse('cm-handle-2') | successResponse('cm-handle-3') || [failedRestResponse('cm-handle-1')] | [failedRestResponse('cm-handle-2')] | []
- 'create delete failed' | failedResponse('cm-handle-1') | successResponse('cm-handle-2') | failedResponse('cm-handle-3') || [failedRestResponse('cm-handle-1')] | [] | [failedRestResponse('cm-handle-3')]
- 'update delete failed' | successResponse('cm-handle-1') | failedResponse('cm-handle-2') | failedResponse('cm-handle-3') || [] | [failedRestResponse('cm-handle-2')] | [failedRestResponse('cm-handle-3')]
+ scenario | createCmHandleResponse | updateCmHandleResponse | removeCmHandleResponse || expectedFailedCreatedCmHandle | expectedFailedUpdateCmHandle | expectedFailedRemovedCmHandle
+ 'only create failed' | expectedFailedResponse('cm-handle-1') | expectedSuccessResponse('cm-handle-2') | expectedSuccessResponse('cm-handle-3') || [expectedUnknownErrorResponse('cm-handle-1')] | [] | []
+ 'only update failed' | expectedSuccessResponse('cm-handle-1') | expectedFailedResponse('cm-handle-2') | expectedSuccessResponse('cm-handle-3') || [] | [expectedUnknownErrorResponse('cm-handle-2')] | []
+ 'only delete failed' | expectedSuccessResponse('cm-handle-1') | expectedSuccessResponse('cm-handle-2') | expectedFailedResponse('cm-handle-3') || [] | [] | [expectedUnknownErrorResponse('cm-handle-3')]
+ 'all three failed' | expectedFailedResponse('cm-handle-1') | expectedFailedResponse('cm-handle-2') | expectedFailedResponse('cm-handle-3') || [expectedUnknownErrorResponse('cm-handle-1')] | [expectedUnknownErrorResponse('cm-handle-2')] | [expectedUnknownErrorResponse('cm-handle-3')]
+ 'create update failed' | expectedFailedResponse('cm-handle-1') | expectedFailedResponse('cm-handle-2') | expectedSuccessResponse('cm-handle-3') || [expectedUnknownErrorResponse('cm-handle-1')] | [expectedUnknownErrorResponse('cm-handle-2')] | []
+ 'create delete failed' | expectedFailedResponse('cm-handle-1') | expectedSuccessResponse('cm-handle-2') | expectedFailedResponse('cm-handle-3') || [expectedUnknownErrorResponse('cm-handle-1')] | [] | [expectedUnknownErrorResponse('cm-handle-3')]
+ 'update delete failed' | expectedSuccessResponse('cm-handle-1') | expectedFailedResponse('cm-handle-2') | expectedFailedResponse('cm-handle-3') || [] | [expectedUnknownErrorResponse('cm-handle-2')] | [expectedUnknownErrorResponse('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')
+ def expectedUnknownErrorResponse(cmHandle) {
+ return new CmHandlerRegistrationErrorResponse('cmHandle': cmHandle, 'errorCode': '108', 'errorText': 'Failed')
}
- def failedResponse(cmHandle) {
- return CmHandleRegistrationResponse.createFailureResponse(cmHandle, new RuntimeException("Failed"))
+ def expectedFailedResponse(cmHandle) {
+ return CmHandleRegistrationResponse.createFailureResponse(cmHandle, new RuntimeException('Failed'))
}
- def successResponse(cmHandle) {
+ def expectedSuccessResponse(cmHandle) {
return CmHandleRegistrationResponse.createSuccessResponse(cmHandle)
}