From 977f7c395cee52cdecd0b01cb0412ebfeb9db048 Mon Sep 17 00:00:00 2001 From: "raviteja.karumuri" Date: Tue, 20 Jun 2023 19:10:21 +0100 Subject: NCMP : Replacing the word 'Batch' as 'DataOperation'. Issue-ID: CPS-1754 Signed-off-by: raviteja.karumuri Change-Id: Ie9f56effb160582ba7177331fb6260b2bde2342b --- .../controller/NetworkCmProxyStubController.java | 6 +- cps-ncmp-rest/docs/openapi/components.yaml | 12 ++-- cps-ncmp-rest/docs/openapi/ncmp.yml | 8 +-- cps-ncmp-rest/docs/openapi/openapi.yml | 2 +- .../rest/controller/NetworkCmProxyController.java | 14 ++-- .../handlers/NcmpDatastoreRequestHandler.java | 42 ++++++------ .../NcmpPassthroughResourceRequestHandler.java | 12 ++-- .../handlers/TaskManagementDefaultHandler.java | 10 +-- .../rest/mapper/DataOperationRequestMapper.java | 41 +++++++++++ .../mapper/ResourceDataBatchRequestMapper.java | 41 ----------- .../controller/NetworkCmProxyControllerSpec.groovy | 75 ++++++++++---------- .../NetworkCmProxyRestExceptionHandlerSpec.groovy | 6 +- .../cps/ncmp/api/NetworkCmProxyDataService.java | 14 ++-- .../api/impl/NetworkCmProxyDataServiceImpl.java | 12 ++-- .../api/impl/operations/DmiBatchOperation.java | 18 ++--- .../api/impl/operations/DmiDataOperations.java | 20 +++--- .../impl/utils/ResourceDataBatchRequestUtils.java | 26 +++---- .../ncmp/api/models/BatchOperationDefinition.java | 49 ------------- .../ncmp/api/models/DataOperationDefinition.java | 49 +++++++++++++ .../cps/ncmp/api/models/DataOperationRequest.java | 43 ++++++++++++ .../ncmp/api/models/ResourceDataBatchRequest.java | 43 ------------ .../impl/NetworkCmProxyDataServiceImplSpec.groovy | 41 +++++------ .../impl/operations/DmiDataOperationsSpec.groovy | 16 ++--- .../utils/DataOperationRequestUtilsSpec.groovy | 80 ++++++++++++++++++++++ .../utils/ResourceDataBatchRequestUtilsSpec.groovy | 80 ---------------------- .../src/test/resources/dataOperationRequest.json | 36 ++++++++++ .../test/resources/resourceDataBatchRequest.json | 36 ---------- 27 files changed, 417 insertions(+), 415 deletions(-) create mode 100644 cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/mapper/DataOperationRequestMapper.java delete mode 100644 cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/mapper/ResourceDataBatchRequestMapper.java delete mode 100644 cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/BatchOperationDefinition.java create mode 100644 cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/DataOperationDefinition.java create mode 100644 cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/DataOperationRequest.java delete mode 100644 cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/ResourceDataBatchRequest.java create mode 100644 cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/utils/DataOperationRequestUtilsSpec.groovy delete mode 100644 cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/utils/ResourceDataBatchRequestUtilsSpec.groovy create mode 100644 cps-ncmp-service/src/test/resources/dataOperationRequest.json delete mode 100644 cps-ncmp-service/src/test/resources/resourceDataBatchRequest.json diff --git a/cps-ncmp-rest-stub/cps-ncmp-rest-stub-service/src/main/java/org/onap/cps/ncmp/rest/stub/controller/NetworkCmProxyStubController.java b/cps-ncmp-rest-stub/cps-ncmp-rest-stub-service/src/main/java/org/onap/cps/ncmp/rest/stub/controller/NetworkCmProxyStubController.java index 37980ed8d1..ee035bf579 100644 --- a/cps-ncmp-rest-stub/cps-ncmp-rest-stub-service/src/main/java/org/onap/cps/ncmp/rest/stub/controller/NetworkCmProxyStubController.java +++ b/cps-ncmp-rest-stub/cps-ncmp-rest-stub-service/src/main/java/org/onap/cps/ncmp/rest/stub/controller/NetworkCmProxyStubController.java @@ -36,7 +36,7 @@ import lombok.extern.slf4j.Slf4j; import org.onap.cps.ncmp.api.impl.operations.DatastoreType; import org.onap.cps.ncmp.rest.api.NetworkCmProxyApi; import org.onap.cps.ncmp.rest.model.CmHandleQueryParameters; -import org.onap.cps.ncmp.rest.model.ResourceDataBatchRequest; +import org.onap.cps.ncmp.rest.model.DataOperationRequest; import org.onap.cps.ncmp.rest.model.RestModuleDefinition; import org.onap.cps.ncmp.rest.model.RestModuleReference; import org.onap.cps.ncmp.rest.model.RestOutputCmHandle; @@ -159,8 +159,8 @@ public class NetworkCmProxyStubController implements NetworkCmProxyApi { } @Override - public ResponseEntity getResourceDataForCmHandleBatch(@NotNull @Valid final String topic, - @Valid final ResourceDataBatchRequest body) { + public ResponseEntity executeDataOperationForCmHandles(final String topicParamInQuery, + final DataOperationRequest dataOperationRequest) { return new ResponseEntity<>(HttpStatus.NOT_IMPLEMENTED); } diff --git a/cps-ncmp-rest/docs/openapi/components.yaml b/cps-ncmp-rest/docs/openapi/components.yaml index 2781f572f2..d45b8da288 100644 --- a/cps-ncmp-rest/docs/openapi/components.yaml +++ b/cps-ncmp-rest/docs/openapi/components.yaml @@ -285,18 +285,18 @@ components: properties: state: $ref: '#/components/schemas/CmHandleCompositeState' - # Batch Request Schemas - ResourceDataBatchRequest: + # Data Operation Request Schemas + DataOperationRequest: type: object - title: get resource data for given array of operations + title: execute data operation for given array of operations properties: operations: type: array items: type: object - $ref: '#/components/schemas/BatchOperationDefinition' - description: contains batch request details - BatchOperationDefinition: + $ref: '#/components/schemas/DataOperationDefinition' + description: contains group of data operation requests + DataOperationDefinition: required: - operation - datastore diff --git a/cps-ncmp-rest/docs/openapi/ncmp.yml b/cps-ncmp-rest/docs/openapi/ncmp.yml index 957a3b8735..95ca6ccdc7 100755 --- a/cps-ncmp-rest/docs/openapi/ncmp.yml +++ b/cps-ncmp-rest/docs/openapi/ncmp.yml @@ -194,13 +194,13 @@ resourceDataForCmHandle: 502: $ref: 'components.yaml#/components/responses/BadGateway' -getResourceDataForCmHandleBatch: +dataOperationForCmHandle: post: tags: - network-cm-proxy - summary: Get resource data for batch of cm handle ids + summary: Execute a data operation for group of cm handle ids description: This request will be handled asynchronously using messaging to the supplied topic. The rest response will be an acknowledge with a requestId to identify the relevant messages. - operationId: getResourceDataForCmHandleBatch + operationId: executeDataOperationForCmHandles parameters: - $ref: 'components.yaml#/components/parameters/requiredTopicParamInQuery' requestBody: @@ -208,7 +208,7 @@ getResourceDataForCmHandleBatch: content: application/json: schema: - $ref: 'components.yaml#/components/schemas/ResourceDataBatchRequest' + $ref: 'components.yaml#/components/schemas/DataOperationRequest' responses: 200: description: OK diff --git a/cps-ncmp-rest/docs/openapi/openapi.yml b/cps-ncmp-rest/docs/openapi/openapi.yml index b63b568234..84d86fffbb 100755 --- a/cps-ncmp-rest/docs/openapi/openapi.yml +++ b/cps-ncmp-rest/docs/openapi/openapi.yml @@ -35,7 +35,7 @@ paths: $ref: 'ncmp.yml#/resourceDataForCmHandle' /v1/data: - $ref: 'ncmp.yml#/getResourceDataForCmHandleBatch' + $ref: 'ncmp.yml#/dataOperationForCmHandle' /v1/ch/{cm-handle}/data/ds/{datastore-name}/query: $ref: 'ncmp.yml#/queryResourceDataForCmHandle' 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 1b78fa0343..3c22b81ef7 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 @@ -46,10 +46,10 @@ import org.onap.cps.ncmp.rest.controller.handlers.NcmpCachedResourceRequestHandl import org.onap.cps.ncmp.rest.controller.handlers.NcmpDatastoreRequestHandler; import org.onap.cps.ncmp.rest.controller.handlers.NcmpPassthroughResourceRequestHandler; import org.onap.cps.ncmp.rest.mapper.CmHandleStateMapper; -import org.onap.cps.ncmp.rest.mapper.ResourceDataBatchRequestMapper; +import org.onap.cps.ncmp.rest.mapper.DataOperationRequestMapper; import org.onap.cps.ncmp.rest.model.CmHandlePublicProperties; import org.onap.cps.ncmp.rest.model.CmHandleQueryParameters; -import org.onap.cps.ncmp.rest.model.ResourceDataBatchRequest; +import org.onap.cps.ncmp.rest.model.DataOperationRequest; import org.onap.cps.ncmp.rest.model.RestModuleDefinition; import org.onap.cps.ncmp.rest.model.RestModuleReference; import org.onap.cps.ncmp.rest.model.RestOutputCmHandle; @@ -76,7 +76,7 @@ public class NetworkCmProxyController implements NetworkCmProxyApi { private final CmHandleStateMapper cmHandleStateMapper; private final NcmpCachedResourceRequestHandler ncmpCachedResourceRequestHandler; private final NcmpPassthroughResourceRequestHandler ncmpPassthroughResourceRequestHandler; - private final ResourceDataBatchRequestMapper resourceDataBatchRequestMapper; + private final DataOperationRequestMapper dataOperationRequestMapper; /** * Get resource data from datastore. @@ -105,11 +105,11 @@ public class NetworkCmProxyController implements NetworkCmProxyApi { } @Override - public ResponseEntity getResourceDataForCmHandleBatch(final String topicParamInQuery, - final ResourceDataBatchRequest - resourceDataBatchRequest) { + public ResponseEntity executeDataOperationForCmHandles(final String topicParamInQuery, + final DataOperationRequest + dataOperationRequest) { return ncmpPassthroughResourceRequestHandler.executeRequest(topicParamInQuery, - resourceDataBatchRequestMapper.toResourceDataBatchRequest(resourceDataBatchRequest)); + dataOperationRequestMapper.toDataOperationRequest(dataOperationRequest)); } /** diff --git a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/NcmpDatastoreRequestHandler.java b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/NcmpDatastoreRequestHandler.java index a8ca13a752..101be45d37 100644 --- a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/NcmpDatastoreRequestHandler.java +++ b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/NcmpDatastoreRequestHandler.java @@ -31,7 +31,7 @@ import lombok.extern.slf4j.Slf4j; import org.onap.cps.ncmp.api.impl.exception.InvalidDatastoreException; import org.onap.cps.ncmp.api.impl.operations.DatastoreType; import org.onap.cps.ncmp.api.impl.operations.OperationType; -import org.onap.cps.ncmp.api.models.ResourceDataBatchRequest; +import org.onap.cps.ncmp.api.models.DataOperationRequest; import org.onap.cps.ncmp.rest.exceptions.OperationNotSupportedException; import org.onap.cps.ncmp.rest.executor.CpsNcmpTaskExecutor; import org.onap.cps.ncmp.rest.util.TopicValidator; @@ -105,21 +105,21 @@ public class NcmpDatastoreRequestHandler implements TaskManagementDefaultHandler } /** - * Executes asynchronous request for batch of cm handles to resource data. + * Executes asynchronous request for group of cm handles to resource data. * * @param topicParamInQuery the topic param in query - * @param resourceDataBatchRequest batch request details for resource data + * @param dataOperationRequest data operation request details for resource data * @return the response entity */ public ResponseEntity executeRequest(final String topicParamInQuery, - final ResourceDataBatchRequest - resourceDataBatchRequest) { - validateBatchRequest(topicParamInQuery, resourceDataBatchRequest); + final DataOperationRequest + dataOperationRequest) { + validateDataOperationRequest(topicParamInQuery, dataOperationRequest); if (!notificationFeatureEnabled) { return ResponseEntity.ok(Map.of("status", "Asynchronous request is unavailable as notification feature is currently disabled.")); } - return getRequestIdAndSendBatchRequestToDmiService(topicParamInQuery, resourceDataBatchRequest); + return getRequestIdAndSendDataOperationRequestToDmiService(topicParamInQuery, dataOperationRequest); } protected ResponseEntity executeTaskAsync(final String topicParamInQuery, @@ -152,27 +152,27 @@ public class NcmpDatastoreRequestHandler implements TaskManagementDefaultHandler return executeTaskAsync(topicParamInQuery, requestId, taskSupplier); } - private ResponseEntity getRequestIdAndSendBatchRequestToDmiService(final String topicParamInQuery, - final ResourceDataBatchRequest - resourceDataBatchRequest) { + private ResponseEntity getRequestIdAndSendDataOperationRequestToDmiService(final String topicParamInQuery, + final DataOperationRequest + dataOperationRequest) { final String requestId = UUID.randomUUID().toString(); - sendResourceDataBatchRequestAsynchronously(topicParamInQuery, resourceDataBatchRequest, requestId); + sendDataOperationRequestAsynchronously(topicParamInQuery, dataOperationRequest, requestId); return ResponseEntity.ok(Map.of("requestId", requestId)); } - private void validateBatchRequest(final String topicParamInQuery, - final ResourceDataBatchRequest - resourceDataBatchRequest) { + private void validateDataOperationRequest(final String topicParamInQuery, + final DataOperationRequest + dataOperationRequest) { TopicValidator.validateTopicName(topicParamInQuery); - resourceDataBatchRequest.getBatchOperationDefinitions().forEach(batchOperationDetail -> { - if (OperationType.fromOperationName(batchOperationDetail.getOperation()) != READ) { + dataOperationRequest.getDataOperationDefinitions().forEach(dataOperationDetail -> { + if (OperationType.fromOperationName(dataOperationDetail.getOperation()) != READ) { throw new OperationNotSupportedException( - batchOperationDetail.getOperation() + " operation not yet supported for target ids :" - + batchOperationDetail.getCmHandleIds()); - } else if (DatastoreType.fromDatastoreName(batchOperationDetail.getDatastore()) == OPERATIONAL) { - throw new InvalidDatastoreException(batchOperationDetail.getDatastore() + dataOperationDetail.getOperation() + " operation not yet supported for target ids :" + + dataOperationDetail.getCmHandleIds()); + } else if (DatastoreType.fromDatastoreName(dataOperationDetail.getDatastore()) == OPERATIONAL) { + throw new InvalidDatastoreException(dataOperationDetail.getDatastore() + " datastore is not supported for target ids : " - + batchOperationDetail.getCmHandleIds()); + + dataOperationDetail.getCmHandleIds()); } }); } diff --git a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/NcmpPassthroughResourceRequestHandler.java b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/NcmpPassthroughResourceRequestHandler.java index 5c35818a3a..0e49c6df13 100644 --- a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/NcmpPassthroughResourceRequestHandler.java +++ b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/NcmpPassthroughResourceRequestHandler.java @@ -22,7 +22,7 @@ package org.onap.cps.ncmp.rest.controller.handlers; import java.util.function.Supplier; import org.onap.cps.ncmp.api.NetworkCmProxyDataService; -import org.onap.cps.ncmp.api.models.ResourceDataBatchRequest; +import org.onap.cps.ncmp.api.models.DataOperationRequest; import org.onap.cps.ncmp.rest.executor.CpsNcmpTaskExecutor; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; @@ -59,11 +59,11 @@ public class NcmpPassthroughResourceRequestHandler extends NcmpDatastoreRequestH @Async @Override - public void sendResourceDataBatchRequestAsynchronously(final String topicParamInQuery, - final ResourceDataBatchRequest - resourceDataBatchRequest, - final String requestId) { - networkCmProxyDataService.requestResourceDataForCmHandleBatch(topicParamInQuery, resourceDataBatchRequest, + public void sendDataOperationRequestAsynchronously(final String topicParamInQuery, + final DataOperationRequest + dataOperationRequest, + final String requestId) { + networkCmProxyDataService.executeDataOperationForCmHandles(topicParamInQuery, dataOperationRequest, requestId); } diff --git a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/TaskManagementDefaultHandler.java b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/TaskManagementDefaultHandler.java index 937935bec4..b2520b1609 100644 --- a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/TaskManagementDefaultHandler.java +++ b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/controller/handlers/TaskManagementDefaultHandler.java @@ -21,7 +21,7 @@ package org.onap.cps.ncmp.rest.controller.handlers; import java.util.function.Supplier; -import org.onap.cps.ncmp.api.models.ResourceDataBatchRequest; +import org.onap.cps.ncmp.api.models.DataOperationRequest; import org.onap.cps.spi.FetchDescendantsOption; public interface TaskManagementDefaultHandler { @@ -46,10 +46,10 @@ public interface TaskManagementDefaultHandler { return NO_OBJECT_SUPPLIER; } - default void sendResourceDataBatchRequestAsynchronously(final String topicParamInQuery, - final ResourceDataBatchRequest - resourceDataBatchRequest, - final String requestId) { + default void sendDataOperationRequestAsynchronously(final String topicParamInQuery, + final DataOperationRequest + dataOperationRequest, + final String requestId) { } static FetchDescendantsOption getFetchDescendantsOption(final boolean includeDescendants) { diff --git a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/mapper/DataOperationRequestMapper.java b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/mapper/DataOperationRequestMapper.java new file mode 100644 index 0000000000..51ee8ca174 --- /dev/null +++ b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/mapper/DataOperationRequestMapper.java @@ -0,0 +1,41 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.cps.ncmp.rest.mapper; + +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.NullValueCheckStrategy; +import org.mapstruct.NullValuePropertyMappingStrategy; +import org.onap.cps.ncmp.api.models.DataOperationDefinition; +import org.onap.cps.ncmp.api.models.DataOperationRequest; + +@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, + nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.SET_TO_DEFAULT) +public interface DataOperationRequestMapper { + + @Mapping(source = "operations", target = "dataOperationDefinitions") + DataOperationRequest toDataOperationRequest( + org.onap.cps.ncmp.rest.model.DataOperationRequest dataOperationRequest); + + @Mapping(source = "targetIds", target = "cmHandleIds") + DataOperationDefinition toDataOperationDefinition( + org.onap.cps.ncmp.rest.model.DataOperationDefinition dataOperationDefinition); +} diff --git a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/mapper/ResourceDataBatchRequestMapper.java b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/mapper/ResourceDataBatchRequestMapper.java deleted file mode 100644 index d045e31610..0000000000 --- a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/mapper/ResourceDataBatchRequestMapper.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * Copyright (C) 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. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ - -package org.onap.cps.ncmp.rest.mapper; - -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.NullValueCheckStrategy; -import org.mapstruct.NullValuePropertyMappingStrategy; -import org.onap.cps.ncmp.api.models.BatchOperationDefinition; -import org.onap.cps.ncmp.api.models.ResourceDataBatchRequest; - -@Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, - nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.SET_TO_DEFAULT) -public interface ResourceDataBatchRequestMapper { - - @Mapping(source = "operations", target = "batchOperationDefinitions") - ResourceDataBatchRequest toResourceDataBatchRequest( - org.onap.cps.ncmp.rest.model.ResourceDataBatchRequest resourceDataBatchRequest); - - @Mapping(source = "targetIds", target = "cmHandleIds") - BatchOperationDefinition toBatchOperationDefinition( - org.onap.cps.ncmp.rest.model.BatchOperationDefinition batchOperationDefinition); -} 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 31e83aa7a1..4ee31e1ec5 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 @@ -32,14 +32,14 @@ import org.onap.cps.ncmp.api.inventory.CmHandleState import org.onap.cps.ncmp.api.inventory.CompositeState import org.onap.cps.ncmp.api.inventory.DataStoreSyncState import org.onap.cps.ncmp.api.inventory.LockReasonCategory -import org.onap.cps.ncmp.rest.model.BatchOperationDefinition +import org.onap.cps.ncmp.rest.model.DataOperationRequest +import org.onap.cps.ncmp.rest.model.DataOperationDefinition import org.onap.cps.ncmp.api.models.NcmpServiceCmHandle import org.onap.cps.ncmp.rest.controller.handlers.NcmpCachedResourceRequestHandler import org.onap.cps.ncmp.rest.controller.handlers.NcmpPassthroughResourceRequestHandler import org.onap.cps.ncmp.rest.executor.CpsNcmpTaskExecutor import org.onap.cps.ncmp.rest.mapper.CmHandleStateMapper -import org.onap.cps.ncmp.rest.mapper.ResourceDataBatchRequestMapper -import org.onap.cps.ncmp.rest.model.ResourceDataBatchRequest +import org.onap.cps.ncmp.rest.mapper.DataOperationRequestMapper import org.onap.cps.ncmp.rest.util.DeprecationHelper import org.onap.cps.spi.FetchDescendantsOption import org.onap.cps.spi.model.ModuleDefinition @@ -101,7 +101,7 @@ class NetworkCmProxyControllerSpec extends Specification { CmHandleStateMapper cmHandleStateMapper = Mappers.getMapper(CmHandleStateMapper) @SpringBean - ResourceDataBatchRequestMapper resourceDataBatchRequestMapper = Mappers.getMapper(ResourceDataBatchRequestMapper) + DataOperationRequestMapper dataOperationRequestMapper = Mappers.getMapper(DataOperationRequestMapper) @SpringBean CpsNcmpTaskExecutor spiedCpsTaskExecutor = Spy() @@ -205,18 +205,18 @@ class NetworkCmProxyControllerSpec extends Specification { 'invalid non-empty topic value in url' | 'passthrough-operational' | '&topic=1_5_*_#' } - def 'Get (async) batch resource data from dmi service.'() { - given: 'batch resource data url' + def 'Execute (async) data operation to read data from dmi service.'() { + given: 'data operation url' def getUrl = "$ncmpBasePathV1/data?topic=my-topic-name" - def resourceDataBatchRequestJsonData = jsonObjectMapper.asJsonString( - getResourceDataBatchRequest("read", datastore.datastoreName)) - def expectedDmiResourceDataBatchRequest - = jsonObjectMapper.convertJsonString(resourceDataBatchRequestJsonData, org.onap.cps.ncmp.api.models.ResourceDataBatchRequest.class) - when: 'post data resource request is performed' + def dataOperationRequestJsonData = jsonObjectMapper.asJsonString( + getDataOperationRequest("read", datastore.datastoreName)) + def expectedDmiDataOperationRequest + = jsonObjectMapper.convertJsonString(dataOperationRequestJsonData, org.onap.cps.ncmp.api.models.DataOperationRequest.class) + when: 'post data operation request is performed' def response = mvc.perform( post(getUrl) .contentType(MediaType.APPLICATION_JSON) - .content(resourceDataBatchRequestJsonData) + .content(dataOperationRequestJsonData) ).andReturn().response then: 'response status is Ok' response.status == HttpStatus.OK.value() @@ -225,21 +225,21 @@ class NetworkCmProxyControllerSpec extends Specification { then: 'wait a little to allow execution of service method by task executor (on separate thread)' Thread.sleep(100) then: 'the service has been invoked with the correct parameters ' - 1 * mockNetworkCmProxyDataService.requestResourceDataForCmHandleBatch('my-topic-name', expectedDmiResourceDataBatchRequest, _) + 1 * mockNetworkCmProxyDataService.executeDataOperationForCmHandles('my-topic-name', expectedDmiDataOperationRequest, _) where: 'the following data stores are used' datastore << [PASSTHROUGH_RUNNING, PASSTHROUGH_OPERATIONAL] } - def 'Get batch resource data for #scenario from dmi service.'() { - given: 'batch resource data url' + def 'Execute (async) data operation for #scenario from dmi service.'() { + given: 'data operation url' def getUrl = "$ncmpBasePathV1/data?topic=my-topic-name" - def resourceDataBatchRequestJsonData = jsonObjectMapper.asJsonString( - getResourceDataBatchRequest(operation, datastore)) + def dataOperationRequestJsonData = jsonObjectMapper.asJsonString( + getDataOperationRequest(operation, datastore)) when: 'post data resource request is performed' def response = mvc.perform( post(getUrl) .contentType(MediaType.APPLICATION_JSON) - .content(resourceDataBatchRequestJsonData) + .content(dataOperationRequestJsonData) ).andReturn().response then: 'response status is BAD_REQUEST' response.status == HttpStatus.BAD_REQUEST.value() @@ -250,17 +250,17 @@ class NetworkCmProxyControllerSpec extends Specification { 'non-supported operation (passthrough-operational)' | PASSTHROUGH_OPERATIONAL.datastoreName | 'create' } - def 'Get batch resource data when notification feature is disabled for datastore: #datastore.'() { - given: 'batch resource data url' + def 'Get data operation resource data when notification feature is disabled for datastore: #datastore.'() { + given: 'data operation url' def getUrl = "$ncmpBasePathV1/data?topic=my-topic-name" - def resourceDataBatchRequestJsonData = jsonObjectMapper.asJsonString( - getResourceDataBatchRequest("read", datastore.datastoreName)) + def dataOperationRequestJsonData = jsonObjectMapper.asJsonString( + getDataOperationRequest("read", datastore.datastoreName)) ncmpPassthroughResourceRequestHandler.notificationFeatureEnabled = false when: 'post data resource request is performed' def response = mvc.perform( post(getUrl) .contentType(MediaType.APPLICATION_JSON) - .content(resourceDataBatchRequestJsonData) + .content(dataOperationRequestJsonData) ).andReturn().response then: 'response status is Ok' response.status == HttpStatus.OK.value() @@ -686,22 +686,23 @@ class NetworkCmProxyControllerSpec extends Specification { return assertContainsAll(response, expectedContent) } - def getResourceDataBatchRequest(operation, datastore) { - def resourceDataBatchRequest = new ResourceDataBatchRequest() - def batchOperationDefinitions = new ArrayList() - batchOperationDefinitions.add(getBatchOperationDefinition(operation, datastore)) - resourceDataBatchRequest.addOperationsItem(batchOperationDefinitions) + def getDataOperationRequest(operation, datastore) { + def dataOperationRequest = new DataOperationRequest() + def dataOperationDefinitions = new ArrayList() + dataOperationDefinitions.add(getDataOperationDefinition(operation, datastore)) + dataOperationRequest.addOperationsItem(dataOperationDefinitions) + return dataOperationRequest } - def getBatchOperationDefinition(operation, datastore) { - def batchOperationDefinition = new BatchOperationDefinition() - batchOperationDefinition.setOperation(operation) - batchOperationDefinition.setOperationId("operational-12") - batchOperationDefinition.setDatastore(datastore) - batchOperationDefinition.setOptions("some option") - batchOperationDefinition.setResourceIdentifier("some resource identifier") - batchOperationDefinition.addTargetIdsItem("some-cm-handle") - return batchOperationDefinition + def getDataOperationDefinition(operation, datastore) { + def dataOperationDefinition = new DataOperationDefinition() + dataOperationDefinition.setOperation(operation) + dataOperationDefinition.setOperationId("operational-12") + dataOperationDefinition.setDatastore(datastore) + dataOperationDefinition.setOptions("some option") + dataOperationDefinition.setResourceIdentifier("some resource identifier") + dataOperationDefinition.addTargetIdsItem("some-cm-handle") + return dataOperationDefinition } } diff --git a/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/exceptions/NetworkCmProxyRestExceptionHandlerSpec.groovy b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/exceptions/NetworkCmProxyRestExceptionHandlerSpec.groovy index a3afc5546f..6dc537c8d2 100644 --- a/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/exceptions/NetworkCmProxyRestExceptionHandlerSpec.groovy +++ b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/exceptions/NetworkCmProxyRestExceptionHandlerSpec.groovy @@ -1,7 +1,7 @@ /* * ============LICENSE_START======================================================= * Copyright (C) 2021 highstreet technologies GmbH - * 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. @@ -33,7 +33,7 @@ import org.onap.cps.ncmp.rest.controller.handlers.NcmpCachedResourceRequestHandl import org.onap.cps.ncmp.rest.controller.handlers.NcmpPassthroughResourceRequestHandler import org.onap.cps.ncmp.rest.executor.CpsNcmpTaskExecutor import org.onap.cps.ncmp.rest.mapper.CmHandleStateMapper -import org.onap.cps.ncmp.rest.mapper.ResourceDataBatchRequestMapper +import org.onap.cps.ncmp.rest.mapper.DataOperationRequestMapper import org.onap.cps.ncmp.rest.util.DeprecationHelper import org.onap.cps.spi.exceptions.AlreadyDefinedException import org.onap.cps.spi.exceptions.AlreadyDefinedExceptionBatch @@ -76,7 +76,7 @@ class NetworkCmProxyRestExceptionHandlerSpec extends Specification { CmHandleStateMapper cmHandleStateMapper = Mappers.getMapper(CmHandleStateMapper) @SpringBean - ResourceDataBatchRequestMapper resourceDataBatchRequestMapper = Mappers.getMapper(ResourceDataBatchRequestMapper) + DataOperationRequestMapper dataOperationRequestMapper = Mappers.getMapper(DataOperationRequestMapper) @SpringBean CpsNcmpTaskExecutor stubbedCpsTaskExecutor = Stub() 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 046c78879b..e20780bf56 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 @@ -29,10 +29,10 @@ import org.onap.cps.ncmp.api.impl.operations.OperationType; import org.onap.cps.ncmp.api.inventory.CompositeState; import org.onap.cps.ncmp.api.models.CmHandleQueryApiParameters; import org.onap.cps.ncmp.api.models.CmHandleQueryServiceParameters; +import org.onap.cps.ncmp.api.models.DataOperationRequest; 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.api.models.ResourceDataBatchRequest; import org.onap.cps.spi.FetchDescendantsOption; import org.onap.cps.spi.model.ModuleDefinition; import org.onap.cps.spi.model.ModuleReference; @@ -83,15 +83,15 @@ public interface NetworkCmProxyDataService { FetchDescendantsOption fetchDescendantsOption); /** - * Get resource data for batch of cm handles using dmi. + * Execute (async) data operation for group of cm handles using dmi. * * @param topicParamInQuery topic name for (triggering) async responses - * @param resourceDataBatchRequest cm handle identifiers + * @param dataOperationRequest cm handle identifiers */ - void requestResourceDataForCmHandleBatch(String topicParamInQuery, - ResourceDataBatchRequest - resourceDataBatchRequest, - String requestId); + void executeDataOperationForCmHandles(String topicParamInQuery, + DataOperationRequest + dataOperationRequest, + String requestId); /** 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 536775ec5c..2e9d7c2021 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 @@ -60,10 +60,10 @@ import org.onap.cps.ncmp.api.models.CmHandleQueryApiParameters; import org.onap.cps.ncmp.api.models.CmHandleQueryServiceParameters; import org.onap.cps.ncmp.api.models.CmHandleRegistrationResponse; import org.onap.cps.ncmp.api.models.CmHandleRegistrationResponse.RegistrationError; +import org.onap.cps.ncmp.api.models.DataOperationRequest; 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.api.models.ResourceDataBatchRequest; import org.onap.cps.spi.FetchDescendantsOption; import org.onap.cps.spi.exceptions.AlreadyDefinedExceptionBatch; import org.onap.cps.spi.exceptions.CpsException; @@ -139,11 +139,11 @@ public class NetworkCmProxyDataServiceImpl implements NetworkCmProxyDataService } @Override - public void requestResourceDataForCmHandleBatch(final String topicParamInQuery, - final ResourceDataBatchRequest - resourceDataBatchRequest, - final String requestId) { - dmiDataOperations.requestResourceDataFromDmi(topicParamInQuery, resourceDataBatchRequest, requestId); + public void executeDataOperationForCmHandles(final String topicParamInQuery, + final DataOperationRequest + dataOperationRequest, + final String requestId) { + dmiDataOperations.requestResourceDataFromDmi(topicParamInQuery, dataOperationRequest, requestId); } @Override diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operations/DmiBatchOperation.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operations/DmiBatchOperation.java index 76ad0f7b2e..512c3bcda8 100644 --- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operations/DmiBatchOperation.java +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operations/DmiBatchOperation.java @@ -27,7 +27,7 @@ import java.util.ArrayList; import java.util.List; import lombok.Builder; import lombok.Getter; -import org.onap.cps.ncmp.api.models.BatchOperationDefinition; +import org.onap.cps.ncmp.api.models.DataOperationDefinition; @JsonInclude(JsonInclude.Include.NON_NULL) @Getter @@ -45,20 +45,20 @@ public class DmiBatchOperation { private final List cmHandles = new ArrayList<>(); /** - * Create and initialise a (outgoing) DMI batch operation. + * Create and initialise a (outgoing) DMI data operation. * - * @param batchOperationDefinition batchOperationDefinition definition of incoming of batch request + * @param dataOperationDefinition definition of incoming of dataOperation request * @return mapped dmi operation details */ public static DmiBatchOperation buildDmiBatchRequestBodyWithoutCmHandles( - final BatchOperationDefinition batchOperationDefinition) { + final DataOperationDefinition dataOperationDefinition) { return DmiBatchOperation.builder() - .operationType(OperationType.fromOperationName(batchOperationDefinition.getOperation())) - .operationId(batchOperationDefinition.getOperationId()) - .datastore(DatastoreType.fromDatastoreName(batchOperationDefinition.getDatastore()).getDatastoreName()) - .options(batchOperationDefinition.getOptions()) - .resourceIdentifier(batchOperationDefinition.getResourceIdentifier()) + .operationType(OperationType.fromOperationName(dataOperationDefinition.getOperation())) + .operationId(dataOperationDefinition.getOperationId()) + .datastore(DatastoreType.fromDatastoreName(dataOperationDefinition.getDatastore()).getDatastoreName()) + .options(dataOperationDefinition.getOptions()) + .resourceIdentifier(dataOperationDefinition.getResourceIdentifier()) .build(); } } diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operations/DmiDataOperations.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operations/DmiDataOperations.java index 3e8d40a83b..adf634da57 100644 --- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operations/DmiDataOperations.java +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/operations/DmiDataOperations.java @@ -38,7 +38,7 @@ import org.onap.cps.ncmp.api.impl.utils.ResourceDataBatchRequestUtils; import org.onap.cps.ncmp.api.impl.yangmodels.YangModelCmHandle; import org.onap.cps.ncmp.api.inventory.CmHandleState; import org.onap.cps.ncmp.api.inventory.InventoryPersistence; -import org.onap.cps.ncmp.api.models.ResourceDataBatchRequest; +import org.onap.cps.ncmp.api.models.DataOperationRequest; import org.onap.cps.spi.exceptions.CpsException; import org.onap.cps.utils.JsonObjectMapper; import org.springframework.http.ResponseEntity; @@ -118,21 +118,21 @@ public class DmiDataOperations extends DmiOperations { * The data wil be returned as message on the topic specified. * * @param topicParamInQuery topic name for (triggering) async responses - * @param resourceDataBatchRequest batch request for resource data + * @param dataOperationRequest data operation request to execute operations * @param requestId requestId for as a response */ public void requestResourceDataFromDmi(final String topicParamInQuery, - final ResourceDataBatchRequest resourceDataBatchRequest, + final DataOperationRequest dataOperationRequest, final String requestId) { final Set cmHandlesIds - = getDistinctCmHandleIdsFromBatchRequest(resourceDataBatchRequest); + = getDistinctCmHandleIdsFromDataOperationRequest(dataOperationRequest); final Collection yangModelCmHandles = getYangModelCmHandlesInReadyState(cmHandlesIds); final Map> operationsOutPerDmiServiceName - = ResourceDataBatchRequestUtils.processPerOperationInBatchRequest(resourceDataBatchRequest, + = ResourceDataBatchRequestUtils.processPerOperationInBatchRequest(dataOperationRequest, yangModelCmHandles); buildBatchRequestUrlAndSendToDmiService(topicParamInQuery, requestId, operationsOutPerDmiServiceName); @@ -214,11 +214,11 @@ public class DmiDataOperations extends DmiOperations { } } - private static Set getDistinctCmHandleIdsFromBatchRequest(final ResourceDataBatchRequest - resourceDataBatchRequest) { - return resourceDataBatchRequest.getBatchOperationDefinitions().stream() - .flatMap(batchOperationDefinition -> - batchOperationDefinition.getCmHandleIds().stream()).collect(Collectors.toSet()); + private static Set getDistinctCmHandleIdsFromDataOperationRequest(final DataOperationRequest + dataOperationRequest) { + return dataOperationRequest.getDataOperationDefinitions().stream() + .flatMap(dataOperationDefinition -> + dataOperationDefinition.getCmHandleIds().stream()).collect(Collectors.toSet()); } private Collection getYangModelCmHandlesInReadyState(final Set requestedCmHandleIds) { diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/utils/ResourceDataBatchRequestUtils.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/utils/ResourceDataBatchRequestUtils.java index e4c9bfb39b..f0d02552f6 100644 --- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/utils/ResourceDataBatchRequestUtils.java +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/utils/ResourceDataBatchRequestUtils.java @@ -33,8 +33,8 @@ import lombok.extern.slf4j.Slf4j; import org.onap.cps.ncmp.api.impl.operations.CmHandle; import org.onap.cps.ncmp.api.impl.operations.DmiBatchOperation; import org.onap.cps.ncmp.api.impl.yangmodels.YangModelCmHandle; -import org.onap.cps.ncmp.api.models.BatchOperationDefinition; -import org.onap.cps.ncmp.api.models.ResourceDataBatchRequest; +import org.onap.cps.ncmp.api.models.DataOperationDefinition; +import org.onap.cps.ncmp.api.models.DataOperationRequest; @Slf4j @NoArgsConstructor(access = AccessLevel.PRIVATE) @@ -45,13 +45,13 @@ public class ResourceDataBatchRequestUtils { /** * Create a list of DMI batch operation per DMI service (name). * - * @param resourceDataBatchRequestIn incoming batch request details for resource data - * @param yangModelCmHandles involved cm handles represented as YangModelCmHandle (incl. metadata) + * @param dataOperationRequestIn incoming data operation request details + * @param yangModelCmHandles involved cm handles represented as YangModelCmHandle (incl. metadata) * * @return {@code Map>} Create a list of DMI batch operation per DMI service (name). */ public static Map> processPerOperationInBatchRequest( - final ResourceDataBatchRequest resourceDataBatchRequestIn, + final DataOperationRequest dataOperationRequestIn, final Collection yangModelCmHandles) { final Map>> dmiPropertiesPerCmHandleIdPerServiceName = @@ -62,9 +62,9 @@ public class ResourceDataBatchRequestUtils { final Map> dmiBatchOperationsOutPerDmiServiceName = new HashMap<>(); - for (final BatchOperationDefinition batchOperationDefinitionIn : - resourceDataBatchRequestIn.getBatchOperationDefinitions()) { - for (final String cmHandleId : batchOperationDefinitionIn.getCmHandleIds()) { + for (final DataOperationDefinition dataOperationDefinitionIn : + dataOperationRequestIn.getDataOperationDefinitions()) { + for (final String cmHandleId : dataOperationDefinitionIn.getCmHandleIds()) { final String dmiServiceName = dmiServiceNamesPerCmHandleId.get(cmHandleId); final Map cmHandleIdProperties = dmiPropertiesPerCmHandleIdPerServiceName.get(dmiServiceName).get(cmHandleId); @@ -72,7 +72,7 @@ public class ResourceDataBatchRequestUtils { publishErrorMessageToClientTopic(cmHandleId); } else { final DmiBatchOperation dmiBatchOperationOut = getOrAddDmiBatchOperation(dmiServiceName, - batchOperationDefinitionIn, dmiBatchOperationsOutPerDmiServiceName); + dataOperationDefinitionIn, dmiBatchOperationsOutPerDmiServiceName); final CmHandle cmHandle = CmHandle.buildCmHandleWithProperties(cmHandleId, cmHandleIdProperties); dmiBatchOperationOut.getCmHandles().add(cmHandle); } @@ -104,8 +104,8 @@ public class ResourceDataBatchRequestUtils { } private static DmiBatchOperation getOrAddDmiBatchOperation(final String dmiServiceName, - final BatchOperationDefinition - batchOperationDefinitionIn, + final DataOperationDefinition + dataOperationDefinitionIn, final Map> dmiBatchOperationsOutPerDmiServiceName) { dmiBatchOperationsOutPerDmiServiceName @@ -114,10 +114,10 @@ public class ResourceDataBatchRequestUtils { = dmiBatchOperationsOutPerDmiServiceName.get(dmiServiceName); final boolean isNewOperation = dmiBatchOperationsOut.isEmpty() || !dmiBatchOperationsOut.get(dmiBatchOperationsOut.size() - 1).getOperationId() - .equals(batchOperationDefinitionIn.getOperationId()); + .equals(dataOperationDefinitionIn.getOperationId()); if (isNewOperation) { final DmiBatchOperation newDmiBatchOperationOut = - DmiBatchOperation.buildDmiBatchRequestBodyWithoutCmHandles(batchOperationDefinitionIn); + DmiBatchOperation.buildDmiBatchRequestBodyWithoutCmHandles(dataOperationDefinitionIn); dmiBatchOperationsOut.add(newDmiBatchOperationOut); return newDmiBatchOperationOut; } diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/BatchOperationDefinition.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/BatchOperationDefinition.java deleted file mode 100644 index 04075b3b7c..0000000000 --- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/BatchOperationDefinition.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * Copyright (C) 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. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ - -package org.onap.cps.ncmp.api.models; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import java.util.ArrayList; -import java.util.List; -import javax.validation.Valid; -import lombok.EqualsAndHashCode; -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@EqualsAndHashCode -@JsonInclude(JsonInclude.Include.NON_EMPTY) -@JsonIgnoreProperties(ignoreUnknown = true) -public class BatchOperationDefinition { - - private String operation; - private String operationId; - private String datastore; - private String options; - private String resourceIdentifier; - - @JsonProperty("targetIds") - @Valid - private List cmHandleIds = new ArrayList(); -} diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/DataOperationDefinition.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/DataOperationDefinition.java new file mode 100644 index 0000000000..8182fbfcc8 --- /dev/null +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/DataOperationDefinition.java @@ -0,0 +1,49 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.cps.ncmp.api.models; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.ArrayList; +import java.util.List; +import javax.validation.Valid; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@EqualsAndHashCode +@JsonInclude(JsonInclude.Include.NON_EMPTY) +@JsonIgnoreProperties(ignoreUnknown = true) +public class DataOperationDefinition { + + private String operation; + private String operationId; + private String datastore; + private String options; + private String resourceIdentifier; + + @JsonProperty("targetIds") + @Valid + private List cmHandleIds = new ArrayList<>(); +} diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/DataOperationRequest.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/DataOperationRequest.java new file mode 100644 index 0000000000..6fa7d5c755 --- /dev/null +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/DataOperationRequest.java @@ -0,0 +1,43 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.cps.ncmp.api.models; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.Collections; +import java.util.List; +import javax.validation.Valid; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@EqualsAndHashCode +@JsonInclude(JsonInclude.Include.NON_EMPTY) +@JsonIgnoreProperties(ignoreUnknown = true) +public class DataOperationRequest { + + @JsonProperty("operations") + @Valid + private List dataOperationDefinitions = Collections.emptyList(); +} diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/ResourceDataBatchRequest.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/ResourceDataBatchRequest.java deleted file mode 100644 index 7af107c37a..0000000000 --- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/ResourceDataBatchRequest.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * Copyright (C) 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. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ - -package org.onap.cps.ncmp.api.models; - -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.annotation.JsonProperty; -import java.util.Collections; -import java.util.List; -import javax.validation.Valid; -import lombok.EqualsAndHashCode; -import lombok.Getter; -import lombok.Setter; - -@Getter -@Setter -@EqualsAndHashCode -@JsonInclude(JsonInclude.Include.NON_EMPTY) -@JsonIgnoreProperties(ignoreUnknown = true) -public class ResourceDataBatchRequest { - - @JsonProperty("operations") - @Valid - private List batchOperationDefinitions = Collections.emptyList(); -} diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImplSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImplSpec.groovy index 79f7e50e76..af2b80f755 100644 --- a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImplSpec.groovy +++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImplSpec.groovy @@ -33,13 +33,13 @@ import org.onap.cps.ncmp.api.inventory.CompositeState import org.onap.cps.ncmp.api.inventory.InventoryPersistence import org.onap.cps.ncmp.api.inventory.LockReasonCategory import org.onap.cps.ncmp.api.inventory.DataStoreSyncState -import org.onap.cps.ncmp.api.models.BatchOperationDefinition +import org.onap.cps.ncmp.api.models.DataOperationDefinition import org.onap.cps.ncmp.api.models.CmHandleQueryApiParameters import org.onap.cps.ncmp.api.models.CmHandleQueryServiceParameters import org.onap.cps.ncmp.api.models.ConditionApiProperties import org.onap.cps.ncmp.api.models.DmiPluginRegistration import org.onap.cps.ncmp.api.models.NcmpServiceCmHandle -import org.onap.cps.ncmp.api.models.ResourceDataBatchRequest +import org.onap.cps.ncmp.api.models.DataOperationRequest import org.onap.cps.spi.exceptions.CpsException import org.onap.cps.spi.model.ConditionProperties import spock.lang.Shared @@ -135,13 +135,13 @@ class NetworkCmProxyDataServiceImplSpec extends Specification { response == '{dmi-response}' } - def 'Get batch resource data for #datastoreName from DMI.'() { + def 'Execute (async) data operation for #datastoreName from DMI.'() { given: 'cpsDataService returns valid data node' - def resourceDataBatchRequest = getResourceDataBatchRequest(datastoreName) - when: 'get batch resource data is called' - objectUnderTest.requestResourceDataForCmHandleBatch('some topic', resourceDataBatchRequest, 'requestId') - then: 'get batch resource data returns expected response' - 1 * mockDmiDataOperations.requestResourceDataFromDmi('some topic', resourceDataBatchRequest, 'requestId') + def dataOperationRequest = getDataOperationRequest(datastoreName) + when: 'request resource data for data operation is called' + objectUnderTest.executeDataOperationForCmHandles('some topic', dataOperationRequest, 'requestId') + then: 'request resource data for data operation returns expected response' + 1 * mockDmiDataOperations.requestResourceDataFromDmi('some topic', dataOperationRequest, 'requestId') where: 'the following data stores are used' datastoreName << [PASSTHROUGH_RUNNING.datastoreName, PASSTHROUGH_OPERATIONAL.datastoreName] } @@ -368,21 +368,22 @@ class NetworkCmProxyDataServiceImplSpec extends Specification { cmHandleXPath, FetchDescendantsOption.INCLUDE_ALL_DESCENDANTS) >> dataNode } - def getResourceDataBatchRequest(datastore) { - def resourceDataBatchRequest = new ResourceDataBatchRequest() - def batchOperationDefinitions = new ArrayList() - batchOperationDefinitions.add(getBatchOperationDefinition(datastore)) - resourceDataBatchRequest.setBatchOperationDefinitions(batchOperationDefinitions) + def getDataOperationRequest(datastore) { + def dataOperationRequest = new DataOperationRequest() + def dataOperationDefinitions = new ArrayList() + dataOperationDefinitions.add(getDataOperationDefinition(datastore)) + dataOperationRequest.setDataOperationDefinitions(dataOperationDefinitions) + return dataOperationRequest } - def getBatchOperationDefinition(datastore) { - def batchOperationDefinition = new BatchOperationDefinition() - batchOperationDefinition.setOperation("read") - batchOperationDefinition.setOperationId("operational-12") - batchOperationDefinition.setDatastore(datastore) + def getDataOperationDefinition(datastore) { + def dataOperationDefinition = new DataOperationDefinition() + dataOperationDefinition.setOperation("read") + dataOperationDefinition.setOperationId("operational-12") + dataOperationDefinition.setDatastore(datastore) def targetIds = new ArrayList() targetIds.add("some-cm-handle") - batchOperationDefinition.setCmHandleIds(targetIds) - return batchOperationDefinition + dataOperationDefinition.setCmHandleIds(targetIds) + return dataOperationDefinition } } diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/operations/DmiDataOperationsSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/operations/DmiDataOperationsSpec.groovy index 9343666260..be178e1276 100644 --- a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/operations/DmiDataOperationsSpec.groovy +++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/operations/DmiDataOperationsSpec.groovy @@ -24,7 +24,7 @@ package org.onap.cps.ncmp.api.impl.operations import com.fasterxml.jackson.databind.ObjectMapper import org.onap.cps.ncmp.api.impl.config.NcmpConfiguration import org.onap.cps.ncmp.api.impl.utils.DmiServiceUrlBuilder -import org.onap.cps.ncmp.api.models.ResourceDataBatchRequest +import org.onap.cps.ncmp.api.models.DataOperationRequest import org.onap.cps.ncmp.utils.TestUtils import org.onap.cps.utils.JsonObjectMapper import org.spockframework.spring.SpringBean @@ -82,12 +82,12 @@ class DmiDataOperationsSpec extends DmiOperationsBaseSpec { 'datastore running with properties' | [yangModelCmHandleProperty] | PASSTHROUGH_RUNNING | OPTIONS_PARAM || '{"operation":"read","cmHandleProperties":{"prop1":"val1"}}' | 'passthrough-running' | '&options=(a=1,b=2)' } - def 'call get batch resource data from DMI service #scenario.'() { - given: 'collection of yang model cm Handles and resource data batch request' + def 'Execute (async) data operation from DMI service.'() { + given: 'collection of yang model cm Handles and data operation request' mockYangModelCmHandleCollectionRetrieval([yangModelCmHandleProperty]) - def resourceDataBatchRequestJsonData = TestUtils.getResourceFileContent('resourceDataBatchRequest.json') - def resourceDataBatchRequest = spiedJsonObjectMapper.convertJsonString(resourceDataBatchRequestJsonData, ResourceDataBatchRequest.class) - resourceDataBatchRequest.batchOperationDefinitions[0].cmHandleIds = [cmHandleId] + def dataOperationBatchRequestJsonData = TestUtils.getResourceFileContent('dataOperationRequest.json') + def dataOperationRequest = spiedJsonObjectMapper.convertJsonString(dataOperationBatchRequestJsonData, DataOperationRequest.class) + dataOperationRequest.dataOperationDefinitions[0].cmHandleIds = [cmHandleId] def requestBodyAsJsonStringArg = null and: 'a positive response from DMI service when it is called with valid request parameters' def responseFromDmi = new ResponseEntity(HttpStatus.ACCEPTED) @@ -95,8 +95,8 @@ class DmiDataOperationsSpec extends DmiOperationsBaseSpec { def expectedBatchRequestAsJson = '[{"operation":"read","operationId":"operational-14","datastore":"ncmp-datastore:passthrough-operational","options":"some option","resourceIdentifier":"some resource identifier","cmHandles":[{"id":"some-cm-handle","cmHandleProperties":{"prop1":"val1"}}]}]' mockDmiRestClient.postOperationWithJsonData(expectedDmiBatchResourceDataUrl, _, READ.operationName) >> responseFromDmi dmiServiceUrlBuilder.getBatchRequestUrl(_, _) >> expectedDmiBatchResourceDataUrl - when: 'get resource data for batch of cm handles are invoked' - objectUnderTest.requestResourceDataFromDmi('my-topic-name', resourceDataBatchRequest, 'requestId') + when: 'get resource data for group of cm handles are invoked' + objectUnderTest.requestResourceDataFromDmi('my-topic-name', dataOperationRequest, 'requestId') then: 'wait a little to allow execution of service method by task executor (on separate thread)' Thread.sleep(100) then: 'validate ncmp generated dmi request body json args' diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/utils/DataOperationRequestUtilsSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/utils/DataOperationRequestUtilsSpec.groovy new file mode 100644 index 0000000000..af3841a40b --- /dev/null +++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/utils/DataOperationRequestUtilsSpec.groovy @@ -0,0 +1,80 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.cps.ncmp.api.impl.utils + +import com.fasterxml.jackson.databind.ObjectMapper +import org.onap.cps.ncmp.api.impl.yangmodels.YangModelCmHandle +import org.onap.cps.ncmp.api.inventory.CmHandleState +import org.onap.cps.ncmp.api.inventory.CompositeStateBuilder +import org.onap.cps.ncmp.api.models.DataOperationRequest +import org.onap.cps.ncmp.utils.TestUtils +import org.onap.cps.utils.JsonObjectMapper +import org.spockframework.spring.SpringBean +import spock.lang.Specification + +class DataOperationRequestUtilsSpec extends Specification { + + @SpringBean + JsonObjectMapper jsonObjectMapper = new JsonObjectMapper(new ObjectMapper()) + + def 'Process per data operation request with #serviceName.'() { + given: 'data operation request with 3 operations' + def dataOperationRequestJsonData = TestUtils.getResourceFileContent('dataOperationRequest.json') + def dataOperationRequest = jsonObjectMapper.convertJsonString(dataOperationRequestJsonData, DataOperationRequest.class) + and: '4 known cm handles: ch1-dmi1, ch2-dmi1, ch3-dmi2, ch4-dmi2' + def yangModelCmHandles = getYangModelCmHandles() + when: 'data operation request is processed' + def operationsOutPerDmiServiceName = ResourceDataBatchRequestUtils.processPerOperationInBatchRequest(dataOperationRequest, yangModelCmHandles) + and: 'converted to a json node' + def dmiDataOperationRequestBody = jsonObjectMapper.asJsonString(operationsOutPerDmiServiceName.get(serviceName)) + def dmiDataOperationRequestBodyAsJsonNode = jsonObjectMapper.convertToJsonNode(dmiDataOperationRequestBody).get(operationIndex) + then: 'it contains the correct operation details' + assert dmiDataOperationRequestBodyAsJsonNode.get('operation').asText() == 'read' + assert dmiDataOperationRequestBodyAsJsonNode.get('operationId').asText() == expectedOperationId + assert dmiDataOperationRequestBodyAsJsonNode.get('datastore').asText() == expectedDatastore + and: 'the correct cm handles (just for #serviceName)' + assert dmiDataOperationRequestBodyAsJsonNode.get('cmHandles').size() == expectedCmHandleIds.size() + expectedCmHandleIds.each { + dmiDataOperationRequestBodyAsJsonNode.get('cmHandles').toString().contains(it) + } + where: 'the following dmi service and operations are checked' + serviceName | operationIndex || expectedOperationId | expectedDatastore | expectedCmHandleIds + 'dmi1' | 0 || 'operational-14' | 'ncmp-datastore:passthrough-operational' | ['ch6-dmi1'] + 'dmi1' | 1 || 'running-12' | 'ncmp-datastore:passthrough-running' | ['ch1-dmi1', 'ch2-dmi1'] + 'dmi1' | 2 || 'operational-15' | 'ncmp-datastore:passthrough-operational' | ['ch6-dmi1'] + 'dmi2' | 0 || 'operational-14' | 'ncmp-datastore:passthrough-operational' | ['ch3-dmi2'] + 'dmi2' | 1 || 'running-12' | 'ncmp-datastore:passthrough-running' | ['ch7-dmi2'] + 'dmi2' | 2 || 'operational-15' | 'ncmp-datastore:passthrough-operational' | ['ch4-dmi2'] + } + + static def getYangModelCmHandles() { + def dmiProperties = [new YangModelCmHandle.Property('prop', 'some DMI property')] + def readyState = new CompositeStateBuilder().withCmHandleState(CmHandleState.READY).withLastUpdatedTimeNow().build() + return [new YangModelCmHandle(id: 'ch1-dmi1', dmiServiceName: 'dmi1', dmiProperties: dmiProperties, compositeState: readyState), + new YangModelCmHandle(id: 'ch2-dmi1', dmiServiceName: 'dmi1', dmiProperties: dmiProperties, compositeState: readyState), + new YangModelCmHandle(id: 'ch6-dmi1', dmiServiceName: 'dmi1', dmiProperties: dmiProperties, compositeState: readyState), + new YangModelCmHandle(id: 'ch8-dmi1', dmiServiceName: 'dmi1', dmiProperties: dmiProperties, compositeState: readyState), + new YangModelCmHandle(id: 'ch3-dmi2', dmiServiceName: 'dmi2', dmiProperties: dmiProperties, compositeState: readyState), + new YangModelCmHandle(id: 'ch4-dmi2', dmiServiceName: 'dmi2', dmiProperties: dmiProperties, compositeState: readyState), + new YangModelCmHandle(id: 'ch7-dmi2', dmiServiceName: 'dmi2', dmiProperties: dmiProperties, compositeState: readyState), + ] + } +} diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/utils/ResourceDataBatchRequestUtilsSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/utils/ResourceDataBatchRequestUtilsSpec.groovy deleted file mode 100644 index e65874930b..0000000000 --- a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/utils/ResourceDataBatchRequestUtilsSpec.groovy +++ /dev/null @@ -1,80 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * Copyright (C) 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. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - * SPDX-License-Identifier: Apache-2.0 - * ============LICENSE_END========================================================= - */ - -package org.onap.cps.ncmp.api.impl.utils - -import com.fasterxml.jackson.databind.ObjectMapper -import org.onap.cps.ncmp.api.impl.yangmodels.YangModelCmHandle -import org.onap.cps.ncmp.api.inventory.CmHandleState -import org.onap.cps.ncmp.api.inventory.CompositeStateBuilder -import org.onap.cps.ncmp.api.models.ResourceDataBatchRequest -import org.onap.cps.ncmp.utils.TestUtils -import org.onap.cps.utils.JsonObjectMapper -import org.spockframework.spring.SpringBean -import spock.lang.Specification - -class ResourceDataBatchRequestUtilsSpec extends Specification { - - @SpringBean - JsonObjectMapper jsonObjectMapper = new JsonObjectMapper(new ObjectMapper()) - - def 'Process per operation in batch request with #serviceName.'() { - given: 'batch request with 3 operations' - def resourceDataBatchRequestJsonData = TestUtils.getResourceFileContent('resourceDataBatchRequest.json') - def resourceDataBatchRequest = jsonObjectMapper.convertJsonString(resourceDataBatchRequestJsonData, ResourceDataBatchRequest.class) - and: '4 known cm handles: ch1-dmi1, ch2-dmi1, ch3-dmi2, ch4-dmi2' - def yangModelCmHandles = getYangModelCmHandles() - when: 'Operation in batch request is processed' - def operationsOutPerDmiServiceName = ResourceDataBatchRequestUtils.processPerOperationInBatchRequest(resourceDataBatchRequest, yangModelCmHandles) - and: 'converted to a json node' - def dmiBatchRequestBody = jsonObjectMapper.asJsonString(operationsOutPerDmiServiceName.get(serviceName)) - def dmiBatchRequestBodyAsJsonNode = jsonObjectMapper.convertToJsonNode(dmiBatchRequestBody).get(operationIndex) - then: 'it contains the correct operation details' - assert dmiBatchRequestBodyAsJsonNode.get('operation').asText() == 'read' - assert dmiBatchRequestBodyAsJsonNode.get('operationId').asText() == expectedOperationId - assert dmiBatchRequestBodyAsJsonNode.get('datastore').asText() == expectedDatastore - and: 'the correct cm handles (just for #serviceName)' - assert dmiBatchRequestBodyAsJsonNode.get('cmHandles').size() == expectedCmHandleIds.size() - expectedCmHandleIds.each { - dmiBatchRequestBodyAsJsonNode.get('cmHandles').toString().contains(it) - } - where: 'the following dmi service and operations are checked' - serviceName | operationIndex || expectedOperationId | expectedDatastore | expectedCmHandleIds - 'dmi1' | 0 || 'operational-14' | 'ncmp-datastore:passthrough-operational' | ['ch6-dmi1'] - 'dmi1' | 1 || 'running-12' | 'ncmp-datastore:passthrough-running' | ['ch1-dmi1', 'ch2-dmi1'] - 'dmi1' | 2 || 'operational-15' | 'ncmp-datastore:passthrough-operational' | ['ch6-dmi1'] - 'dmi2' | 0 || 'operational-14' | 'ncmp-datastore:passthrough-operational' | ['ch3-dmi2'] - 'dmi2' | 1 || 'running-12' | 'ncmp-datastore:passthrough-running' | ['ch7-dmi2'] - 'dmi2' | 2 || 'operational-15' | 'ncmp-datastore:passthrough-operational' | ['ch4-dmi2'] - } - - static def getYangModelCmHandles() { - def dmiProperties = [new YangModelCmHandle.Property('prop', 'some DMI property')] - def readyState = new CompositeStateBuilder().withCmHandleState(CmHandleState.READY).withLastUpdatedTimeNow().build() - return [new YangModelCmHandle(id: 'ch1-dmi1', dmiServiceName: 'dmi1', dmiProperties: dmiProperties, compositeState: readyState), - new YangModelCmHandle(id: 'ch2-dmi1', dmiServiceName: 'dmi1', dmiProperties: dmiProperties, compositeState: readyState), - new YangModelCmHandle(id: 'ch6-dmi1', dmiServiceName: 'dmi1', dmiProperties: dmiProperties, compositeState: readyState), - new YangModelCmHandle(id: 'ch8-dmi1', dmiServiceName: 'dmi1', dmiProperties: dmiProperties, compositeState: readyState), - new YangModelCmHandle(id: 'ch3-dmi2', dmiServiceName: 'dmi2', dmiProperties: dmiProperties, compositeState: readyState), - new YangModelCmHandle(id: 'ch4-dmi2', dmiServiceName: 'dmi2', dmiProperties: dmiProperties, compositeState: readyState), - new YangModelCmHandle(id: 'ch7-dmi2', dmiServiceName: 'dmi2', dmiProperties: dmiProperties, compositeState: readyState), - ] - } -} diff --git a/cps-ncmp-service/src/test/resources/dataOperationRequest.json b/cps-ncmp-service/src/test/resources/dataOperationRequest.json new file mode 100644 index 0000000000..98ed39b9ae --- /dev/null +++ b/cps-ncmp-service/src/test/resources/dataOperationRequest.json @@ -0,0 +1,36 @@ +{ + "operations": [ + { + "operation": "read", + "operationId": "operational-14", + "datastore": "ncmp-datastore:passthrough-operational", + "options": "some option", + "resourceIdentifier": "some resource identifier", + "targetIds": [ + "ch3-dmi2", + "unknown-cm-handle", + "ch6-dmi1" + ] + }, + { + "operation": "read", + "operationId": "running-12", + "datastore": "ncmp-datastore:passthrough-running", + "targetIds": [ + "ch1-dmi1", + "ch7-dmi2", + "ch2-dmi1" + ] + }, + { + "operation": "read", + "operationId": "operational-15", + "datastore": "ncmp-datastore:passthrough-operational", + "options": "some option", + "targetIds": [ + "ch4-dmi2", + "ch6-dmi1" + ] + } + ] +} diff --git a/cps-ncmp-service/src/test/resources/resourceDataBatchRequest.json b/cps-ncmp-service/src/test/resources/resourceDataBatchRequest.json deleted file mode 100644 index 98ed39b9ae..0000000000 --- a/cps-ncmp-service/src/test/resources/resourceDataBatchRequest.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "operations": [ - { - "operation": "read", - "operationId": "operational-14", - "datastore": "ncmp-datastore:passthrough-operational", - "options": "some option", - "resourceIdentifier": "some resource identifier", - "targetIds": [ - "ch3-dmi2", - "unknown-cm-handle", - "ch6-dmi1" - ] - }, - { - "operation": "read", - "operationId": "running-12", - "datastore": "ncmp-datastore:passthrough-running", - "targetIds": [ - "ch1-dmi1", - "ch7-dmi2", - "ch2-dmi1" - ] - }, - { - "operation": "read", - "operationId": "operational-15", - "datastore": "ncmp-datastore:passthrough-operational", - "options": "some option", - "targetIds": [ - "ch4-dmi2", - "ch6-dmi1" - ] - } - ] -} -- cgit 1.2.3-korg