summaryrefslogtreecommitdiffstats
path: root/cps-ncmp-rest
diff options
context:
space:
mode:
authorDylanB95EST <dylan.byrne@est.tech>2022-05-19 14:09:58 +0100
committerDylanB95EST <dylan.byrne@est.tech>2022-06-01 14:48:21 +0100
commit912c86dec96e675c2635298cea8869d014938042 (patch)
tree504061c0e1f9782da7e676da428b67b0d4de9eee /cps-ncmp-rest
parent5d3ed6ff2fe76e2510867379fdf58d4e99b2cc9f (diff)
Module Sync Lock State implementation
Implementation of Lock state for module sync watchdog Cm Handle state is locked if any exception is found during sync process Make changes around READY state method in line with the new schema set Add last updated time to composite state Remove running datastore references as this is being done at a later time Issue-ID: CPS-875 Change-Id: I6bd159faefef2fa84dbf536c292ff0a132793381 Signed-off-by: DylanB95EST <dylan.byrne@est.tech>
Diffstat (limited to 'cps-ncmp-rest')
-rw-r--r--cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/mapper/RestOutputCmHandleStateMapper.java21
-rw-r--r--cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/controller/NetworkCmProxyControllerSpec.groovy25
-rw-r--r--cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/mapper/RestOutputCmHandleStateMapperTest.groovy36
3 files changed, 17 insertions, 65 deletions
diff --git a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/mapper/RestOutputCmHandleStateMapper.java b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/mapper/RestOutputCmHandleStateMapper.java
index ce3206829..5f4b31118 100644
--- a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/mapper/RestOutputCmHandleStateMapper.java
+++ b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/mapper/RestOutputCmHandleStateMapper.java
@@ -25,7 +25,6 @@ import org.mapstruct.Mapping;
import org.mapstruct.Named;
import org.mapstruct.NullValueCheckStrategy;
import org.mapstruct.NullValuePropertyMappingStrategy;
-import org.onap.cps.ncmp.api.inventory.CmHandleState;
import org.onap.cps.ncmp.api.inventory.CompositeState;
import org.onap.cps.ncmp.rest.model.DataStores;
import org.onap.cps.ncmp.rest.model.RestOutputCmHandleState;
@@ -36,7 +35,7 @@ import org.onap.cps.ncmp.rest.model.SyncState;
public interface RestOutputCmHandleStateMapper {
@Mapping(target = "dataSyncState", source = "dataStores", qualifiedByName = "dataStoreToDataSyncState")
- @Mapping(target = "cmHandleState", source = "cmhandleState", qualifiedByName = "cmHandleStateEnumToString")
+ @Mapping(target = "lockReason.reason", source = "lockReason.lockReasonCategory")
RestOutputCmHandleState toRestOutputCmHandleState(CompositeState compositeState);
/**
@@ -54,13 +53,6 @@ public interface RestOutputCmHandleStateMapper {
final DataStores dataStores = new DataStores();
- if (compositeStateDataStore.getRunningDataStore() != null) {
- final SyncState runningSyncState = new SyncState();
- runningSyncState.setState(compositeStateDataStore.getRunningDataStore().getSyncState());
- runningSyncState.setLastSyncTime(compositeStateDataStore.getRunningDataStore().getLastSyncTime());
- dataStores.setRunning(runningSyncState);
- }
-
if (compositeStateDataStore.getOperationalDataStore() != null) {
final SyncState operationalSyncState = new SyncState();
operationalSyncState.setState(compositeStateDataStore.getOperationalDataStore().getSyncState());
@@ -73,15 +65,4 @@ public interface RestOutputCmHandleStateMapper {
}
- /**
- * Converts cmHandleState enum value to equivalent string.
- *
- * @param cmHandleState cm handle state enum
- * @return cm handle state as string
- */
- @Named("cmHandleStateEnumToString")
- static String toCmHandleState(final CmHandleState cmHandleState) {
- return cmHandleState.name();
- }
-
}
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 331530425..60ea736d7 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
@@ -37,7 +37,6 @@ import java.time.format.DateTimeFormatter
import static org.onap.cps.ncmp.api.impl.operations.DmiRequestBody.OperationEnum.PATCH
import static org.onap.cps.ncmp.api.inventory.CompositeState.DataStores
-import static org.onap.cps.ncmp.api.inventory.CompositeState.LockReason
import static org.onap.cps.ncmp.api.inventory.CompositeState.Operational
import static org.onap.cps.ncmp.api.inventory.CompositeState.Running
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete
@@ -256,30 +255,20 @@ class NetworkCmProxyControllerSpec extends Specification {
given: 'an endpoint and a cm handle'
def cmHandleDetailsEndpoint = "$ncmpBasePathV1/ch/some-cm-handle"
and: 'an existing ncmp service cm handle'
- def cmHandleId = 'some-cm-handle'
- def dmiProperties = [ prop:'some DMI property' ]
- def publicProperties = [ "public prop":'some public property' ]
- def compositeState = new CompositeState(cmhandleState: CmHandleState.ADVISED,
- lockReason: LockReason.builder().reason('LOCKED_OTHER').details("lock-misbehaving-details").build(),
+ def compositeState = new CompositeState(cmHandleState: CmHandleState.ADVISED,
lastUpdateTime: formattedDateAndTime.toString(),
- dataSyncEnabled: false,
dataStores: dataStores())
- def ncmpServiceCmHandle = new NcmpServiceCmHandle(cmHandleId: cmHandleId, dmiProperties: dmiProperties, publicProperties: publicProperties, compositeState: compositeState)
+ def ncmpServiceCmHandle = new NcmpServiceCmHandle(cmHandleId: 'some-cm-handle', compositeState: compositeState)
and: 'the service method is invoked with the cm handle id'
1 * mockNetworkCmProxyDataService.getNcmpServiceCmHandle('some-cm-handle') >> ncmpServiceCmHandle
when: 'the cm handle details api is invoked'
def response = mvc.perform(get(cmHandleDetailsEndpoint)).andReturn().response
then: 'the correct response is returned'
response.status == HttpStatus.OK.value()
- and: 'the response returns public properties and the correct cm handle states'
- response.contentAsString.contains('publicCmHandleProperties')
- response.contentAsString.contains('LOCKED_OTHER')
- response.contentAsString.contains('lock-misbehaving-details')
+ and: 'the response returns the correct state and timestamp'
+ response.contentAsString.contains('some-cm-handle')
response.contentAsString.contains('ADVISED')
- response.contentAsString.contains('NONE_REQUESTED')
response.contentAsString.contains('2022-12-31T20:30:40.000+0000')
- and: 'the content does not contain dmi properties'
- !response.contentAsString.contains("some DMI property")
}
def 'Get Cm Handle public properties by Cm Handle id.' () {
@@ -387,11 +376,7 @@ class NetworkCmProxyControllerSpec extends Specification {
DataStores.builder()
.operationalDataStore(Operational.builder()
.syncState('NONE_REQUESTED')
- .lastSyncTime(formattedDateAndTime.toString()).build())
- .runningDataStore(Running.builder()
- .syncState('NONE_REQUESTED')
- .lastSyncTime(formattedDateAndTime.toString()).build())
- .build()
+ .lastSyncTime(formattedDateAndTime.toString()).build()).build()
}
}
diff --git a/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/mapper/RestOutputCmHandleStateMapperTest.groovy b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/mapper/RestOutputCmHandleStateMapperTest.groovy
index 4560ae481..22c9fe605 100644
--- a/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/mapper/RestOutputCmHandleStateMapperTest.groovy
+++ b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/mapper/RestOutputCmHandleStateMapperTest.groovy
@@ -22,7 +22,8 @@ package org.onap.cps.ncmp.rest.mapper
import org.mapstruct.factory.Mappers
import org.onap.cps.ncmp.api.inventory.CmHandleState
-import org.onap.cps.ncmp.api.inventory.CompositeState
+import org.onap.cps.ncmp.api.inventory.CompositeStateBuilder
+import org.onap.cps.ncmp.api.inventory.LockReasonCategory
import org.onap.cps.ncmp.rest.model.RestOutputCmHandleState
import spock.lang.Specification
@@ -30,10 +31,6 @@ import java.time.OffsetDateTime
import java.time.ZoneOffset
import java.time.format.DateTimeFormatter
-import static org.onap.cps.ncmp.api.inventory.CompositeState.DataStores
-import static org.onap.cps.ncmp.api.inventory.CompositeState.LockReason
-import static org.onap.cps.ncmp.api.inventory.CompositeState.Operational
-
class RestOutputCmHandleStateMapperTest extends Specification {
def formattedDateAndTime = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ")
@@ -42,11 +39,12 @@ class RestOutputCmHandleStateMapperTest extends Specification {
def 'Composite State to Rest Output CmHandleState'() {
given: 'a composite state model'
- def compositeState = new CompositeState(cmhandleState: CmHandleState.ADVISED,
- lockReason: LockReason.builder().reason('LOCKED_OTHER').details('locked-other-details').build(),
- lastUpdateTime: formattedDateAndTime.toString(),
- dataSyncEnabled: false,
- dataStores: dataStores())
+ def compositeState = new CompositeStateBuilder()
+ .withCmHandleState(CmHandleState.ADVISED)
+ .withLastUpdatedTime(formattedDateAndTime.toString())
+ .withLockReason(LockReasonCategory.LOCKED_MISBEHAVING, 'locked other details')
+ .withOperationalDataStores('SYNCHRONIZED', formattedDateAndTime).build()
+ compositeState.setDataSyncEnabled(false)
when: 'mapper is called'
def result = objectUnderTest.toRestOutputCmHandleState(compositeState)
then: 'result is of the correct type'
@@ -54,22 +52,10 @@ class RestOutputCmHandleStateMapperTest extends Specification {
and: 'mapped result should have correct values'
assert !result.dataSyncEnabled
assert result.lastUpdateTime == formattedDateAndTime
- assert result.lockReason.reason == 'LOCKED_OTHER'
- assert result.lockReason.details == 'locked-other-details'
+ assert result.lockReason.reason == 'LOCKED_MISBEHAVING'
+ assert result.lockReason.details == 'locked other details'
assert result.cmHandleState == CmHandleState.ADVISED.name()
- assert result.dataSyncState.operational != null
- assert result.dataSyncState.running != null
+ assert result.dataSyncState.operational.getState() != null
}
- def dataStores() {
-
- return DataStores.builder()
- .operationalDataStore(Operational.builder()
- .syncState('NONE_REQUESTED')
- .lastSyncTime(formattedDateAndTime.toString()).build())
- .runningDataStore(CompositeState.Running.builder()
- .syncState('NONE_REQUESTED')
- .lastSyncTime(formattedDateAndTime.toString()).build())
- .build()
- }
}