diff options
Diffstat (limited to 'cps-ncmp-service/src/test/groovy/org/onap')
3 files changed, 147 insertions, 3 deletions
diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/config/embeddedcache/CmNotificationSubscriptionCacheConfigSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/config/embeddedcache/CmNotificationSubscriptionCacheConfigSpec.groovy index 86273bbd2e..e65011f715 100644 --- a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/config/embeddedcache/CmNotificationSubscriptionCacheConfigSpec.groovy +++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/config/embeddedcache/CmNotificationSubscriptionCacheConfigSpec.groovy @@ -50,7 +50,7 @@ class CmNotificationSubscriptionCacheConfigSpec extends Specification { def subscriptionId = 'sub123' def dmiPluginName = 'dummydmi' def cmSubscriptionPredicate = new DmiCmNotificationSubscriptionPredicate(['cmhandle1', 'cmhandle2'].toSet(), DatastoreType.PASSTHROUGH_RUNNING, ['/a/b/c'].toSet()) - def cmSubscriptionCacheObject = new DmiCmNotificationSubscriptionDetails(dmiCmNotificationSubscriptionPredicates: [cmSubscriptionPredicate], cmNotificationSubscriptionStatus: CmNotificationSubscriptionStatus.PENDING) + def cmSubscriptionCacheObject = new DmiCmNotificationSubscriptionDetails([cmSubscriptionPredicate], CmNotificationSubscriptionStatus.PENDING) when: 'the cache is populated' cmNotificationSubscriptionCache.put(subscriptionId, [(dmiPluginName): cmSubscriptionCacheObject]) then: 'the values are present in memory' diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/events/cmsubscription/CmNotificationSubscriptionNcmpInEventConsumerSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/events/cmsubscription/CmNotificationSubscriptionNcmpInEventConsumerSpec.groovy index 1074229489..614cf67298 100644 --- a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/events/cmsubscription/CmNotificationSubscriptionNcmpInEventConsumerSpec.groovy +++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/events/cmsubscription/CmNotificationSubscriptionNcmpInEventConsumerSpec.groovy @@ -39,7 +39,8 @@ import org.springframework.boot.test.context.SpringBootTest @SpringBootTest(classes = [ObjectMapper, JsonObjectMapper]) class CmNotificationSubscriptionNcmpInEventConsumerSpec extends MessagingBaseSpec { - def objectUnderTest = new CmNotificationSubscriptionNcmpInEventConsumer() + def mockDmiCmNotificationSubscriptionCacheHandler = Mock(DmiCmNotificationSubscriptionCacheHandler) + def objectUnderTest = new CmNotificationSubscriptionNcmpInEventConsumer(mockDmiCmNotificationSubscriptionCacheHandler) def logger = Spy(ListAppender<ILoggingEvent>) @Autowired @@ -60,7 +61,7 @@ class CmNotificationSubscriptionNcmpInEventConsumerSpec extends MessagingBaseSpe def 'Consume valid CMSubscription create message'() { given: 'a cmsubscription event' - def jsonData = TestUtils.getResourceFileContent('cmSubscription/cmSubscriptionNcmpInEvent.json') + def jsonData = TestUtils.getResourceFileContent('cmSubscription/cmNotificationSubscriptionNcmpInEvent.json') def testEventSent = jsonObjectMapper.convertJsonString(jsonData, CmNotificationSubscriptionNcmpInEvent.class) def testCloudEventSent = CloudEventBuilder.v1() .withData(objectMapper.writeValueAsBytes(testEventSent)) @@ -78,6 +79,8 @@ class CmNotificationSubscriptionNcmpInEventConsumerSpec extends MessagingBaseSpe assert loggingEvent.level == Level.INFO and: 'the log indicates the task completed successfully' assert loggingEvent.formattedMessage == 'Subscription with name cm-subscription-001 to be mapped to hazelcast object...' + and: 'the cache handler method is called once' + 1 * mockDmiCmNotificationSubscriptionCacheHandler.add('cm-subscription-001',_) } def getLoggingEvent() { diff --git a/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/events/cmsubscription/DmiCmNotificationSubscriptionCacheHandlerSpec.groovy b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/events/cmsubscription/DmiCmNotificationSubscriptionCacheHandlerSpec.groovy new file mode 100644 index 0000000000..132c4bc4a7 --- /dev/null +++ b/cps-ncmp-service/src/test/groovy/org/onap/cps/ncmp/api/impl/events/cmsubscription/DmiCmNotificationSubscriptionCacheHandlerSpec.groovy @@ -0,0 +1,141 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an 'AS IS' BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.cps.ncmp.api.impl.events.cmsubscription + +import com.fasterxml.jackson.databind.ObjectMapper +import io.cloudevents.CloudEvent +import io.cloudevents.core.builder.CloudEventBuilder +import org.apache.kafka.clients.consumer.ConsumerRecord +import org.onap.cps.ncmp.api.impl.inventory.InventoryPersistence +import org.onap.cps.ncmp.api.impl.yangmodels.YangModelCmHandle +import org.onap.cps.ncmp.api.kafka.MessagingBaseSpec +import org.onap.cps.ncmp.events.cmnotificationsubscription_merge1_0_0.client_to_ncmp.CmNotificationSubscriptionNcmpInEvent +import org.onap.cps.ncmp.utils.TestUtils +import org.onap.cps.utils.JsonObjectMapper +import org.spockframework.spring.SpringBean +import org.springframework.beans.factory.annotation.Autowired +import org.springframework.boot.test.context.SpringBootTest + +import static org.onap.cps.ncmp.api.impl.events.mapper.CloudEventMapper.toTargetEvent + +@SpringBootTest(classes = [ObjectMapper, JsonObjectMapper]) +class DmiCmNotificationSubscriptionCacheHandlerSpec extends MessagingBaseSpec { + + @Autowired + JsonObjectMapper jsonObjectMapper + @Autowired + ObjectMapper objectMapper + @SpringBean + InventoryPersistence mockInventoryPersistence = Mock(InventoryPersistence) + + def testCache = [:] + def objectUnderTest = new DmiCmNotificationSubscriptionCacheHandler(testCache, mockInventoryPersistence) + + CmNotificationSubscriptionNcmpInEvent cmNotificationSubscriptionNcmpInEvent + def yangModelCmHandle1 = new YangModelCmHandle(id:'ch1',dmiServiceName:'dmi-1') + def yangModelCmHandle2 = new YangModelCmHandle(id:'ch2',dmiServiceName:'dmi-2') + def yangModelCmHandle3 = new YangModelCmHandle(id:'ch3',dmiServiceName:'dmi-1') + def yangModelCmHandle4 = new YangModelCmHandle(id:'ch4',dmiServiceName:'dmi-2') + + def setup() { + setUpTestEvent() + initialiseMockInventoryPersistenceResponses() + } + + def 'Load CM subscription event to cache'() { + given: 'a valid subscription event with Id' + def subscriptionId = cmNotificationSubscriptionNcmpInEvent.getData().getSubscriptionId(); + and: 'list of predicates' + def predicates = cmNotificationSubscriptionNcmpInEvent.getData().getPredicates(); + when: 'a valid event object loaded in cache' + objectUnderTest.add(subscriptionId, predicates) + then: 'the cache contains the correct entry with #subscriptionId subscription ID' + assert testCache.containsKey(subscriptionId) + } + + def 'Create map for DMI cm notification subscription per DMI service name'() { + given: 'list of predicates from the create subscription event' + def predicates = cmNotificationSubscriptionNcmpInEvent.getData().getPredicates() + when: 'method to create map of DMI cm notification subscription per DMI service name is called' + def result = objectUnderTest.createDmiCmNotificationSubscriptionsPerDmi(predicates) + then: 'the result size of resulting map is correct to the number of DMIs' + assert result.size() == 2 + and: 'the cache objects per DMI exists' + def resultMapForDmi1 = result.get('dmi-1') + def resultMapForDmi2 = result.get('dmi-2') + assert resultMapForDmi1 != null + assert resultMapForDmi2 != null + and: 'the size of predicates in each object is correct' + assert resultMapForDmi1.dmiCmNotificationSubscriptionPredicates.size() == 2 + assert resultMapForDmi2.dmiCmNotificationSubscriptionPredicates.size() == 2 + and: 'the subscription status in each object is correct' + assert resultMapForDmi1.cmNotificationSubscriptionStatus.toString() == 'PENDING' + assert resultMapForDmi2.cmNotificationSubscriptionStatus.toString() == 'PENDING' + and: 'the target cmHandles for each predicate is correct' + assert resultMapForDmi1.dmiCmNotificationSubscriptionPredicates[0].targetCmHandleIds == ['ch1'].toSet() + assert resultMapForDmi1.dmiCmNotificationSubscriptionPredicates[1].targetCmHandleIds == ['ch3'].toSet() + + assert resultMapForDmi2.dmiCmNotificationSubscriptionPredicates[0].targetCmHandleIds == ['ch2'].toSet() + assert resultMapForDmi2.dmiCmNotificationSubscriptionPredicates[1].targetCmHandleIds == ['ch4'].toSet() + and: 'the list of xpath for each is correct' + assert resultMapForDmi1.dmiCmNotificationSubscriptionPredicates[0].xpaths + && resultMapForDmi2.dmiCmNotificationSubscriptionPredicates[0].xpaths == ['/x1/y1','x2/y2'].toSet() + + assert resultMapForDmi1.dmiCmNotificationSubscriptionPredicates[1].xpaths + && resultMapForDmi2.dmiCmNotificationSubscriptionPredicates[1].xpaths == ['/x3/y3','x4/y4'].toSet() + } + + def 'Get map for cm handle IDs by DMI service name'() { + given: 'the predicate from the test request CM subscription event' + def targetFilter = cmNotificationSubscriptionNcmpInEvent.getData().getPredicates().get(0).getTargetFilter() + when: 'the method to group all target CM handles by DMI service name is called' + def mapOfCMHandleIDsByDmi = objectUnderTest.groupTargetCmHandleIdsByDmi(targetFilter) + then: 'the size of the resulting map is correct' + assert mapOfCMHandleIDsByDmi.size() == 2 + and: 'the values in the map is as expected' + assert mapOfCMHandleIDsByDmi.get('dmi-1') == ['ch1'].toSet() + assert mapOfCMHandleIDsByDmi.get('dmi-2') == ['ch2'].toSet() + } + + def setUpTestEvent(){ + def jsonData = TestUtils.getResourceFileContent('cmSubscription/cmNotificationSubscriptionNcmpInEvent.json') + def testEventSent = jsonObjectMapper.convertJsonString(jsonData, CmNotificationSubscriptionNcmpInEvent.class) + def testCloudEventSent = CloudEventBuilder.v1() + .withData(objectMapper.writeValueAsBytes(testEventSent)) + .withId('subscriptionCreated') + .withType('subscriptionCreated') + .withSource(URI.create('some-resource')) + .withExtension('correlationid', 'test-cmhandle1').build() + def consumerRecord = new ConsumerRecord<String, CloudEvent>('topic-name', 0, 0, 'event-key', testCloudEventSent) + def cloudEvent = consumerRecord.value() + + cmNotificationSubscriptionNcmpInEvent = toTargetEvent(cloudEvent, CmNotificationSubscriptionNcmpInEvent.class); + } + + def initialiseMockInventoryPersistenceResponses(){ + mockInventoryPersistence.getYangModelCmHandles(['ch1','ch2']) + >> [yangModelCmHandle1, yangModelCmHandle2] + + mockInventoryPersistence.getYangModelCmHandles(['ch3','ch4']) + >> [yangModelCmHandle3, yangModelCmHandle4] + } + +}
\ No newline at end of file |