From a927b20ce1a6d5792ed41e0a98eb475606e8f35a Mon Sep 17 00:00:00 2001 From: JvD_Ericsson Date: Fri, 16 Feb 2024 09:30:45 +0000 Subject: Provide support for data producer identifier during registration (CPS-1964 1) - Added support for the dataProducerIdentifier to be added, and updated from blank to something once - The dataProducerIdentifier is persisted in the DB Issue-ID: CPS-2105 Signed-off-by: JvD_Ericsson Change-Id: I1c230be8f9402154a761e8c2ba4d8a6331965b3c --- .../api/impl/NetworkCmProxyDataServiceImpl.java | 3 +- .../NetworkCmProxyDataServicePropertyHandler.java | 48 +++++-- .../cps/ncmp/api/impl/utils/YangDataConverter.java | 3 +- .../api/impl/yangmodels/YangModelCmHandle.java | 12 +- .../cps/ncmp/api/models/NcmpServiceCmHandle.java | 5 +- .../onap/cps/ncmp/init/InventoryModelLoader.java | 4 +- .../resources/models/dmi-registry@2023-11-27.yang | 140 ------------------- .../resources/models/dmi-registry@2024-02-23.yang | 148 +++++++++++++++++++++ ...orkCmProxyDataServicePropertyHandlerSpec.groovy | 52 +++++++- .../inventory/sync/ModuleSyncServiceSpec.groovy | 6 +- .../api/impl/utils/DmiServiceUrlBuilderSpec.groovy | 4 +- .../impl/yangmodels/YangModelCmHandleSpec.groovy | 9 +- .../cps/ncmp/init/InventoryModelLoaderSpec.groovy | 6 +- 13 files changed, 269 insertions(+), 171 deletions(-) delete mode 100644 cps-ncmp-service/src/main/resources/models/dmi-registry@2023-11-27.yang create mode 100644 cps-ncmp-service/src/main/resources/models/dmi-registry@2024-02-23.yang (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 4c905bf90..6ab6eab65 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 @@ -459,7 +459,8 @@ public class NetworkCmProxyDataServiceImpl implements NetworkCmProxyDataService dmiPluginRegistration.getDmiModelPlugin(), ncmpServiceCmHandle, ncmpServiceCmHandle.getModuleSetTag(), - ncmpServiceCmHandle.getAlternateId()); + ncmpServiceCmHandle.getAlternateId(), + ncmpServiceCmHandle.getDataProducerIdentifier()); } private void processTrustLevels(final Collection cmHandlesToBeCreated, diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServicePropertyHandler.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServicePropertyHandler.java index 3d1529163..f86191002 100644 --- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServicePropertyHandler.java +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServicePropertyHandler.java @@ -47,6 +47,8 @@ import lombok.extern.slf4j.Slf4j; import org.onap.cps.api.CpsDataService; import org.onap.cps.ncmp.api.impl.inventory.InventoryPersistence; import org.onap.cps.ncmp.api.impl.utils.AlternateIdChecker; +import org.onap.cps.ncmp.api.impl.utils.YangDataConverter; +import org.onap.cps.ncmp.api.impl.yangmodels.YangModelCmHandle; import org.onap.cps.ncmp.api.models.CmHandleRegistrationResponse; import org.onap.cps.ncmp.api.models.NcmpServiceCmHandle; import org.onap.cps.spi.exceptions.DataNodeNotFoundException; @@ -55,6 +57,7 @@ import org.onap.cps.spi.model.DataNode; import org.onap.cps.spi.model.DataNodeBuilder; import org.onap.cps.utils.JsonObjectMapper; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; @Slf4j @Service @@ -110,7 +113,9 @@ public class NetworkCmProxyDataServicePropertyHandler { private void processUpdates(final DataNode existingCmHandleDataNode, final NcmpServiceCmHandle updatedNcmpServiceCmHandle) { - updateAlternateId(updatedNcmpServiceCmHandle); + setAndUpdateCmHandleField( + updatedNcmpServiceCmHandle.getCmHandleId(), "alternate-id", updatedNcmpServiceCmHandle.getAlternateId()); + updateDataProducerIdentifier(existingCmHandleDataNode, updatedNcmpServiceCmHandle); if (!updatedNcmpServiceCmHandle.getPublicProperties().isEmpty()) { updateProperties(existingCmHandleDataNode, PUBLIC_PROPERTY, updatedNcmpServiceCmHandle.getPublicProperties()); @@ -120,17 +125,24 @@ public class NetworkCmProxyDataServicePropertyHandler { } } - private void updateAlternateId(final NcmpServiceCmHandle updatedNcmpServiceCmHandle) { - final String updatedAlternateId = updatedNcmpServiceCmHandle.getAlternateId(); - final String cmHandleId = updatedNcmpServiceCmHandle.getCmHandleId(); - final Map cmHandleProperties = new HashMap<>(2); - cmHandleProperties.put("id", cmHandleId); - cmHandleProperties.put("alternate-id", updatedAlternateId); - final Map> dmiRegistryProperties = new HashMap<>(1); - dmiRegistryProperties.put("cm-handles", cmHandleProperties); - cpsDataService.updateNodeLeaves(NCMP_DATASPACE_NAME, NCMP_DMI_REGISTRY_ANCHOR, NCMP_DMI_REGISTRY_PARENT, - jsonObjectMapper.asJsonString(dmiRegistryProperties), OffsetDateTime.now()); - log.debug("Updating alternateId for cmHandle {} with value : {})", cmHandleId, updatedAlternateId); + private void updateDataProducerIdentifier(final DataNode cmHandleDataNode, + final NcmpServiceCmHandle ncmpServiceCmHandle) { + final String newDataProducerIdentifier = ncmpServiceCmHandle.getDataProducerIdentifier(); + if (StringUtils.hasText(newDataProducerIdentifier)) { + final YangModelCmHandle yangModelCmHandle = + YangDataConverter.convertCmHandleToYangModel(cmHandleDataNode); + final String existingDataProducerIdentifier = yangModelCmHandle.getDataProducerIdentifier(); + if (StringUtils.hasText(existingDataProducerIdentifier)) { + if (!existingDataProducerIdentifier.equals(newDataProducerIdentifier)) { + log.warn("Unable to update dataProducerIdentifier for cmHandle {}. " + + "Value for dataProducerIdentifier has been set previously.", + ncmpServiceCmHandle.getCmHandleId()); + } + } else { + setAndUpdateCmHandleField( + yangModelCmHandle.getId(), "data-producer-identifier", newDataProducerIdentifier); + } + } } private void updateProperties(final DataNode existingCmHandleDataNode, final PropertyType propertyType, @@ -202,6 +214,18 @@ public class NetworkCmProxyDataServicePropertyHandler { return new DataNodeBuilder().withXpath(xpath).withLeaves(ImmutableMap.copyOf(updatedLeaves)).build(); } + private void setAndUpdateCmHandleField(final String cmHandleIdToUpdate, final String fieldName, + final String newFieldValue) { + final Map> dmiRegistryData = new HashMap<>(1); + final Map cmHandleData = new HashMap<>(2); + cmHandleData.put("id", cmHandleIdToUpdate); + cmHandleData.put(fieldName, newFieldValue); + dmiRegistryData.put("cm-handles", cmHandleData); + cpsDataService.updateNodeLeaves(NCMP_DATASPACE_NAME, NCMP_DMI_REGISTRY_ANCHOR, NCMP_DMI_REGISTRY_PARENT, + jsonObjectMapper.asJsonString(dmiRegistryData), OffsetDateTime.now()); + log.debug("Updating {} for cmHandle {} with value : {})", fieldName, cmHandleIdToUpdate, newFieldValue); + } + enum PropertyType { DMI_PROPERTY("additional-properties"), PUBLIC_PROPERTY("public-properties"); diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/utils/YangDataConverter.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/utils/YangDataConverter.java index 395414297..e043e029f 100644 --- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/utils/YangDataConverter.java +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/utils/YangDataConverter.java @@ -89,7 +89,8 @@ public class YangDataConverter { (String) cmHandleDataNode.getLeaves().get("dmi-model-service-name"), ncmpServiceCmHandle, (String) cmHandleDataNode.getLeaves().get("module-set-tag"), - (String) cmHandleDataNode.getLeaves().get("alternate-id") + (String) cmHandleDataNode.getLeaves().get("alternate-id"), + (String) cmHandleDataNode.getLeaves().get("data-producer-identifier") ); } diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/yangmodels/YangModelCmHandle.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/yangmodels/YangModelCmHandle.java index b2758d9d5..2ca2b2eb0 100644 --- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/yangmodels/YangModelCmHandle.java +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/api/impl/yangmodels/YangModelCmHandle.java @@ -70,6 +70,9 @@ public class YangModelCmHandle { @JsonProperty("alternate-id") private String alternateId; + @JsonProperty("data-producer-identifier") + private String dataProducerIdentifier; + @JsonProperty("additional-properties") private List dmiProperties; @@ -95,6 +98,7 @@ public class YangModelCmHandle { original.getPublicProperties() == null ? null : new ArrayList<>(original.getPublicProperties()); copy.moduleSetTag = original.getModuleSetTag(); copy.alternateId = original.getAlternateId(); + copy.dataProducerIdentifier = original.getDataProducerIdentifier(); return copy; } @@ -105,6 +109,9 @@ public class YangModelCmHandle { * @param dmiDataServiceName dmi data service name * @param dmiModelServiceName dmi model service name * @param ncmpServiceCmHandle the cm handle + * @param moduleSetTag moduleSetTag + * @param alternateId alternateId + * @param dataProducerIdentifier dataProducerIdentifier * @return instance of yangModelCmHandle */ public static YangModelCmHandle toYangModelCmHandle(final String dmiServiceName, @@ -112,7 +119,8 @@ public class YangModelCmHandle { final String dmiModelServiceName, final NcmpServiceCmHandle ncmpServiceCmHandle, final String moduleSetTag, - final String alternateId) { + final String alternateId, + final String dataProducerIdentifier) { final YangModelCmHandle yangModelCmHandle = new YangModelCmHandle(); yangModelCmHandle.setId(ncmpServiceCmHandle.getCmHandleId()); yangModelCmHandle.setDmiServiceName(dmiServiceName); @@ -120,6 +128,8 @@ public class YangModelCmHandle { yangModelCmHandle.setDmiModelServiceName(dmiModelServiceName); yangModelCmHandle.setModuleSetTag(moduleSetTag == null ? StringUtils.EMPTY : moduleSetTag); yangModelCmHandle.setAlternateId(alternateId == null ? StringUtils.EMPTY : alternateId); + yangModelCmHandle.setDataProducerIdentifier( + dataProducerIdentifier == null ? StringUtils.EMPTY : dataProducerIdentifier); yangModelCmHandle.setDmiProperties(asYangModelCmHandleProperties(ncmpServiceCmHandle.getDmiProperties())); yangModelCmHandle.setPublicProperties(asYangModelCmHandleProperties( ncmpServiceCmHandle.getPublicProperties())); 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 498987897..676eebc4d 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 @@ -1,6 +1,6 @@ /* * ============LICENSE_START======================================================= - * Copyright (C) 2021-2023 Nordix Foundation + * Copyright (C) 2021-2024 Nordix Foundation * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -60,4 +60,7 @@ public class NcmpServiceCmHandle { @JsonSetter(nulls = Nulls.AS_EMPTY) private String alternateId; + + @JsonSetter(nulls = Nulls.AS_EMPTY) + private String dataProducerIdentifier; } diff --git a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/init/InventoryModelLoader.java b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/init/InventoryModelLoader.java index 01bfc2b5d..d0d63ab8e 100644 --- a/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/init/InventoryModelLoader.java +++ b/cps-ncmp-service/src/main/java/org/onap/cps/ncmp/init/InventoryModelLoader.java @@ -34,8 +34,8 @@ import org.springframework.stereotype.Service; @Service public class InventoryModelLoader extends AbstractModelLoader { - private static final String NEW_MODEL_FILE_NAME = "dmi-registry@2023-11-27.yang"; - private static final String NEW_SCHEMA_SET_NAME = "dmi-registry-2023-11-27"; + private static final String NEW_MODEL_FILE_NAME = "dmi-registry@2024-02-23.yang"; + private static final String NEW_SCHEMA_SET_NAME = "dmi-registry-2024-02-23"; public InventoryModelLoader(final CpsDataspaceService cpsDataspaceService, final CpsModuleService cpsModuleService, diff --git a/cps-ncmp-service/src/main/resources/models/dmi-registry@2023-11-27.yang b/cps-ncmp-service/src/main/resources/models/dmi-registry@2023-11-27.yang deleted file mode 100644 index 808bbdd1b..000000000 --- a/cps-ncmp-service/src/main/resources/models/dmi-registry@2023-11-27.yang +++ /dev/null @@ -1,140 +0,0 @@ -module dmi-registry { - - yang-version 1.1; - - namespace "org:onap:cps:ncmp"; - - prefix dmi-reg; - - contact "toine.siebelink@est.tech"; - - revision "2023-11-27" { - description - "Added alternate-id"; - } - - revision "2023-08-23" { - description - "Added module-set-tag"; - } - - revision "2022-05-10" { - description - "Added data-sync-enabled, sync-state with state, last-sync-time, data-store-sync-state with operational and running syncstate"; - } - - revision "2022-02-10" { - description - "Added state, lock-reason, lock-reason-details to aid with cmHandle sync and timestamp to aid with retry/timeout scenarios"; - } - - revision "2021-12-13" { - description - "Added new list of public-properties and additional-properties for a Cm-Handle which are exposed to clients of the NCMP interface"; - } - - revision "2021-10-20" { - description - "Added dmi-data-service-name & dmi-model-service-name to allow separate DMI instances for each responsibility"; - } - - revision "2021-05-20" { - description - "Initial Version"; - } - - grouping LockReason { - leaf reason { - type string; - } - leaf details { - type string; - } - } - - grouping SyncState { - leaf sync-state { - type string; - } - leaf last-sync-time { - type string; - } - } - - grouping Datastores { - container operational { - uses SyncState; - } - container running { - uses SyncState; - } - } - - container dmi-registry { - list cm-handles { - key "id"; - leaf id { - type string; - } - leaf dmi-service-name { - type string; - } - leaf dmi-data-service-name { - type string; - } - leaf dmi-model-service-name { - type string; - } - leaf module-set-tag { - type string; - } - leaf alternate-id { - type string; - } - - list additional-properties { - key "name"; - leaf name { - type string; - } - leaf value { - type string; - } - } - - list public-properties { - key "name"; - leaf name { - type string; - } - leaf value { - type string; - } - } - - container state { - leaf cm-handle-state { - type string; - } - - container lock-reason { - uses LockReason; - } - - leaf last-update-time { - type string; - } - - leaf data-sync-enabled { - type boolean; - default "false"; - } - - container datastores { - uses Datastores; - } - } - } - } -} - diff --git a/cps-ncmp-service/src/main/resources/models/dmi-registry@2024-02-23.yang b/cps-ncmp-service/src/main/resources/models/dmi-registry@2024-02-23.yang new file mode 100644 index 000000000..8daf82f33 --- /dev/null +++ b/cps-ncmp-service/src/main/resources/models/dmi-registry@2024-02-23.yang @@ -0,0 +1,148 @@ +module dmi-registry { + + yang-version 1.1; + + namespace "org:onap:cps:ncmp"; + + prefix dmi-reg; + + contact "toine.siebelink@est.tech"; + + revision "2024-02-23" { + description + "Added data-producer-identifier"; + } + + revision "2023-11-27" { + description + "Added alternate-id"; + } + + revision "2023-08-23" { + description + "Added module-set-tag"; + } + + revision "2022-05-10" { + description + "Added data-sync-enabled, sync-state with state, last-sync-time, data-store-sync-state with operational and running syncstate"; + } + + revision "2022-02-10" { + description + "Added state, lock-reason, lock-reason-details to aid with cmHandle sync and timestamp to aid with retry/timeout scenarios"; + } + + revision "2021-12-13" { + description + "Added new list of public-properties and additional-properties for a Cm-Handle which are exposed to clients of the NCMP interface"; + } + + revision "2021-10-20" { + description + "Added dmi-data-service-name & dmi-model-service-name to allow separate DMI instances for each responsibility"; + } + + revision "2021-05-20" { + description + "Initial Version"; + } + + grouping LockReason { + leaf reason { + type string; + } + leaf details { + type string; + } + } + + grouping SyncState { + leaf sync-state { + type string; + } + leaf last-sync-time { + type string; + } + } + + grouping Datastores { + container operational { + uses SyncState; + } + container running { + uses SyncState; + } + } + + container dmi-registry { + list cm-handles { + key "id"; + leaf id { + type string; + } + leaf dmi-service-name { + type string; + } + leaf dmi-data-service-name { + type string; + } + leaf dmi-model-service-name { + type string; + } + leaf module-set-tag { + type string; + } + leaf alternate-id { + type string; + } + leaf data-producer-identifier { + type string; + } + + list additional-properties { + key "name"; + leaf name { + type string; + } + leaf value { + type string; + } + } + + list public-properties { + key "name"; + leaf name { + type string; + } + leaf value { + type string; + } + } + + container state { + leaf cm-handle-state { + type string; + } + + container lock-reason { + uses LockReason; + } + + leaf last-update-time { + type string; + } + + leaf data-sync-enabled { + type boolean; + default "false"; + } + + container datastores { + uses Datastores; + } + } + } + } +} + diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServicePropertyHandlerSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServicePropertyHandlerSpec.groovy index cbed4177b..260772714 100644 --- a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServicePropertyHandlerSpec.groovy +++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServicePropertyHandlerSpec.groovy @@ -22,6 +22,10 @@ package org.onap.cps.ncmp.api.impl +import ch.qos.logback.classic.Level +import ch.qos.logback.classic.Logger +import ch.qos.logback.classic.spi.ILoggingEvent +import ch.qos.logback.core.read.ListAppender import com.fasterxml.jackson.databind.ObjectMapper import org.onap.cps.api.CpsDataService import org.onap.cps.ncmp.api.impl.inventory.InventoryPersistence @@ -32,6 +36,7 @@ import org.onap.cps.spi.exceptions.DataValidationException import org.onap.cps.spi.model.DataNode import org.onap.cps.spi.model.DataNodeBuilder import org.onap.cps.utils.JsonObjectMapper +import org.slf4j.LoggerFactory import spock.lang.Specification import static org.onap.cps.ncmp.api.NcmpResponseStatus.CM_HANDLES_NOT_FOUND @@ -49,12 +54,21 @@ class NetworkCmProxyDataServicePropertyHandlerSpec extends Specification { def mockAlternateIdChecker = Mock(AlternateIdChecker) def objectUnderTest = new NetworkCmProxyDataServicePropertyHandler(mockInventoryPersistence, mockCpsDataService, jsonObjectMapper, mockAlternateIdChecker) + def logger = Spy(ListAppender) - def setup() { + void setup() { + def setupLogger = ((Logger) LoggerFactory.getLogger(NetworkCmProxyDataServicePropertyHandler.class)) + setupLogger.addAppender(logger) + setupLogger.setLevel(Level.DEBUG) + logger.start() // Always accept all alternate IDs mockAlternateIdChecker.getIdsOfCmHandlesWithRejectedAlternateId(*_) >> [] } + void cleanup() { + ((Logger) LoggerFactory.getLogger(NetworkCmProxyDataServicePropertyHandler.class)).detachAndStopAllAppenders() + } + def static cmHandleId = 'myHandle1' def static cmHandleXpath = "/dmi-registry/cm-handles[@id='${cmHandleId}']" @@ -223,6 +237,42 @@ class NetworkCmProxyDataServicePropertyHandlerSpec extends Specification { assert response[0].cmHandle == cmHandleId } + def 'Update CM Handle data producer identifier from #scenario'() { + given: 'an existing cm handle with no data producer identifier' + DataNode existingCmHandleDataNode = new DataNode(xpath: cmHandleXpath, leaves: ['id': 'cmHandleId','data-producer-identifier': oldDataProducerIdentifier]) + and: 'an update request with a new data producer identifier' + def ncmpServiceCmHandle = new NcmpServiceCmHandle(cmHandleId: cmHandleId, dataProducerIdentifier: 'someDataProducerIdentifier') + when: 'data producer identifier updated' + objectUnderTest.updateDataProducerIdentifier(existingCmHandleDataNode, ncmpServiceCmHandle) + then: 'the update node leaves method is invoked once' + 1 * mockCpsDataService.updateNodeLeaves('NCMP-Admin', 'ncmp-dmi-registry', '/dmi-registry', _, _) >> { args -> + assert args[3].contains('someDataProducerIdentifier') + } + and: 'correct information is logged' + def lastLoggingEvent = logger.list[0] + assert lastLoggingEvent.level == Level.DEBUG + assert lastLoggingEvent.formattedMessage.contains('Updating data-producer-identifier') + where: 'the following scenarios are attempted' + scenario | oldDataProducerIdentifier + 'null to something' | null + 'blank to something' | '' + } + + def 'Update CM Handle data producer identifier from some data producer identifier to another data producer identifier'() { + given: 'an existing cm handle with a data producer identifier' + DataNode existingCmHandleDataNode = new DataNode(xpath: cmHandleXpath, leaves: ['id': 'cmHandleId', 'data-producer-identifier': 'someDataProducerIdentifier']) + and: 'an update request with a new data producer identifier' + def ncmpServiceCmHandle = new NcmpServiceCmHandle(cmHandleId: cmHandleId, dataProducerIdentifier: 'someNewDataProducerIdentifier') + when: 'update data producer identifier is called with the update request' + objectUnderTest.updateDataProducerIdentifier(existingCmHandleDataNode, ncmpServiceCmHandle) + then: 'the update node leaves method is not invoked' + 0 * mockCpsDataService.updateNodeLeaves(*_) + and: 'correct information is logged' + def lastLoggingEvent = logger.list[0] + assert lastLoggingEvent.level == Level.WARN + assert lastLoggingEvent.formattedMessage.contains('Unable to update dataProducerIdentifier') + } + def convertToProperties(expectedPropertiesAfterUpdateAsMap) { def properties = [].withDefault { [:] } expectedPropertiesAfterUpdateAsMap.forEach(property -> diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/inventory/sync/ModuleSyncServiceSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/inventory/sync/ModuleSyncServiceSpec.groovy index 0c60e8877..cb933fafb 100644 --- a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/inventory/sync/ModuleSyncServiceSpec.groovy +++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/inventory/sync/ModuleSyncServiceSpec.groovy @@ -64,7 +64,7 @@ class ModuleSyncServiceSpec extends Specification { def ncmpServiceCmHandle = new NcmpServiceCmHandle() ncmpServiceCmHandle.setCompositeState(new CompositeStateBuilder().withCmHandleState(CmHandleState.ADVISED).build()) ncmpServiceCmHandle.cmHandleId = 'ch-1' - def yangModelCmHandle = YangModelCmHandle.toYangModelCmHandle('some service name', '', '', ncmpServiceCmHandle, moduleSetTag, '') + def yangModelCmHandle = YangModelCmHandle.toYangModelCmHandle('some service name', '', '', ncmpServiceCmHandle, moduleSetTag, '', '') and: 'DMI operations returns some module references' def moduleReferences = [ new ModuleReference('module1','1'), new ModuleReference('module2','2') ] mockDmiModelOperations.getModuleReferences(yangModelCmHandle) >> moduleReferences @@ -93,7 +93,7 @@ class ModuleSyncServiceSpec extends Specification { ncmpServiceCmHandle.setCompositeState(new CompositeStateBuilder().withLockReason(MODULE_UPGRADE, 'Upgrade to ModuleSetTag: tag-1').build()) def dmiServiceName = 'some service name' ncmpServiceCmHandle.cmHandleId = 'upgraded-ch' - def yangModelCmHandle = YangModelCmHandle.toYangModelCmHandle(dmiServiceName, '', '', ncmpServiceCmHandle,'tag-1', '') + def yangModelCmHandle = YangModelCmHandle.toYangModelCmHandle(dmiServiceName, '', '', ncmpServiceCmHandle,'tag-1', '', '') and: 'some module references' def moduleReferences = [ new ModuleReference('module1','1') ] and: 'DMI operations returns some module references for upgraded cm handle' @@ -127,7 +127,7 @@ class ModuleSyncServiceSpec extends Specification { ncmpServiceCmHandle.setCompositeState(new CompositeStateBuilder() .withLockReason(MODULE_UPGRADE, 'Upgrade to ModuleSetTag: targetModuleSetTag').build()) ncmpServiceCmHandle.setCmHandleId('cmHandleId-1') - def yangModelCmHandle = YangModelCmHandle.toYangModelCmHandle('some service name', '', '', ncmpServiceCmHandle, 'targetModuleSetTag', '') + def yangModelCmHandle = YangModelCmHandle.toYangModelCmHandle('some service name', '', '', ncmpServiceCmHandle, 'targetModuleSetTag', '', '') mockCmHandleQueries.cmHandleHasState('cmHandleId-1', CmHandleState.READY) >> true and: 'the module service returns some module references' def moduleReferences = [new ModuleReference('module1', '1'), new ModuleReference('module2', '2')] diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/utils/DmiServiceUrlBuilderSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/utils/DmiServiceUrlBuilderSpec.groovy index c83a540a3..fbf2c3d78 100644 --- a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/utils/DmiServiceUrlBuilderSpec.groovy +++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/utils/DmiServiceUrlBuilderSpec.groovy @@ -1,6 +1,6 @@ /* * ============LICENSE_START======================================================= - * Copyright (C) 2022-2023 Nordix Foundation + * Copyright (C) 2022-2024 Nordix Foundation * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -32,7 +32,7 @@ import spock.lang.Specification class DmiServiceUrlBuilderSpec extends Specification { static YangModelCmHandle yangModelCmHandle = YangModelCmHandle.toYangModelCmHandle('dmiServiceName', - 'dmiDataServiceName', 'dmiModuleServiceName', new NcmpServiceCmHandle(cmHandleId: 'some-cm-handle-id'),'my-module-set-tag', 'my-alternate-id') + 'dmiDataServiceName', 'dmiModuleServiceName', new NcmpServiceCmHandle(cmHandleId: 'some-cm-handle-id'),'my-module-set-tag', 'my-alternate-id', 'my-data-producer-identifier') NcmpConfiguration.DmiProperties dmiProperties = new NcmpConfiguration.DmiProperties() diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/yangmodels/YangModelCmHandleSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/yangmodels/YangModelCmHandleSpec.groovy index 493db8c16..cfc6ffda1 100644 --- a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/yangmodels/YangModelCmHandleSpec.groovy +++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/yangmodels/YangModelCmHandleSpec.groovy @@ -1,6 +1,6 @@ /* * ============LICENSE_START======================================================= - * Copyright (C) 2021-2023 Nordix Foundation + * Copyright (C) 2021-2024 Nordix Foundation * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -47,12 +47,13 @@ class YangModelCmHandleSpec extends Specification { .withOperationalDataStores(DataStoreSyncState.SYNCHRONIZED, 'some-sync-time').build() ncmpServiceCmHandle.setCompositeState(compositeState) when: 'it is converted to a yang model cm handle' - def objectUnderTest = YangModelCmHandle.toYangModelCmHandle('', '', '', ncmpServiceCmHandle,'my-module-set-tag', 'my-alternate-id') + def objectUnderTest = YangModelCmHandle.toYangModelCmHandle('', '', '', ncmpServiceCmHandle,'my-module-set-tag', 'my-alternate-id', 'my-data-producer-identifier') then: 'the result has the right size' assert objectUnderTest.dmiProperties.size() == 1 - and: 'the result has the correct values for module set tag and alternate ID' + and: 'the result has the correct values for module set tag, alternate ID, and data producer identifier' assert objectUnderTest.moduleSetTag == 'my-module-set-tag' assert objectUnderTest.alternateId == 'my-alternate-id' + assert objectUnderTest.dataProducerIdentifier == 'my-data-producer-identifier' and: 'the DMI property in the result has the correct name and value' assert objectUnderTest.dmiProperties[0].name == 'myDmiProperty' assert objectUnderTest.dmiProperties[0].value == 'value1' @@ -67,7 +68,7 @@ class YangModelCmHandleSpec extends Specification { def 'Resolve DMI service name: #scenario and #requiredService service require.'() { given: 'a yang model cm handle' def objectUnderTest = YangModelCmHandle.toYangModelCmHandle(dmiServiceName, dmiDataServiceName, - dmiModelServiceName, new NcmpServiceCmHandle(cmHandleId: 'cm-handle-id-1'),'', '') + dmiModelServiceName, new NcmpServiceCmHandle(cmHandleId: 'cm-handle-id-1'),'', '', '') expect: assert objectUnderTest.resolveDmiServiceName(requiredService) == expectedService where: diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/init/InventoryModelLoaderSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/init/InventoryModelLoaderSpec.groovy index a36532761..cd659bb52 100644 --- a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/init/InventoryModelLoaderSpec.groovy +++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/init/InventoryModelLoaderSpec.groovy @@ -52,7 +52,7 @@ class InventoryModelLoaderSpec extends Specification { def loggingListAppender void setup() { - expectedYangResourceToContentMap = objectUnderTest.createYangResourcesToContentMap('dmi-registry@2023-11-27.yang') + expectedYangResourceToContentMap = objectUnderTest.createYangResourcesToContentMap('dmi-registry@2024-02-23.yang') logger.setLevel(Level.DEBUG) loggingListAppender = new ListAppender() logger.addAppender(loggingListAppender) @@ -71,9 +71,9 @@ class InventoryModelLoaderSpec extends Specification { when: 'the application is ready' objectUnderTest.onApplicationEvent(Mock(ApplicationReadyEvent)) then: 'the module service is used to create the new schema set from the correct resource' - 1 * mockCpsModuleService.createSchemaSet(NCMP_DATASPACE_NAME, 'dmi-registry-2023-11-27', expectedYangResourceToContentMap) + 1 * mockCpsModuleService.createSchemaSet(NCMP_DATASPACE_NAME, 'dmi-registry-2024-02-23', expectedYangResourceToContentMap) and: 'the admin service is used to update the anchor' - 1 * mockCpsAnchorService.updateAnchorSchemaSet(NCMP_DATASPACE_NAME, NCMP_DMI_REGISTRY_ANCHOR, 'dmi-registry-2023-11-27') + 1 * mockCpsAnchorService.updateAnchorSchemaSet(NCMP_DATASPACE_NAME, NCMP_DMI_REGISTRY_ANCHOR, 'dmi-registry-2024-02-23') and: 'No schema sets are being removed by the module service (yet)' 0 * mockCpsModuleService.deleteSchemaSet(NCMP_DATASPACE_NAME, _, _) } -- cgit 1.2.3-korg