Code Refactoring Ncmp* to Lcm* as per new scope 39/129839/3
authormpriyank <priyank.maheshwari@est.tech>
Mon, 11 Jul 2022 11:15:55 +0000 (12:15 +0100)
committermpriyank <priyank.maheshwari@est.tech>
Thu, 14 Jul 2022 08:05:31 +0000 (09:05 +0100)
- Refactored code to reflect the LcmEvents scope now.
- Test cases updated and dependencies reviewed.
- You can find few occurences of NcmpEvent for now but that will be
  cleaned up once we implement CPS-1104 which is for LcmEvent schema
- UPCOMING: LcmEvent schema and then the code to publish the events on
  cmHandleStates
- LATER : LcmEvents based on public properties update.

Issue-ID: CPS-1137
Change-Id: I9f395ed733b4028e706205894c36a38412e3452e
Signed-off-by: mpriyank <priyank.maheshwari@est.tech>
15 files changed:
cps-application/src/main/resources/application.yml
cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImpl.java
cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/event/lcm/LcmEventsCmHandleStateHandler.java [moved from cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/event/NcmpEventsCmHandleStateHandler.java with 92% similarity]
cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/event/lcm/LcmEventsCmHandleStateHandlerImpl.java [moved from cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/event/NcmpEventsCmHandleStateHandlerImpl.java with 81% similarity]
cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/event/lcm/LcmEventsCreator.java [moved from cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/event/NcmpEventsCreator.java with 77% similarity]
cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/event/lcm/LcmEventsPublisher.java [moved from cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/event/NcmpEventsPublisher.java with 81% similarity]
cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/event/lcm/LcmEventsService.java [moved from cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/event/NcmpEventsService.java with 82% similarity]
cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/inventory/InventoryPersistence.java
cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImplRegistrationSpec.groovy
cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImplSpec.groovy
cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/event/lcm/LcmEventsCmHandleStateHandlerImplSpec.groovy [moved from cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/event/NcmpEventsCmHandleStateHandlerImplSpec.groovy with 84% similarity]
cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/event/lcm/LcmEventsCreatorSpec.groovy [moved from cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/event/NcmpEventsCreatorSpec.groovy with 84% similarity]
cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/event/lcm/LcmEventsPublisherSpec.groovy [moved from cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/event/NcmpEventsPublisherSpec.groovy with 91% similarity]
cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/event/lcm/LcmEventsServiceSpec.groovy [moved from cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/event/NcmpEventsServiceSpec.groovy with 75% similarity]
cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/inventory/InventoryPersistenceSpec.groovy

index e0fb7ef..def006c 100644 (file)
@@ -88,8 +88,9 @@ app:
     ncmp:\r
         async-m2m:\r
             topic: ${NCMP_ASYNC_M2M_TOPIC:ncmp-async-m2m}\r
+    lcm:\r
         events:\r
-            topic: ${NCMP_EVENTS_TOPIC:ncmp-events}\r
+            topic: ${LCM_EVENTS_TOPIC:ncmp-events}\r
 \r
 notification:\r
     enabled: true\r
