From 4e596846aa6f1b799487c553d6830004489d96a1 Mon Sep 17 00:00:00 2001 From: lukegleeson Date: Tue, 28 Jun 2022 12:15:33 +0100 Subject: Simplified 'External' lock reason Mapping Refactored LOCKED_MISBEHAVING -> LOCKED_MODULE_SYNC_FAILED CompositeStateMapper will change internal reason LOCKED_MODULE_SYNC_FAILED to external reason LOCKED_MISBEHAVING for client payloads Changed openapi description of lock-reason to reflect only enum currently available LOCKED_MISBEHAVING Issue-ID: CPS-1099 Signed-off-by: lukegleeson Change-Id: I9cda45f6c30b94684ee1c8ad0c49e35a3a824d52 --- cps-ncmp-rest/docs/openapi/components.yaml | 4 ++-- .../rest/controller/NetworkCmProxyController.java | 5 +++-- .../cps/ncmp/rest/mapper/CmHandleStateMapper.java | 22 +++++++++++++++++++-- .../controller/NetworkCmProxyControllerSpec.groovy | 4 ++-- .../rest/mapper/CmHandleStateMapperTest.groovy | 23 ++++++++++++++++++---- 5 files changed, 46 insertions(+), 12 deletions(-) (limited to 'cps-ncmp-rest') diff --git a/cps-ncmp-rest/docs/openapi/components.yaml b/cps-ncmp-rest/docs/openapi/components.yaml index 8249a7a3d7..2cb9d894c0 100644 --- a/cps-ncmp-rest/docs/openapi/components.yaml +++ b/cps-ncmp-rest/docs/openapi/components.yaml @@ -263,10 +263,10 @@ components: properties: reason: type: string - example: LOCKED_OTHER + example: LOCKED_MISBEHAVING details: type: string - example: locked due to module sync + example: locked due to failure in module sync dataStores: type: object 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 33355475d9..b20487119b 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 @@ -286,7 +286,8 @@ public class NetworkCmProxyController implements NetworkCmProxyApi { final CompositeState cmHandleState = networkCmProxyDataService.getCmHandleCompositeState(cmHandleId); final RestOutputCmHandleCompositeState restOutputCmHandleCompositeState = new RestOutputCmHandleCompositeState(); - restOutputCmHandleCompositeState.setState(cmHandleStateMapper.toCmHandleCompositeState(cmHandleState)); + restOutputCmHandleCompositeState.setState( + cmHandleStateMapper.toCmHandleCompositeStateExternalLockReason(cmHandleState)); return ResponseEntity.ok(restOutputCmHandleCompositeState); } @@ -325,7 +326,7 @@ public class NetworkCmProxyController implements NetworkCmProxyApi { restOutputCmHandle.setCmHandle(ncmpServiceCmHandle.getCmHandleId()); cmHandlePublicProperties.add(ncmpServiceCmHandle.getPublicProperties()); restOutputCmHandle.setPublicCmHandleProperties(cmHandlePublicProperties); - restOutputCmHandle.setState(cmHandleStateMapper.toCmHandleCompositeState( + restOutputCmHandle.setState(cmHandleStateMapper.toCmHandleCompositeStateExternalLockReason( ncmpServiceCmHandle.getCompositeState())); return restOutputCmHandle; } diff --git a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/mapper/CmHandleStateMapper.java b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/mapper/CmHandleStateMapper.java index ca109d649c..55b64ec760 100644 --- a/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/mapper/CmHandleStateMapper.java +++ b/cps-ncmp-rest/src/main/java/org/onap/cps/ncmp/rest/mapper/CmHandleStateMapper.java @@ -28,6 +28,7 @@ import org.mapstruct.NullValuePropertyMappingStrategy; import org.onap.cps.ncmp.api.inventory.CompositeState; import org.onap.cps.ncmp.rest.model.CmHandleCompositeState; import org.onap.cps.ncmp.rest.model.DataStores; +import org.onap.cps.ncmp.rest.model.LockReason; import org.onap.cps.ncmp.rest.model.SyncState; @Mapper(componentModel = "spring", nullValueCheckStrategy = NullValueCheckStrategy.ALWAYS, @@ -35,8 +36,8 @@ import org.onap.cps.ncmp.rest.model.SyncState; public interface CmHandleStateMapper { @Mapping(target = "dataSyncState", source = "dataStores", qualifiedByName = "dataStoreToDataSyncState") - @Mapping(target = "lockReason.reason", source = "lockReason.lockReasonCategory") - CmHandleCompositeState toCmHandleCompositeState(CompositeState compositeState); + @Mapping(target = "lockReason", source = "lockReason", qualifiedByName = "toExternalLockReason") + CmHandleCompositeState toCmHandleCompositeStateExternalLockReason(CompositeState compositeState); /** * Convert from CompositeState datastore to RestOutput Datastores. @@ -66,4 +67,21 @@ public interface CmHandleStateMapper { } + /** + * Convert Internal Lock Reason to External Lock Reason. + * + * @param internalLockReason Internal Lock Reason + * + * @return externalLockReason + */ + @Named("toExternalLockReason") + static LockReason toExternalLockReason(CompositeState.LockReason internalLockReason) { + final LockReason externalLockReason = new LockReason(); + if (internalLockReason.getLockReasonCategory() != null) { + externalLockReason.setReason("LOCKED_MISBEHAVING"); + } + externalLockReason.setDetails(internalLockReason.getDetails()); + return externalLockReason; + } + } 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 729df9ce4d..7b123e8a69 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 @@ -432,7 +432,7 @@ class NetworkCmProxyControllerSpec extends Specification { def compositeStateTestObject() { new CompositeState(cmHandleState: CmHandleState.ADVISED, - lockReason: CompositeState.LockReason.builder().lockReasonCategory(LockReasonCategory.LOCKED_MISBEHAVING).details("lock misbehaving details").build(), + lockReason: CompositeState.LockReason.builder().lockReasonCategory(LockReasonCategory.LOCKED_MODULE_SYNC_FAILED).details("lock details").build(), lastUpdateTime: formattedDateAndTime.toString(), dataSyncEnabled: false, dataStores: dataStores()) @@ -448,7 +448,7 @@ class NetworkCmProxyControllerSpec extends Specification { '"state":', '"cmHandleState":"ADVISED"', '"reason":"LOCKED_MISBEHAVING"', - '"details":"lock misbehaving details"', + '"details":"lock details"', '"lastUpdateTime":"2022-12-31T20:30:40.000+0000"', '"dataSyncEnabled":false', '"dataSyncState":', diff --git a/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/mapper/CmHandleStateMapperTest.groovy b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/mapper/CmHandleStateMapperTest.groovy index 42fda770b7..677cf66127 100644 --- a/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/mapper/CmHandleStateMapperTest.groovy +++ b/cps-ncmp-rest/src/test/groovy/org/onap/cps/ncmp/rest/mapper/CmHandleStateMapperTest.groovy @@ -38,25 +38,40 @@ class CmHandleStateMapperTest extends Specification { .format(OffsetDateTime.of(2022, 12, 31, 20, 30, 40, 1, ZoneOffset.UTC)) def objectUnderTest = Mappers.getMapper(CmHandleStateMapper) - def 'Composite State to Rest Output CmHandleState'() { + def 'Composite State to CmHandleCompositeState'() { given: 'a composite state model' def compositeState = new CompositeStateBuilder() .withCmHandleState(CmHandleState.ADVISED) .withLastUpdatedTime(formattedDateAndTime.toString()) - .withLockReason(LockReasonCategory.LOCKED_MISBEHAVING, 'locked other details') + .withLockReason(LockReasonCategory.LOCKED_MODULE_SYNC_FAILED, 'locked details') .withOperationalDataStores(DataStoreSyncState.SYNCHRONIZED, formattedDateAndTime).build() compositeState.setDataSyncEnabled(false) when: 'mapper is called' - def result = objectUnderTest.toCmHandleCompositeState(compositeState) + def result = objectUnderTest.toCmHandleCompositeStateExternalLockReason(compositeState) then: 'result is of the correct type' assert result.class == CmHandleCompositeState.class and: 'mapped result should have correct values' assert !result.dataSyncEnabled assert result.lastUpdateTime == formattedDateAndTime assert result.lockReason.reason == 'LOCKED_MISBEHAVING' - assert result.lockReason.details == 'locked other details' + assert result.lockReason.details == 'locked details' assert result.cmHandleState == 'ADVISED' assert result.dataSyncState.operational.getState() != null } + def 'Internal to External Lock Reason Mapping of #scenario'() { + given: 'a LOCKED composite state with locked reason of #scenario' + def compositeState = new CompositeStateBuilder() + .withCmHandleState(CmHandleState.LOCKED) + .withLockReason(lockReason, '').build() + when: 'the composite state is mapped to a CMHandle composite state' + def result = objectUnderTest.toCmHandleCompositeStateExternalLockReason(compositeState) + then: 'the composite state contains the expected lock Reason and details' + result.getLockReason().getReason() == expectedExternalLockReason + where: + scenario | lockReason || expectedExternalLockReason + 'LOCKED_MODULE_SYNC_FAILED' | LockReasonCategory.LOCKED_MODULE_SYNC_FAILED || 'LOCKED_MISBEHAVING' + 'null value' | null || null + } + } -- cgit 1.2.3-korg