summaryrefslogtreecommitdiffstats
path: root/cps-ncmp-service/src/test
diff options
context:
space:
mode:
authorleventecsanyi <levente.csanyi@est.tech>2024-02-01 13:35:52 +0100
committerleventecsanyi <levente.csanyi@est.tech>2024-02-08 12:57:23 +0100
commit67681820f2a7fea88cbc6cbe5b3d483dae506d55 (patch)
tree8ef2ddab0f174fe7dbc50b36048cace95326dcfd /cps-ncmp-service/src/test
parent50a9e57cd4793a541ff8d2ec97a4fb7a7d62b934 (diff)
Introduce Hazelcast for alternateId-cmHandle relation pt. 2 - error collection
- added business logic to check duplicated ids (create and update scenarios) - added new unit test for CmHandleIdMapperSpec - added test for the new registration scenario Issue-ID: CPS-1988 Change-Id: I4bf2e25c87c57938d336f2fe70378b400bab07b0 Signed-off-by: leventecsanyi <levente.csanyi@est.tech>
Diffstat (limited to 'cps-ncmp-service/src/test')
-rw-r--r--cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServiceImplRegistrationSpec.groovy40
-rw-r--r--cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/NetworkCmProxyDataServicePropertyHandlerSpec.groovy19
-rw-r--r--cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/utils/CmHandleIdMapperSpec.groovy34
3 files changed, 70 insertions, 23 deletions
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 c7ac8ab8b6..faa2225459 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
@@ -21,31 +21,26 @@
package org.onap.cps.ncmp.api.impl
-import static org.onap.cps.ncmp.api.models.CmHandleRegistrationResponse.Status
-import static org.onap.cps.ncmp.api.NcmpResponseStatus.CM_HANDLES_NOT_FOUND
-import static org.onap.cps.ncmp.api.NcmpResponseStatus.CM_HANDLE_ALREADY_EXIST
-import static org.onap.cps.ncmp.api.NcmpResponseStatus.CM_HANDLE_INVALID_ID
-import static org.onap.cps.ncmp.api.NcmpResponseStatus.UNKNOWN_ERROR
-
-import org.onap.cps.ncmp.api.impl.trustlevel.TrustLevelManager
-import org.onap.cps.ncmp.api.impl.utils.CmHandleIdMapper
-import org.onap.cps.ncmp.api.models.UpgradedCmHandles
import com.fasterxml.jackson.databind.ObjectMapper
import com.hazelcast.map.IMap
import org.onap.cps.api.CpsDataService
import org.onap.cps.api.CpsModuleService
+import org.onap.cps.ncmp.api.NcmpResponseStatus
import org.onap.cps.ncmp.api.NetworkCmProxyCmHandleQueryService
import org.onap.cps.ncmp.api.impl.events.lcm.LcmEventsCmHandleStateHandler
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.trustlevel.TrustLevel
-import org.onap.cps.ncmp.api.impl.yangmodels.YangModelCmHandle
import org.onap.cps.ncmp.api.impl.inventory.CmHandleQueries
import org.onap.cps.ncmp.api.impl.inventory.CmHandleState
import org.onap.cps.ncmp.api.impl.inventory.InventoryPersistence
+import org.onap.cps.ncmp.api.impl.operations.DmiDataOperations
+import org.onap.cps.ncmp.api.impl.trustlevel.TrustLevel
+import org.onap.cps.ncmp.api.impl.trustlevel.TrustLevelManager
+import org.onap.cps.ncmp.api.impl.utils.CmHandleIdMapper
+import org.onap.cps.ncmp.api.impl.yangmodels.YangModelCmHandle
import org.onap.cps.ncmp.api.models.CmHandleRegistrationResponse
import org.onap.cps.ncmp.api.models.DmiPluginRegistration
import org.onap.cps.ncmp.api.models.NcmpServiceCmHandle
+import org.onap.cps.ncmp.api.models.UpgradedCmHandles
import org.onap.cps.spi.exceptions.AlreadyDefinedException
import org.onap.cps.spi.exceptions.DataNodeNotFoundException
import org.onap.cps.spi.exceptions.DataValidationException
@@ -53,6 +48,12 @@ import org.onap.cps.spi.exceptions.SchemaSetNotFoundException
import org.onap.cps.utils.JsonObjectMapper
import spock.lang.Specification
+import static org.onap.cps.ncmp.api.NcmpResponseStatus.CM_HANDLES_NOT_FOUND
+import static org.onap.cps.ncmp.api.NcmpResponseStatus.CM_HANDLE_ALREADY_EXIST
+import static org.onap.cps.ncmp.api.NcmpResponseStatus.CM_HANDLE_INVALID_ID
+import static org.onap.cps.ncmp.api.NcmpResponseStatus.UNKNOWN_ERROR
+import static org.onap.cps.ncmp.api.models.CmHandleRegistrationResponse.Status
+
class NetworkCmProxyDataServiceImplRegistrationSpec extends Specification {
def ncmpServiceCmHandle = new NcmpServiceCmHandle(cmHandleId: 'some-cm-handle-id')
@@ -441,6 +442,21 @@ class NetworkCmProxyDataServiceImplRegistrationSpec extends Specification {
1 * mockCmHandleIdMapper.addMapping('cmhandle1', 'my-alternate-id-1')
}
+ def 'Attempting to register a cmhandle with an already cached id.'() {
+ given: 'a registration of a cmhandle with an alternate id'
+ def dmiPluginRegistration = new DmiPluginRegistration(dmiPlugin: 'my-server')
+ dmiPluginRegistration.createdCmHandles = [new NcmpServiceCmHandle(cmHandleId: 'ch-1', alternateId: 'my alternate id')]
+ and: 'one of the ids are duplicated'
+ mockCmHandleIdMapper.isDuplicateId('ch-1', 'my alternate id') >> true
+ when: 'registration is attempted'
+ def response = objectUnderTest.updateDmiRegistrationAndSyncModule(dmiPluginRegistration)
+ then: 'a response is received'
+ assert response != null
+ and: 'the cmhandle has a failed state with the appropriate NCMP response status'
+ assert Status.FAILURE == response.createdCmHandles[0].status
+ assert NcmpResponseStatus.ALTERNATE_ID_ALREADY_ASSOCIATED == response.createdCmHandles[0].ncmpResponseStatus
+ }
+
def getObjectUnderTest() {
return Spy(new NetworkCmProxyDataServiceImpl(spiedJsonObjectMapper, mockDmiDataOperations,
mockNetworkCmProxyDataServicePropertyHandler, mockInventoryPersistence, mockCmHandleQueries,
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 f94c34c589..6ae62cfc2b 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
@@ -26,6 +26,7 @@ package org.onap.cps.ncmp.api.impl
import com.fasterxml.jackson.databind.ObjectMapper
import org.onap.cps.ncmp.api.impl.utils.CmHandleIdMapper
+import static org.onap.cps.ncmp.api.NcmpResponseStatus.ALTERNATE_ID_ALREADY_ASSOCIATED
import static org.onap.cps.ncmp.api.impl.ncmppersistence.NcmpPersistence.NCMP_DATASPACE_NAME
import static org.onap.cps.ncmp.api.impl.ncmppersistence.NcmpPersistence.NCMP_DMI_REGISTRY_ANCHOR
import static org.onap.cps.ncmp.api.NcmpResponseStatus.CM_HANDLES_NOT_FOUND
@@ -219,6 +220,24 @@ class NetworkCmProxyDataServicePropertyHandlerSpec extends Specification {
1 * mockCmHandleIdMapper.removeMapping(cmHandleId)
}
+ def 'Attempt to update a cmhandle with an already cached alternate id.'() {
+ given: 'cm handles request'
+ def cmHandleUpdateRequest = [new NcmpServiceCmHandle(cmHandleId: cmHandleId, alternateId: 'my alternate id')]
+ and: 'the id already added to the alternate id cache'
+ mockCmHandleIdMapper.isDuplicateId(cmHandleId, 'my alternate id') >> true
+ when: 'update data node leaves is called using correct parameters'
+ def response = objectUnderTest.updateCmHandleProperties(cmHandleUpdateRequest)
+ then: 'one failed registration response'
+ response.size() == 1
+ and: 'it has expected error details'
+ with(response.get(0)) {
+ assert it.status == Status.FAILURE
+ assert it.cmHandle == cmHandleId
+ assert it.ncmpResponseStatus == ALTERNATE_ID_ALREADY_ASSOCIATED
+ assert it.errorText.contains('cannot re-assign')
+ }
+ }
+
def convertToProperties(expectedPropertiesAfterUpdateAsMap) {
def properties = [].withDefault { [:] }
expectedPropertiesAfterUpdateAsMap.forEach(property ->
diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/utils/CmHandleIdMapperSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/utils/CmHandleIdMapperSpec.groovy
index 0a2962e98f..a625e3e464 100644
--- a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/utils/CmHandleIdMapperSpec.groovy
+++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/utils/CmHandleIdMapperSpec.groovy
@@ -43,7 +43,7 @@ class CmHandleIdMapperSpec extends Specification {
((Logger) LoggerFactory.getLogger(CmHandleIdMapper.class)).addAppender(logger)
logger.start()
mockCpsCmHandlerQueryService.getAllCmHandles() >> []
- assert objectUnderTest.addMapping('my cmhandle id', 'my alternate id')
+ assert objectUnderTest.addMapping('cached cmhandle id', 'cached alternate id')
}
void cleanup() {
@@ -52,9 +52,9 @@ class CmHandleIdMapperSpec extends Specification {
def 'Checking entries in the cache.'() {
expect: 'the alternate id can be converted to cmhandle id'
- assert objectUnderTest.alternateIdToCmHandleId('my alternate id') == 'my cmhandle id'
+ assert objectUnderTest.alternateIdToCmHandleId('cached alternate id') == 'cached cmhandle id'
and: 'the cmhandle id can be converted to alternate id'
- assert objectUnderTest.cmHandleIdToAlternateId('my cmhandle id') == 'my alternate id'
+ assert objectUnderTest.cmHandleIdToAlternateId('cached cmhandle id') == 'cached alternate id'
}
def 'Attempt adding #scenario alternate id.'() {
@@ -71,31 +71,31 @@ class CmHandleIdMapperSpec extends Specification {
def 'Remove an entry from the cache.'() {
when: 'removing an entry'
- objectUnderTest.removeMapping('my cmhandle id')
+ objectUnderTest.removeMapping('cached cmhandle id')
then: 'converting alternate id returns null'
- assert objectUnderTest.alternateIdToCmHandleId('my alternate id') == null
+ assert objectUnderTest.alternateIdToCmHandleId('cached alternate id') == null
and: 'converting cmhandle id returns null'
- assert objectUnderTest.cmHandleIdToAlternateId('my cmhandle id') == null
+ assert objectUnderTest.cmHandleIdToAlternateId('cached cmhandle id') == null
}
def 'Cannot update existing alternate id.'() {
given: 'attempt to update an existing alternate id'
- objectUnderTest.addMapping('my cmhandle id', 'other id')
+ objectUnderTest.addMapping('cached cmhandle id', 'other id')
expect: 'still returns the original alternate id'
- assert objectUnderTest.cmHandleIdToAlternateId('my cmhandle id') == 'my alternate id'
+ assert objectUnderTest.cmHandleIdToAlternateId('cached cmhandle id') == 'cached alternate id'
and: 'converting other alternate id returns null'
assert objectUnderTest.alternateIdToCmHandleId('other id') == null
and: 'a warning is logged with the original alternate id'
def lastLoggingEvent = logger.list[1]
assert lastLoggingEvent.level == Level.WARN
- assert lastLoggingEvent.formattedMessage.contains('my alternate id')
+ assert lastLoggingEvent.formattedMessage.contains('id was added to the cache already')
}
def 'Update existing alternate id with the same value.'() {
expect: 'update an existing alternate id with the same value returns false (no update)'
- assert objectUnderTest.addMapping('my cmhandle id', 'my alternate id') == false
+ assert objectUnderTest.addMapping('cached cmhandle id', 'cached alternate id') == false
and: 'conversion still returns the original alternate id'
- assert objectUnderTest.cmHandleIdToAlternateId('my cmhandle id') == 'my alternate id'
+ assert objectUnderTest.cmHandleIdToAlternateId('cached cmhandle id') == 'cached alternate id'
}
def 'Initializing cache #scenario.'() {
@@ -114,4 +114,16 @@ class CmHandleIdMapperSpec extends Specification {
'without alternate id' | [new NcmpServiceCmHandle(cmHandleId: 'ch-1')] || null | null
'with blank alternate id' | [new NcmpServiceCmHandle(cmHandleId: 'ch-1', alternateId: ' ')] || null | null
}
+
+ def 'Checking caches for duplicated values when: #scenario.'() {
+ expect: 'duplicate checks works as intended'
+ assert objectUnderTest.isDuplicateId(cmHandleId, alternateId) == expectDuplicate
+ where: 'the following values are given'
+ scenario | cmHandleId | alternateId || expectDuplicate
+ 'new cm handle' | 'new ch-1' | 'alt-1' || false
+ 'cm handle with already assigned other alternate id' | 'cached cmhandle id' | 'alt-1' || true
+ 'alternate id already assigned to other cm handle' | 'ch-1' | 'cached alternate id' || true
+ 'no alternate id provided' | 'ch-1' | null || false
+ 'cm handle with already assigned same alternate id' | 'ch-1' | 'alt-1' || false
+ }
} \ No newline at end of file