index d827d46..16b9a66 100755 (executable)
@@ -290,9 +290,7 @@ public class NetworkCmProxyDataServiceImpl implements NetworkCmProxyDataService
 
     private CmHandleRegistrationResponse registerNewCmHandle(final YangModelCmHandle yangModelCmHandle) {
         try {
-            final String cmHandleJsonData = String.format("{\"cm-handles\":[%s]}",
-                    jsonObjectMapper.asJsonString(yangModelCmHandle));
-            inventoryPersistence.saveListElements(cmHandleJsonData);
+            inventoryPersistence.saveCmHandle(yangModelCmHandle);
             return CmHandleRegistrationResponse.createSuccessResponse(yangModelCmHandle.getId());
         } catch (final AlreadyDefinedException alreadyDefinedException) {
             return CmHandleRegistrationResponse.createFailureResponse(
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.cps.ncmp.api.impl.event;
+package org.onap.cps.ncmp.api.impl.event.lcm;
 
 import org.onap.cps.ncmp.api.impl.yangmodels.YangModelCmHandle;
 import org.onap.cps.ncmp.api.inventory.CmHandleState;
 
 /**
  * The implementation of it should handle the persisting of composite state and delegate the request to publish the
- * corresponding ncmp event.
+ * corresponding lcm event.
  */
-public interface NcmpEventsCmHandleStateHandler {
+public interface LcmEventsCmHandleStateHandler {
 
     /**
      * Updates the composite state of cmHandle based on cmHandleState.
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.cps.ncmp.api.impl.event;
+package org.onap.cps.ncmp.api.impl.event.lcm;
 
 import static org.onap.cps.ncmp.api.inventory.CmHandleState.ADVISED;
 import static org.onap.cps.ncmp.api.inventory.CmHandleState.LOCKED;
@@ -32,7 +32,6 @@ import org.onap.cps.ncmp.api.inventory.CmHandleState;
 import org.onap.cps.ncmp.api.inventory.CompositeStateUtils;
 import org.onap.cps.ncmp.api.inventory.InventoryPersistence;
 import org.onap.cps.ncmp.api.models.NcmpServiceCmHandle;
-import org.onap.cps.utils.JsonObjectMapper;
 import org.onap.ncmp.cmhandle.lcm.event.NcmpEvent;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
@@ -40,12 +39,11 @@ import org.springframework.stereotype.Service;
 @Slf4j
 @Service
 @RequiredArgsConstructor
-public class NcmpEventsCmHandleStateHandlerImpl implements NcmpEventsCmHandleStateHandler {
+public class LcmEventsCmHandleStateHandlerImpl implements LcmEventsCmHandleStateHandler {
 
     private final InventoryPersistence inventoryPersistence;
-    private final NcmpEventsCreator ncmpEventsCreator;
-    private final JsonObjectMapper jsonObjectMapper;
-    private final NcmpEventsService ncmpEventsService;
+    private final LcmEventsCreator lcmEventsCreator;
+    private final LcmEventsService lcmEventsService;
 
     @Value("${data-sync.cache.enabled:false}")
     private boolean isGlobalDataSyncCacheEnabled;
@@ -59,7 +57,7 @@ public class NcmpEventsCmHandleStateHandlerImpl implements NcmpEventsCmHandleSta
             log.debug("CmHandle with id : {} already in state : {}", yangModelCmHandle.getId(), targetCmHandleState);
         } else {
             updateToSpecifiedCmHandleState(yangModelCmHandle, targetCmHandleState);
-            publishNcmpEvent(yangModelCmHandle);
+            publishLcmEvent(yangModelCmHandle);
         }
 
     }
@@ -85,22 +83,20 @@ public class NcmpEventsCmHandleStateHandlerImpl implements NcmpEventsCmHandleSta
     }
 
     private void retryCmHandle(final YangModelCmHandle yangModelCmHandle) {
-        CompositeStateUtils.setCompositeStateForRetry()
-                .accept(yangModelCmHandle.getCompositeState());
+        CompositeStateUtils.setCompositeStateForRetry().accept(yangModelCmHandle.getCompositeState());
         inventoryPersistence.saveCmHandleState(yangModelCmHandle.getId(), yangModelCmHandle.getCompositeState());
     }
 
     private void registerNewCmHandle(final YangModelCmHandle yangModelCmHandle) {
         CompositeStateUtils.setCompositeState(ADVISED).accept(yangModelCmHandle.getCompositeState());
-        inventoryPersistence.saveListElements(
-                String.format("{\"cm-handles\":[%s]}", jsonObjectMapper.asJsonString(yangModelCmHandle)));
+        inventoryPersistence.saveCmHandle(yangModelCmHandle);
     }
 
-    private void publishNcmpEvent(final YangModelCmHandle yangModelCmHandle) {
+    private void publishLcmEvent(final YangModelCmHandle yangModelCmHandle) {
         final NcmpServiceCmHandle ncmpServiceCmHandle =
                 YangDataConverter.convertYangModelCmHandleToNcmpServiceCmHandle(yangModelCmHandle);
         final String cmHandleId = ncmpServiceCmHandle.getCmHandleId();
-        final NcmpEvent ncmpEvent = ncmpEventsCreator.populateNcmpEvent(cmHandleId, ncmpServiceCmHandle);
-        ncmpEventsService.publishNcmpEvent(cmHandleId, ncmpEvent);
+        final NcmpEvent ncmpEvent = lcmEventsCreator.populateLcmEvent(cmHandleId, ncmpServiceCmHandle);
+        lcmEventsService.publishLcmEvent(cmHandleId, ncmpEvent);
     }
 }
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.cps.ncmp.api.impl.event;
+package org.onap.cps.ncmp.api.impl.event.lcm;
 
 import java.time.ZonedDateTime;
 import java.time.format.DateTimeFormatter;
@@ -32,11 +32,11 @@ import org.springframework.stereotype.Component;
 
 
 /**
- * NcmpEventsCreator to create NcmpEvent based on relevant operation.
+ * LcmEventsCreator to create LcmEvent based on relevant operation.
  */
 @Slf4j
 @Component
-public class NcmpEventsCreator {
+public class LcmEventsCreator {
 
 
     /**
@@ -46,17 +46,17 @@ public class NcmpEventsCreator {
      * @param ncmpServiceCmHandle Ncmp CmHandle Data
      * @return Populated NcmpEvent
      */
-    public NcmpEvent populateNcmpEvent(final String cmHandleId, final NcmpServiceCmHandle ncmpServiceCmHandle) {
-        return createNcmpEvent(cmHandleId, ncmpServiceCmHandle);
+    public NcmpEvent populateLcmEvent(final String cmHandleId, final NcmpServiceCmHandle ncmpServiceCmHandle) {
+        return createLcmEvent(cmHandleId, ncmpServiceCmHandle);
     }
 
-    private NcmpEvent createNcmpEvent(final String cmHandleId, final NcmpServiceCmHandle ncmpServiceCmHandle) {
-        final NcmpEvent ncmpEvent = ncmpEventHeader(cmHandleId);
-        ncmpEvent.setEvent(ncmpEventPayload(cmHandleId, ncmpServiceCmHandle));
+    private NcmpEvent createLcmEvent(final String cmHandleId, final NcmpServiceCmHandle ncmpServiceCmHandle) {
+        final NcmpEvent ncmpEvent = lcmEventHeader(cmHandleId);
+        ncmpEvent.setEvent(lcmEventPayload(cmHandleId, ncmpServiceCmHandle));
         return ncmpEvent;
     }
 
-    private Event ncmpEventPayload(final String eventCorrelationId, final NcmpServiceCmHandle ncmpServiceCmHandle) {
+    private Event lcmEventPayload(final String eventCorrelationId, final NcmpServiceCmHandle ncmpServiceCmHandle) {
         final Event event = new Event();
         event.setCmHandleId(eventCorrelationId);
         event.setCmhandleState(
@@ -65,7 +65,7 @@ public class NcmpEventsCreator {
         return event;
     }
 
-    private NcmpEvent ncmpEventHeader(final String eventCorrelationId) {
+    private NcmpEvent lcmEventHeader(final String eventCorrelationId) {
         final NcmpEvent ncmpEvent = new NcmpEvent();
         ncmpEvent.setEventId(UUID.randomUUID().toString());
         ncmpEvent.setEventCorrelationId(eventCorrelationId);
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.cps.ncmp.api.impl.event;
+package org.onap.cps.ncmp.api.impl.event.lcm;
 
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -30,28 +30,28 @@ import org.springframework.util.concurrent.ListenableFuture;
 import org.springframework.util.concurrent.ListenableFutureCallback;
 
 /**
- * NcmpEventsPublisher to publish the NcmpEvents on event of CREATE, UPDATE and DELETE.
+ * LcmEventsPublisher to publish the LcmEvents on event of CREATE, UPDATE and DELETE.
  */
 
 @Slf4j
 @Service
 @RequiredArgsConstructor
-public class NcmpEventsPublisher {
+public class LcmEventsPublisher {
 
-    private final KafkaTemplate<String, NcmpEvent> ncmpEventKafkaTemplate;
+    private final KafkaTemplate<String, NcmpEvent> lcmEventKafkaTemplate;
 
     /**
-     * NCMP Event publisher.
+     * LCM Event publisher.
      *
      * @param topicName valid topic name
      * @param eventKey  message key
      * @param ncmpEvent message payload
      */
     public void publishEvent(final String topicName, final String eventKey, final NcmpEvent ncmpEvent) {
-        final ListenableFuture<SendResult<String, NcmpEvent>> ncmpEventFuture =
-                ncmpEventKafkaTemplate.send(topicName, eventKey, ncmpEvent);
+        final ListenableFuture<SendResult<String, NcmpEvent>> lcmEventFuture =
+                lcmEventKafkaTemplate.send(topicName, eventKey, ncmpEvent);
 
-        ncmpEventFuture.addCallback(new ListenableFutureCallback<>() {
+        lcmEventFuture.addCallback(new ListenableFutureCallback<>() {
             @Override
             public void onFailure(final Throwable throwable) {
                 log.error("Unable to publish event to topic : {} due to {}", topicName, throwable.getMessage());
@@ -18,7 +18,7 @@
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.cps.ncmp.api.impl.event;
+package org.onap.cps.ncmp.api.impl.event.lcm;
 
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -33,11 +33,11 @@ import org.springframework.stereotype.Service;
 @Slf4j
 @Service
 @RequiredArgsConstructor
-public class NcmpEventsService {
+public class LcmEventsService {
 
-    private final NcmpEventsPublisher ncmpEventsPublisher;
+    private final LcmEventsPublisher lcmEventsPublisher;
 
-    @Value("${app.ncmp.events.topic:ncmp-events}")
+    @Value("${app.lcm.events.topic:ncmp-events}")
     private String topicName;
 
     @Value("${notification.enabled:true}")
@@ -49,9 +49,9 @@ public class NcmpEventsService {
      * @param cmHandleId Cm Handle Id
      * @param ncmpEvent  Ncmp Event
      */
-    public void publishNcmpEvent(final String cmHandleId, final NcmpEvent ncmpEvent) {
+    public void publishLcmEvent(final String cmHandleId, final NcmpEvent ncmpEvent) {
         if (notificationsEnabled) {
-            ncmpEventsPublisher.publishEvent(topicName, cmHandleId, ncmpEvent);
+            lcmEventsPublisher.publishEvent(topicName, cmHandleId, ncmpEvent);
         } else {
             log.debug("Notifications disabled.");
         }
index af01fb4..be26a58 100644 (file)
@@ -182,13 +182,15 @@ public class InventoryPersistence {
     }
 
     /**
-     * Method to save list elements.
+     * Method to save cmHandle.
      *
-     * @param cmHandleJsonData cmHandle JSON data
+     * @param yangModelCmHandle cmHandle represented as Yang Model
      */
-    public void saveListElements(final String cmHandleJsonData) {
+    public void saveCmHandle(final YangModelCmHandle yangModelCmHandle) {
+        final String cmHandleJsonData =
+                String.format("{\"cm-handles\":[%s]}", jsonObjectMapper.asJsonString(yangModelCmHandle));
         cpsDataService.saveListElements(NCMP_DATASPACE_NAME, NCMP_DMI_REGISTRY_ANCHOR, NCMP_DMI_REGISTRY_PARENT,
-                    cmHandleJsonData, NO_TIMESTAMP);
+                cmHandleJsonData, NO_TIMESTAMP);
     }
 
     /**
index 31cf31d..dccba0b 100644 (file)
@@ -26,6 +26,8 @@ import org.onap.cps.api.CpsModuleService
 import org.onap.cps.ncmp.api.NetworkCmProxyCmHandlerQueryService
 import org.onap.cps.ncmp.api.impl.exception.DmiRequestException
 import org.onap.cps.ncmp.api.impl.operations.DmiDataOperations
+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.CmHandleRegistrationResponse
 import org.onap.cps.ncmp.api.models.DmiPluginRegistration
@@ -150,10 +152,13 @@ class NetworkCmProxyDataServiceImplRegistrationSpec extends Specification {
                 assert it.status == Status.SUCCESS
                 assert it.cmHandle == 'cmhandle'
             }
-        and: 'save list elements is invoked once with the expected parameters'
-                1 * mockInventoryPersistence.saveListElements(_) >> {
+        and: 'save cmhandle is invoked once with the expected parameters'
+                1 * mockInventoryPersistence.saveCmHandle(_) >> {
                     args -> {
-                        assert args[0].startsWith('{"cm-handles":[{"id":"cmhandle","dmi-service-name":"my-server","state":{"cm-handle-state":"ADVISED","last-update-time":"20')
+                        def result = (args[0] as YangModelCmHandle)
+                        assert result.id == 'cmhandle'
+                        assert result.dmiServiceName == 'my-server'
+                        assert result.compositeState.cmHandleState == CmHandleState.ADVISED
                     }
                 }
         where:
@@ -172,7 +177,7 @@ class NetworkCmProxyDataServiceImplRegistrationSpec extends Specification {
                                    new NcmpServiceCmHandle(cmHandleId: 'cmhandle2'),
                                    new NcmpServiceCmHandle(cmHandleId: 'cmhandle3')])
         and: 'cm-handle creation is successful for 1st and 3rd; failed for 2nd'
-            mockInventoryPersistence.saveListElements(_) >> {} >> { throw new RuntimeException("Failed") } >> {}
+            mockInventoryPersistence.saveCmHandle(_) >> {} >> { throw new RuntimeException("Failed") } >> {}
         when: 'registration is updated to create cm-handles'
             def response = objectUnderTest.updateDmiRegistrationAndSyncModule(dmiPluginRegistration)
         then: 'a response is received for all cm-handles'
@@ -200,7 +205,7 @@ class NetworkCmProxyDataServiceImplRegistrationSpec extends Specification {
             def dmiPluginRegistration = new DmiPluginRegistration(dmiPlugin: 'my-server')
             dmiPluginRegistration.createdCmHandles = [new NcmpServiceCmHandle(cmHandleId: cmHandleId)]
         and: 'cm-handler registration fails: #scenario'
-            mockInventoryPersistence.saveListElements(_) >> { throw exception }
+            mockInventoryPersistence.saveCmHandle(_) >> { throw exception }
         when: 'registration is updated'
             def response = objectUnderTest.updateDmiRegistrationAndSyncModule(dmiPluginRegistration)
         then: 'a failure response is received'
index 1c8b561..3febaa5 100644 (file)
@@ -69,7 +69,7 @@ class NetworkCmProxyDataServiceImplSpec extends Specification {
     @Shared
     def OPTIONS_PARAM = '(a=1,b=2)'
     @Shared
-    def ncmpServiceCmHandle = new NcmpServiceCmHandle(cmHandleId: 'some-cm-handle-id')
+    def ncmpServiceCmHandle = new NcmpServiceCmHandle(cmHandleId: 'test-cm-handle-id')
 
     def objectUnderTest = new NetworkCmProxyDataServiceImpl(spiedJsonObjectMapper, mockDmiDataOperations,
         nullNetworkCmProxyDataServicePropertyHandler, mockInventoryPersistence, mockCpsCmHandlerQueryService)
@@ -270,10 +270,12 @@ class NetworkCmProxyDataServiceImplSpec extends Specification {
             mockDmiPluginRegistration.getCreatedCmHandles() >> [ncmpServiceCmHandle]
         when: 'parse and create cm handle in dmi registration then sync module'
             objectUnderTest.parseAndCreateCmHandlesInDmiRegistrationAndSyncModules(mockDmiPluginRegistration)
-        then: 'validate params for creating anchor and list elements'
-            1 * mockInventoryPersistence.saveListElements(_) >> {
+        then: 'system persists the cm handle state'
+            1 * mockInventoryPersistence.saveCmHandle(_) >> {
                 args -> {
-                    assert args[0].startsWith('{"cm-handles":[{"id":"some-cm-handle-id","state":{"cm-handle-state":"ADVISED","last-update-time":"20')
+                    def result = (args[0] as YangModelCmHandle)
+                    assert result.id == 'test-cm-handle-id'
+                    assert result.compositeState.cmHandleState == CmHandleState.ADVISED
                 }
             }
     }
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.cps.ncmp.api.impl.event
+package org.onap.cps.ncmp.api.impl.event.lcm
 
-import com.fasterxml.jackson.databind.ObjectMapper
 import org.onap.cps.ncmp.api.impl.yangmodels.YangModelCmHandle
 import org.onap.cps.ncmp.api.inventory.CompositeState
 import org.onap.cps.ncmp.api.inventory.DataStoreSyncState
 import org.onap.cps.ncmp.api.inventory.InventoryPersistence
-import org.onap.cps.utils.JsonObjectMapper
 import spock.lang.Specification
 
 import static org.onap.cps.ncmp.api.inventory.CmHandleState.ADVISED
@@ -33,14 +31,13 @@ import static org.onap.cps.ncmp.api.inventory.CmHandleState.LOCKED
 import static org.onap.cps.ncmp.api.inventory.CmHandleState.READY
 import static org.onap.cps.ncmp.api.inventory.LockReasonCategory.LOCKED_MODULE_SYNC_FAILED
 
-class NcmpEventsCmHandleStateHandlerImplSpec extends Specification {
+class LcmEventsCmHandleStateHandlerImplSpec extends Specification {
 
     def mockInventoryPersistence = Mock(InventoryPersistence)
-    def mockNcmpEventsCreator = Mock(NcmpEventsCreator)
-    def spiedJsonObjectMapper = Spy(new JsonObjectMapper(new ObjectMapper()))
-    def mockNcmpEventsService = Mock(NcmpEventsService)
+    def mockLcmEventsCreator = Mock(LcmEventsCreator)
+    def mockLcmEventsService = Mock(LcmEventsService)
 
-    def objectUnderTest = new NcmpEventsCmHandleStateHandlerImpl(mockInventoryPersistence, mockNcmpEventsCreator, spiedJsonObjectMapper, mockNcmpEventsService)
+    def objectUnderTest = new LcmEventsCmHandleStateHandlerImpl(mockInventoryPersistence, mockLcmEventsCreator, mockLcmEventsService)
 
     def 'Update and Publish Events on State Change #stateChange'() {
         given: 'Cm Handle represented as YangModelCmHandle'
@@ -52,7 +49,7 @@ class NcmpEventsCmHandleStateHandlerImplSpec extends Specification {
         then: 'state is saved using inventory persistence'
             expectedCallsToInventoryPersistence * mockInventoryPersistence.saveCmHandleState(cmHandleId, _)
         and: 'event service is called to publish event'
-            expectedCallsToEventService * mockNcmpEventsService.publishNcmpEvent(cmHandleId, _)
+            expectedCallsToEventService * mockLcmEventsService.publishLcmEvent(cmHandleId, _)
         where: 'state change parameters are provided'
             stateChange          | fromCmHandleState | toCmHandleState || expectedCallsToInventoryPersistence | expectedCallsToEventService
             'ADVISED to READY'   | ADVISED           | READY           || 1                                   | 1
@@ -71,9 +68,9 @@ class NcmpEventsCmHandleStateHandlerImplSpec extends Specification {
         when: 'update state is invoked'
             objectUnderTest.updateCmHandleState(yangModelCmHandle, ADVISED)
         then: 'state is saved using inventory persistence'
-            1 * mockInventoryPersistence.saveListElements(_)
+            1 * mockInventoryPersistence.saveCmHandle(yangModelCmHandle)
         and: 'event service is called to publish event'
-            1 * mockNcmpEventsService.publishNcmpEvent(cmHandleId, _)
+            1 * mockLcmEventsService.publishLcmEvent(cmHandleId, _)
     }
 
     def 'Update and Publish Events on State Change from LOCKED to ADVISED'() {
@@ -91,7 +88,7 @@ class NcmpEventsCmHandleStateHandlerImplSpec extends Specification {
                     }
             }
         and: 'event service is called to publish event'
-            1 * mockNcmpEventsService.publishNcmpEvent(cmHandleId, _)
+            1 * mockLcmEventsService.publishLcmEvent(cmHandleId, _)
     }
 
     def 'Update and Publish Events on State Change to READY with #scenario'() {
@@ -106,13 +103,14 @@ class NcmpEventsCmHandleStateHandlerImplSpec extends Specification {
         then: 'state is saved using inventory persistence with expected dataSyncState'
             1 * mockInventoryPersistence.saveCmHandleState(cmHandleId, _) >> {
                 args-> {
-                    assert (args[1] as CompositeState).dataSyncEnabled == dataSyncCacheEnabled
-                    assert (args[1] as CompositeState).dataStores.operationalDataStore.dataStoreSyncState == expectedDataStoreSyncState
+                    def result = (args[1] as CompositeState)
+                    assert result.dataSyncEnabled == dataSyncCacheEnabled
+                    assert result.dataStores.operationalDataStore.dataStoreSyncState == expectedDataStoreSyncState
 
                 }
             }
         and: 'event service is called to publish event'
-            1 * mockNcmpEventsService.publishNcmpEvent(cmHandleId, _)
+            1 * mockLcmEventsService.publishLcmEvent(cmHandleId, _)
         where:
             scenario                         | dataSyncCacheEnabled || expectedDataStoreSyncState
             'data sync cache enabled'        | true                 || DataStoreSyncState.UNSYNCHRONIZED
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.cps.ncmp.api.impl.event
+package org.onap.cps.ncmp.api.impl.event.lcm
 
+import org.onap.cps.ncmp.api.impl.event.lcm.LcmEventsCreator
 import org.onap.cps.ncmp.api.inventory.CmHandleState
 import org.onap.cps.ncmp.api.inventory.CompositeStateBuilder
 import org.onap.cps.ncmp.api.models.NcmpServiceCmHandle
 import spock.lang.Specification
 
-class NcmpEventsCreatorSpec extends Specification {
+class LcmEventsCreatorSpec extends Specification {
 
-    def objectUnderTest = new NcmpEventsCreator()
+    def objectUnderTest = new LcmEventsCreator()
     def cmHandleId = 'test-cm-handle'
 
-    def 'Map the NcmpEvent for operation #operation'() {
+    def 'Map the LcmEvent for operation #operation'() {
         given: 'NCMP cm handle details'
             def ncmpServiceCmHandle = new NcmpServiceCmHandle(cmHandleId: cmHandleId, compositeState: new CompositeStateBuilder().withCmHandleState(CmHandleState.READY).build(),
                 publicProperties: ['publicProperty1': 'value1', 'publicProperty2': 'value2'])
         when: 'the event is populated'
-            def result = objectUnderTest.populateNcmpEvent(cmHandleId, ncmpServiceCmHandle)
+            def result = objectUnderTest.populateLcmEvent(cmHandleId, ncmpServiceCmHandle)
         then: 'event header is mapped correctly'
             assert result.eventSource == 'org.onap.ncmp'
             assert result.eventCorrelationId == cmHandleId
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.cps.ncmp.api.impl.event
+package org.onap.cps.ncmp.api.impl.event.lcm
 
 import com.fasterxml.jackson.databind.ObjectMapper
 import org.apache.kafka.clients.consumer.KafkaConsumer
+import org.onap.cps.ncmp.api.impl.event.lcm.LcmEventsPublisher
 import org.onap.cps.ncmp.api.utils.MessagingSpec
 import org.onap.cps.ncmp.utils.TestUtils
 import org.onap.cps.utils.JsonObjectMapper
@@ -35,17 +36,17 @@ import org.testcontainers.spock.Testcontainers
 
 import java.time.Duration
 
-@SpringBootTest(classes = [NcmpEventsPublisher, ObjectMapper, JsonObjectMapper])
+@SpringBootTest(classes = [LcmEventsPublisher, ObjectMapper, JsonObjectMapper])
 @Testcontainers
 @DirtiesContext
-class NcmpEventsPublisherSpec extends MessagingSpec {
+class LcmEventsPublisherSpec extends MessagingSpec {
 
     def kafkaConsumer = new KafkaConsumer<>(consumerConfigProperties('ncmp-group'))
 
     def testTopic = 'ncmp-events-test'
 
     @SpringBean
-    NcmpEventsPublisher ncmpEventsPublisher = new NcmpEventsPublisher(kafkaTemplate)
+    LcmEventsPublisher ncmpEventsPublisher = new LcmEventsPublisher(kafkaTemplate)
 
     @Autowired
     JsonObjectMapper jsonObjectMapper
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.cps.ncmp.api.impl.event
-
+package org.onap.cps.ncmp.api.impl.event.lcm
 
 import org.onap.ncmp.cmhandle.lcm.event.NcmpEvent
 import spock.lang.Specification
 
-class NcmpEventsServiceSpec extends Specification {
+class LcmEventsServiceSpec extends Specification {
 
-    def mockNcmpEventsPublisher = Mock(NcmpEventsPublisher)
+    def mockLcmEventsPublisher = Mock(LcmEventsPublisher)
 
-    def objectUnderTest = new NcmpEventsService(mockNcmpEventsPublisher)
+    def objectUnderTest = new LcmEventsService(mockLcmEventsPublisher)
 
-    def 'Create and Publish ncmp event where events are #scenario'() {
+    def 'Create and Publish lcm event where events are #scenario'() {
         given: 'a cm handle id and Ncmp Event'
             def cmHandleId = 'test-cm-handle-id'
             def ncmpEvent = new NcmpEvent(eventId: UUID.randomUUID().toString(), eventCorrelationId: cmHandleId)
         and: 'notifications enabled is #notificationsEnabled'
             objectUnderTest.notificationsEnabled = notificationsEnabled
-        when: 'service is called to publish ncmp event'
-            objectUnderTest.publishNcmpEvent('test-cm-handle-id', ncmpEvent)
+        when: 'service is called to publish lcm event'
+            objectUnderTest.publishLcmEvent('test-cm-handle-id', ncmpEvent)
         then: 'publisher is called #expectedTimesMethodCalled times'
-            expectedTimesMethodCalled * mockNcmpEventsPublisher.publishEvent(_, cmHandleId, ncmpEvent)
+            expectedTimesMethodCalled * mockLcmEventsPublisher.publishEvent(_, cmHandleId, ncmpEvent)
         where: 'the following values are used'
             scenario   | notificationsEnabled || expectedTimesMethodCalled
             'enabled'  | true                 || 1
index 50494c0..7ac231c 100644 (file)
@@ -227,11 +227,17 @@ class InventoryPersistenceSpec extends Specification {
             assert result == moduleReferences
     }
 
-    def 'Save list elements'() {
-        when: 'the method to save list elements is called'
-            objectUnderTest.saveListElements('sample Json data')
+    def 'Save Cmhandle'() {
+        given: 'cmHandle represented as Yang Model'
+            def yangModelCmHandle = new YangModelCmHandle(id: 'cmhandle', dmiProperties: [], publicProperties: [])
+        when: 'the method to save cmhandle is called'
+            objectUnderTest.saveCmHandle(yangModelCmHandle)
         then: 'the data service method to save list elements is called once'
-            1 * mockCpsDataService.saveListElements('NCMP-Admin','ncmp-dmi-registry','/dmi-registry','sample Json data',null)
+            1 * mockCpsDataService.saveListElements('NCMP-Admin','ncmp-dmi-registry','/dmi-registry',_,null) >> {
+                args -> {
+                    assert args[3].startsWith('{"cm-handles":[{"id":"cmhandle","additional-properties":[],"public-properties":[]}]}')
+                }
+            }
     }
 
     def 'Delete list or list elements'() {