From f41dd3b24da2cc956c3d6e27fc14e409f11c65c0 Mon Sep 17 00:00:00 2001 From: seanbeirne Date: Tue, 17 Oct 2023 11:03:16 +0100 Subject: Initial Registration with trustLevel on NCMP - Updated NcmpServiceCmHandle class to include registration trustLevel Issue-ID: CPS-1902 Signed-off-by: seanbeirne Change-Id: I7c97928f5cdd82f3036a57ea5f0c149e2872f4f1 --- .../api/impl/NetworkCmProxyDataServiceImpl.java | 21 ++++++++------ .../cps/ncmp/api/models/NcmpServiceCmHandle.java | 5 ++++ ...rkCmProxyDataServiceImplRegistrationSpec.groovy | 32 ++++++++++++++++------ 3 files changed, 42 insertions(+), 16 deletions(-) (limited to 'cps-ncmp-service') 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 febd1cf9c..4ec00daea 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 @@ -99,7 +99,7 @@ public class NetworkCmProxyDataServiceImpl implements NetworkCmProxyDataService private final LcmEventsCmHandleStateHandler lcmEventsCmHandleStateHandler; private final CpsDataService cpsDataService; private final IMap moduleSyncStartedOnCmHandles; - private final Map trustLevelPerDmiPlugin; + private final Map trustLevelPerCmHandle; @Override public DmiPluginRegistrationResponse updateDmiRegistrationAndSyncModule( @@ -113,6 +113,7 @@ public class NetworkCmProxyDataServiceImpl implements NetworkCmProxyDataService } if (!dmiPluginRegistration.getCreatedCmHandles().isEmpty()) { + populateTrustLevelPerCmHandleCache(dmiPluginRegistration); dmiPluginRegistrationResponse.setCreatedCmHandles( parseAndProcessCreatedCmHandlesInRegistration(dmiPluginRegistration)); } @@ -127,8 +128,6 @@ public class NetworkCmProxyDataServiceImpl implements NetworkCmProxyDataService parseAndProcessUpgradedCmHandlesInRegistration(dmiPluginRegistration)); } - setTrustLevelPerDmiPlugin(dmiPluginRegistration); - return dmiPluginRegistrationResponse; } @@ -487,11 +486,17 @@ public class NetworkCmProxyDataServiceImpl implements NetworkCmProxyDataService return cmHandleStatePerCmHandle.keySet().stream().map(YangModelCmHandle::getId).toList(); } - private void setTrustLevelPerDmiPlugin(final DmiPluginRegistration dmiPluginRegistration) { - if (DmiPluginRegistration.isNullEmptyOrBlank(dmiPluginRegistration.getDmiDataPlugin())) { - trustLevelPerDmiPlugin.put(dmiPluginRegistration.getDmiPlugin(), TrustLevel.COMPLETE); - } else { - trustLevelPerDmiPlugin.put(dmiPluginRegistration.getDmiDataPlugin(), TrustLevel.COMPLETE); + private void populateTrustLevelPerCmHandleCache(final DmiPluginRegistration dmiPluginRegistration) { + for (final NcmpServiceCmHandle cmHandle: dmiPluginRegistration.getCreatedCmHandles()) { + if (cmHandle.getRegistrationTrustLevel() == null) { + if (trustLevelPerCmHandle.containsKey(cmHandle.getCmHandleId())) { + log.warn("CmHandle : {}, Already exists, Initial trustLevel ignored.", cmHandle.getCmHandleId()); + } else { + trustLevelPerCmHandle.put(cmHandle.getCmHandleId(), TrustLevel.COMPLETE); + } + } else { + trustLevelPerCmHandle.put(cmHandle.getCmHandleId(), cmHandle.getRegistrationTrustLevel()); + } } } diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/NcmpServiceCmHandle.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/NcmpServiceCmHandle.java index 0b50346f8..f323079e0 100644 --- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/NcmpServiceCmHandle.java +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/models/NcmpServiceCmHandle.java @@ -29,6 +29,7 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import org.onap.cps.ncmp.api.impl.inventory.CompositeState; +import org.onap.cps.ncmp.api.impl.trustlevel.TrustLevel; import org.springframework.validation.annotation.Validated; /** @@ -55,6 +56,9 @@ public class NcmpServiceCmHandle { @JsonSetter(nulls = Nulls.AS_EMPTY) private String moduleSetTag; + @JsonSetter(nulls = Nulls.AS_EMPTY) + private TrustLevel registrationTrustLevel; + /** * NcmpServiceCmHandle copy constructor. * @@ -67,5 +71,6 @@ public class NcmpServiceCmHandle { this.compositeState = ncmpServiceCmHandle.getCompositeState() != null ? new CompositeState( ncmpServiceCmHandle.getCompositeState()) : null; this.moduleSetTag = ncmpServiceCmHandle.getModuleSetTag(); + this.registrationTrustLevel = ncmpServiceCmHandle.getRegistrationTrustLevel(); } } diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImplRegistrationSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImplRegistrationSpec.groovy index 0f40906b6..c87efce04 100644 --- a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImplRegistrationSpec.groovy +++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImplRegistrationSpec.groovy @@ -68,7 +68,7 @@ class NetworkCmProxyDataServiceImplRegistrationSpec extends Specification { def mockLcmEventsCmHandleStateHandler = Mock(LcmEventsCmHandleStateHandler) def mockCpsDataService = Mock(CpsDataService) def mockModuleSyncStartedOnCmHandles = Mock(IMap) - def mockTrustLevelPerDmiPlugin = Mock(IMap) + def trustLevelPerCmHandle = [:] def objectUnderTest = getObjectUnderTest() def 'DMI Registration: Create, Update, Delete & Upgrade operations are processed in the right order'() { @@ -128,13 +128,11 @@ class NetworkCmProxyDataServiceImplRegistrationSpec extends Specification { objectUnderTest.updateDmiRegistrationAndSyncModule(dmiPluginRegistration) then: 'create cm handles registration and sync modules is called with the correct plugin information' 1 * objectUnderTest.parseAndProcessCreatedCmHandlesInRegistration(dmiPluginRegistration) - and: 'dmi is added to the trustLevel map' - 1 * mockTrustLevelPerDmiPlugin.put(dmiPluginRegisteredName, TrustLevel.COMPLETE) where: - scenario | dmiPlugin | dmiModelPlugin | dmiDataPlugin | dmiPluginRegisteredName - 'combined DMI plugin' | 'service1' | '' | '' | 'service1' - 'data & model DMI plugins' | '' | 'service1' | 'service2' | 'service2' - 'data & model using same service' | '' | 'service1' | 'service1' | 'service1' + scenario | dmiPlugin | dmiModelPlugin | dmiDataPlugin + 'combined DMI plugin' | 'service1' | '' | '' + 'data & model DMI plugins' | '' | 'service1' | 'service2' + 'data & model using same service' | '' | 'service1' | 'service1' } def 'Create CM-handle Validation: Invalid DMI plugin service name with #scenario'() { @@ -193,6 +191,24 @@ class NetworkCmProxyDataServiceImplRegistrationSpec extends Specification { 'without dmi & public properties' | [:] | [:] || '[]' | '[]' } + def 'Add CM-Handle to trustLevelPerCmHandle Successfully with: #scenario.'() { + given: 'a registration with trustLevel and populated cache' + def dmiPluginRegistration = new DmiPluginRegistration(dmiPlugin: 'my-server') + dmiPluginRegistration.createdCmHandles = [new NcmpServiceCmHandle(cmHandleId: 'ch-1', registrationTrustLevel: TrustLevel.NONE), + new NcmpServiceCmHandle(cmHandleId: cmHandleId, registrationTrustLevel: registrationTrustLevel)] + when: 'registration is updated' + def response = objectUnderTest.updateDmiRegistrationAndSyncModule(dmiPluginRegistration) + then: 'a successful response is received' + assert response.createdCmHandles.size() == expectedNumberOfCreatedCmHandles + and: 'trustLevel is set for the created cm-handle' + assert trustLevelPerCmHandle.get(cmHandleId) == expectedTrustLevel + where: + scenario | cmHandleId | registrationTrustLevel || expectedNumberOfCreatedCmHandles | expectedTrustLevel + 'new cmHandleId and trustLevel' | 'ch-new' | TrustLevel.COMPLETE || 2 | TrustLevel.COMPLETE + 'existing cmHandleId with null trustLevel' | 'ch-1' | null || 1 | TrustLevel.NONE + 'cmHandleId with null trustLevel' | 'ch-new' | null || 2 | TrustLevel.COMPLETE + } + def 'Create CM-Handle Multiple Requests: All cm-handles creation requests are processed with some failures'() { given: 'a registration with three cm-handles to be created' def dmiPluginRegistration = new DmiPluginRegistration(dmiPlugin: 'my-server', @@ -387,7 +403,7 @@ class NetworkCmProxyDataServiceImplRegistrationSpec extends Specification { return Spy(new NetworkCmProxyDataServiceImpl(spiedJsonObjectMapper, mockDmiDataOperations, mockNetworkCmProxyDataServicePropertyHandler, mockInventoryPersistence, mockCmHandleQueries, stubbedNetworkCmProxyCmHandlerQueryService, mockLcmEventsCmHandleStateHandler, mockCpsDataService, - mockModuleSyncStartedOnCmHandles, mockTrustLevelPerDmiPlugin)) + mockModuleSyncStartedOnCmHandles, trustLevelPerCmHandle)) } def addPersistedYangModelCmHandles(ids) { -- cgit 1.2.3-korg