From: Javier Errea Date: Wed, 6 Apr 2022 13:32:30 +0000 (+0200) Subject: T-API notification JUnit test X-Git-Tag: 7.0.0~77 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=transportpce.git;a=commitdiff_plain;h=72726c942bab51f2d1081e83e2b9ac8aa6481122 T-API notification JUnit test JIRA: TRNSPRTPCE-649 Signed-off-by: errea Change-Id: Icc1bd2a4815e3d6df6ab8c22bcba2466d3b1ee49 --- diff --git a/nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/listener/NbiNotificationsListenerImpl.java b/nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/listener/NbiNotificationsListenerImpl.java index 797fca719..7450fa671 100644 --- a/nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/listener/NbiNotificationsListenerImpl.java +++ b/nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/listener/NbiNotificationsListenerImpl.java @@ -7,9 +7,9 @@ */ package org.opendaylight.transportpce.nbinotifications.listener; -import java.util.HashMap; import java.util.Map; import org.opendaylight.transportpce.nbinotifications.producer.Publisher; +import org.opendaylight.transportpce.nbinotifications.utils.NbiNotificationsUtils; import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NbiNotificationsListener; import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationAlarmService; import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationAlarmServiceBuilder; @@ -20,20 +20,6 @@ import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapi import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationAlarmService; import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessService; import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishTapiNotificationService; -import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.AdditionalInfo; -import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.AdditionalInfoBuilder; -import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.AdditionalInfoKey; -import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.AlarmInfoBuilder; -import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.ChangedAttributes; -import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.ChangedAttributesBuilder; -import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.ChangedAttributesKey; -import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.TargetObjectName; -import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.TargetObjectNameBuilder; -import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.TargetObjectNameKey; -import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.TcaInfoBuilder; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.Name; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameBuilder; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameKey; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -98,64 +84,8 @@ public class NbiNotificationsListenerImpl implements NbiNotificationsListener { return; } Publisher publisher = tapiPublisherMap.get(topic); - publisher.sendEvent(new NotificationTapiServiceBuilder(transformTapiNotification(notification)) - .build(), topic); - } - - private NotificationTapiService transformTapiNotification(PublishTapiNotificationService notification) { - Map addInfoMap = new HashMap<>(); - if (notification.getAdditionalInfo() != null) { - for (org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.AdditionalInfo - addInfo:notification.getAdditionalInfo().values()) { - AdditionalInfo transAddInfo = new AdditionalInfoBuilder(addInfo).build(); - addInfoMap.put(transAddInfo.key(), transAddInfo); - } - } - Map changedAttMap = new HashMap<>(); - if (notification.getChangedAttributes() != null) { - for (org.opendaylight.yang.gen.v1 - .urn.onf.otcc.yang.tapi.notification.rev181210.notification.ChangedAttributes - changedAtt:notification.getChangedAttributes().values()) { - ChangedAttributes transChangedAtt = new ChangedAttributesBuilder(changedAtt).build(); - changedAttMap.put(transChangedAtt.key(), transChangedAtt); - } - } - Map nameMap = new HashMap<>(); - if (notification.getName() != null) { - for (Name name:notification.getName().values()) { - Name transName = new NameBuilder(name).build(); - nameMap.put(transName.key(), transName); - } - } - Map targetObjNameMap = new HashMap<>(); - if (notification.getTargetObjectName() != null) { - for (org.opendaylight.yang.gen.v1 - .urn.onf.otcc.yang.tapi.notification.rev181210.notification.TargetObjectName - targetObjectName:notification.getTargetObjectName().values()) { - TargetObjectName transTargetObjName = new TargetObjectNameBuilder(targetObjectName).build(); - targetObjNameMap.put(transTargetObjName.key(), transTargetObjName); - } - } - LOG.info("Notification uuid = {}", notification.getUuid()); - return new NotificationTapiServiceBuilder() - .setAlarmInfo(notification.getAlarmInfo() == null ? null - : new AlarmInfoBuilder(notification.getAlarmInfo()).build()) - .setAdditionalText(notification.getAdditionalText()) - .setAdditionalInfo(addInfoMap) - .setNotificationType(notification.getNotificationType()) - .setChangedAttributes(changedAttMap) - .setEventTimeStamp(notification.getEventTimeStamp()) - .setLayerProtocolName(notification.getLayerProtocolName()) - .setName(nameMap) - .setSequenceNumber(notification.getSequenceNumber()) - .setSourceIndicator(notification.getSourceIndicator()) - .setTargetObjectIdentifier(notification.getTargetObjectIdentifier()) - .setTargetObjectName(targetObjNameMap) - .setTargetObjectType(notification.getTargetObjectType()) - .setTcaInfo(notification.getTcaInfo() == null ? null - : new TcaInfoBuilder(notification.getTcaInfo()).build()) - .setUuid(notification.getUuid()) - .build(); + publisher.sendEvent(new NotificationTapiServiceBuilder( + NbiNotificationsUtils.transformTapiNotification(notification)).build(), topic); } public void setPublishersServiceMap(Map> publishersServiceMap) { @@ -169,4 +99,8 @@ public class NbiNotificationsListenerImpl implements NbiNotificationsListener { public void setTapiPublishersMap(Map> tapiPublishersMap) { this.tapiPublisherMap = tapiPublishersMap; } + + public Publisher getTapiPublisherFromTopic(String topic) { + return this.tapiPublisherMap.get(topic); + } } diff --git a/nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/utils/NbiNotificationsUtils.java b/nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/utils/NbiNotificationsUtils.java index af097c35b..02007bab8 100644 --- a/nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/utils/NbiNotificationsUtils.java +++ b/nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/utils/NbiNotificationsUtils.java @@ -9,7 +9,26 @@ package org.opendaylight.transportpce.nbinotifications.utils; import java.io.IOException; import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; import java.util.Properties; +import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiService; +import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiServiceBuilder; +import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishTapiNotificationService; +import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.AdditionalInfo; +import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.AdditionalInfoBuilder; +import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.AdditionalInfoKey; +import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.AlarmInfoBuilder; +import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.ChangedAttributes; +import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.ChangedAttributesBuilder; +import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.ChangedAttributesKey; +import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.TargetObjectName; +import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.TargetObjectNameBuilder; +import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.TargetObjectNameKey; +import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.tapi.service.TcaInfoBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.Name; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameKey; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -34,4 +53,60 @@ public final class NbiNotificationsUtils { } return props; } + + public static NotificationTapiService transformTapiNotification(PublishTapiNotificationService notification) { + Map addInfoMap = new HashMap<>(); + if (notification.getAdditionalInfo() != null) { + for (org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.AdditionalInfo + addInfo:notification.getAdditionalInfo().values()) { + AdditionalInfo transAddInfo = new AdditionalInfoBuilder(addInfo).build(); + addInfoMap.put(transAddInfo.key(), transAddInfo); + } + } + Map changedAttMap = new HashMap<>(); + if (notification.getChangedAttributes() != null) { + for (org.opendaylight.yang.gen.v1 + .urn.onf.otcc.yang.tapi.notification.rev181210.notification.ChangedAttributes + changedAtt:notification.getChangedAttributes().values()) { + ChangedAttributes transChangedAtt = new ChangedAttributesBuilder(changedAtt).build(); + changedAttMap.put(transChangedAtt.key(), transChangedAtt); + } + } + Map nameMap = new HashMap<>(); + if (notification.getName() != null) { + for (Name name:notification.getName().values()) { + Name transName = new NameBuilder(name).build(); + nameMap.put(transName.key(), transName); + } + } + Map targetObjNameMap = new HashMap<>(); + if (notification.getTargetObjectName() != null) { + for (org.opendaylight.yang.gen.v1 + .urn.onf.otcc.yang.tapi.notification.rev181210.notification.TargetObjectName + targetObjectName:notification.getTargetObjectName().values()) { + TargetObjectName transTargetObjName = new TargetObjectNameBuilder(targetObjectName).build(); + targetObjNameMap.put(transTargetObjName.key(), transTargetObjName); + } + } + LOG.info("Notification uuid = {}", notification.getUuid()); + return new NotificationTapiServiceBuilder() + .setAlarmInfo(notification.getAlarmInfo() == null ? null + : new AlarmInfoBuilder(notification.getAlarmInfo()).build()) + .setAdditionalText(notification.getAdditionalText()) + .setAdditionalInfo(addInfoMap) + .setNotificationType(notification.getNotificationType()) + .setChangedAttributes(changedAttMap) + .setEventTimeStamp(notification.getEventTimeStamp()) + .setLayerProtocolName(notification.getLayerProtocolName()) + .setName(nameMap) + .setSequenceNumber(notification.getSequenceNumber()) + .setSourceIndicator(notification.getSourceIndicator()) + .setTargetObjectIdentifier(notification.getTargetObjectIdentifier()) + .setTargetObjectName(targetObjNameMap) + .setTargetObjectType(notification.getTargetObjectType()) + .setTcaInfo(notification.getTcaInfo() == null ? null + : new TcaInfoBuilder(notification.getTcaInfo()).build()) + .setUuid(notification.getUuid()) + .build(); + } } diff --git a/nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/consumer/SubscriberTest.java b/nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/consumer/SubscriberTest.java index c32142f23..326c4ecdd 100644 --- a/nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/consumer/SubscriberTest.java +++ b/nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/consumer/SubscriberTest.java @@ -24,23 +24,29 @@ import org.opendaylight.transportpce.nbinotifications.utils.NotificationServiceD import org.opendaylight.transportpce.test.AbstractTest; import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationAlarmService; import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessService; +import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiService; import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.get.notifications.alarm.service.output.NotificationsAlarmService; import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.get.notifications.process.service.output.NotificationsProcessService; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.get.notification.list.output.Notification; public class SubscriberTest extends AbstractTest { private static final String TOPIC = "topic"; private static final int PARTITION = 0; private MockConsumer mockConsumer; private MockConsumer mockConsumerAlarm; + private MockConsumer mockConsumerTapi; private Subscriber subscriberService; private Subscriber subscriberAlarmService; + private Subscriber subscriberTapiService; @Before public void setUp() { mockConsumer = new MockConsumer<>(OffsetResetStrategy.EARLIEST); mockConsumerAlarm = new MockConsumer<>(OffsetResetStrategy.EARLIEST); + mockConsumerTapi = new MockConsumer<>(OffsetResetStrategy.EARLIEST); subscriberService = new Subscriber<>(mockConsumer); subscriberAlarmService = new Subscriber<>(mockConsumerAlarm); + subscriberTapiService = new Subscriber<>(mockConsumerTapi); } @Test @@ -82,4 +88,24 @@ public class SubscriberTest extends AbstractTest { assertEquals("There should be 1 record", 1, result.size()); assertTrue("Consumer should be closed", mockConsumerAlarm.closed()); } + + @Test + public void subscribeTapiAlarmShouldBeSuccessful() { + // from https://www.baeldung.com/kafka-mockconsumer + ConsumerRecord record = new ConsumerRecord<>( + TOPIC, PARTITION, 0L, "key", NotificationServiceDataUtils.buildReceivedTapiAlarmEvent()); + mockConsumerTapi.schedulePollTask(() -> { + mockConsumerTapi.rebalance(Collections.singletonList(new TopicPartition(TOPIC, PARTITION))); + mockConsumerTapi.addRecord(record); + }); + + Map startOffsets = new HashMap<>(); + TopicPartition tp = new TopicPartition(TOPIC, PARTITION); + startOffsets.put(tp, 0L); + mockConsumerTapi.updateBeginningOffsets(startOffsets); + List result = subscriberTapiService.subscribe(TOPIC, + NotificationTapiService.QNAME); + assertEquals("There should be 1 record", 1, result.size()); + assertTrue("Consumer should be closed", mockConsumerTapi.closed()); + } } diff --git a/nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/impl/NbiNotificationsImplTest.java b/nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/impl/NbiNotificationsImplTest.java index 018c2d622..bc025c5d0 100644 --- a/nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/impl/NbiNotificationsImplTest.java +++ b/nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/impl/NbiNotificationsImplTest.java @@ -7,17 +7,18 @@ */ package org.opendaylight.transportpce.nbinotifications.impl; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import com.google.common.util.concurrent.ListenableFuture; import java.util.concurrent.ExecutionException; import org.junit.Before; import org.junit.Test; -import org.mockito.Mock; import org.opendaylight.transportpce.common.converter.JsonStringConverter; import org.opendaylight.transportpce.common.network.NetworkTransactionImpl; import org.opendaylight.transportpce.common.network.NetworkTransactionService; import org.opendaylight.transportpce.common.network.RequestProcessor; +import org.opendaylight.transportpce.nbinotifications.utils.NotificationServiceDataUtils; import org.opendaylight.transportpce.nbinotifications.utils.TopicManager; import org.opendaylight.transportpce.test.AbstractTest; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ConnectionType; @@ -28,17 +29,20 @@ import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.GetNotifications import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationAlarmService; import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessService; import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiService; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.CreateNotificationSubscriptionServiceInputBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.CreateNotificationSubscriptionServiceOutput; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.GetNotificationListInputBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.GetNotificationListOutput; import org.opendaylight.yangtools.yang.common.RpcResult; public class NbiNotificationsImplTest extends AbstractTest { private NbiNotificationsImpl nbiNotificationsImpl; public static NetworkTransactionService networkTransactionService; - - @Mock private TopicManager topicManager; @Before - public void setUp() { + public void setUp() throws ExecutionException, InterruptedException { + topicManager = TopicManager.getInstance(); networkTransactionService = new NetworkTransactionImpl( new RequestProcessor(getDataStoreContextUtil().getDataBroker())); JsonStringConverter converter = new JsonStringConverter<>( @@ -47,6 +51,8 @@ public class NbiNotificationsImplTest extends AbstractTest { getDataStoreContextUtil().getBindingDOMCodecServices()); JsonStringConverter converterTapi = new JsonStringConverter<>( getDataStoreContextUtil().getBindingDOMCodecServices()); + topicManager.setTapiConverter(converterTapi); + NotificationServiceDataUtils.createTapiContext(networkTransactionService); nbiNotificationsImpl = new NbiNotificationsImpl(converter, converterAlarm, converterTapi, "localhost:8080", networkTransactionService, topicManager); @@ -81,4 +87,28 @@ public class NbiNotificationsImplTest extends AbstractTest { nbiNotificationsImpl.getNotificationsAlarmService(builder.build()); assertNull("Should be null", result.get().getResult().getNotificationsAlarmService()); } + + @Test + public void createTapiNotificationSubscriptionServiceTest() throws InterruptedException, ExecutionException { + CreateNotificationSubscriptionServiceInputBuilder builder + = NotificationServiceDataUtils.buildNotificationSubscriptionServiceInputBuilder(); + ListenableFuture> result = + nbiNotificationsImpl.createNotificationSubscriptionService(builder.build()); + assertNotNull("Should receive UUID for subscription service", + result.get().getResult().getSubscriptionService().getUuid().toString()); + } + + @Test + public void getTapiNotificationsServiceTest() throws InterruptedException, ExecutionException { + CreateNotificationSubscriptionServiceInputBuilder builder + = NotificationServiceDataUtils.buildNotificationSubscriptionServiceInputBuilder(); + ListenableFuture> result = + nbiNotificationsImpl.createNotificationSubscriptionService(builder.build()); + GetNotificationListInputBuilder builder1 = new GetNotificationListInputBuilder() + .setTimePeriod("Time Period") + .setSubscriptionIdOrName(result.get().getResult().getSubscriptionService().getUuid().getValue()); + ListenableFuture> result1 = + nbiNotificationsImpl.getNotificationList(builder1.build()); + assertNull("Should be null", result1.get().getResult().getNotification()); + } } diff --git a/nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/listener/NbiNotificationsListenerImplTest.java b/nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/listener/NbiNotificationsListenerImplTest.java index 1743723e6..ced79a2cc 100644 --- a/nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/listener/NbiNotificationsListenerImplTest.java +++ b/nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/listener/NbiNotificationsListenerImplTest.java @@ -7,43 +7,53 @@ */ package org.opendaylight.transportpce.nbinotifications.listener; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -import java.util.HashMap; import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ExecutionException; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.opendaylight.transportpce.nbinotifications.producer.Publisher; +import org.opendaylight.transportpce.nbinotifications.utils.NotificationServiceDataUtils; import org.opendaylight.transportpce.test.AbstractTest; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ConnectionType; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State; import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationAlarmService; import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessService; +import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiService; import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationAlarmService; import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationAlarmServiceBuilder; import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessService; import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishNotificationProcessServiceBuilder; +import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishTapiNotificationService; +import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.PublishTapiNotificationServiceBuilder; public class NbiNotificationsListenerImplTest extends AbstractTest { @Mock private Publisher publisherService; @Mock private Publisher publisherAlarm; + @Mock + private Publisher publisherTapiService; @Before - public void setUp() { + public void setUp() throws ExecutionException, InterruptedException { MockitoAnnotations.openMocks(this); } @Test public void onPublishNotificationServiceTest() { NbiNotificationsListenerImpl listener = new NbiNotificationsListenerImpl(Map.of("test", publisherService), - Map.of("test", publisherAlarm), new HashMap<>()); + Map.of("test", publisherAlarm), Map.of("test", publisherTapiService)); PublishNotificationProcessService notification = new PublishNotificationProcessServiceBuilder() .setPublisherName("test") .setCommonId("commonId") @@ -59,7 +69,7 @@ public class NbiNotificationsListenerImplTest extends AbstractTest { @Test public void onPublishNotificationServiceWrongPublisherTest() { NbiNotificationsListenerImpl listener = new NbiNotificationsListenerImpl(Map.of("test", publisherService), - Map.of("test", publisherAlarm), new HashMap<>()); + Map.of("test", publisherAlarm), Map.of("test", publisherTapiService)); PublishNotificationProcessService notification = new PublishNotificationProcessServiceBuilder() .setPublisherName("wrongPublisher") .setCommonId("commonId") @@ -75,7 +85,7 @@ public class NbiNotificationsListenerImplTest extends AbstractTest { @Test public void onPublishNotificationAlarmServiceTest() { NbiNotificationsListenerImpl listener = new NbiNotificationsListenerImpl(Map.of("test", publisherService), - Map.of("test", publisherAlarm), new HashMap<>()); + Map.of("test", publisherAlarm), Map.of("test", publisherTapiService)); PublishNotificationAlarmService notification = new PublishNotificationAlarmServiceBuilder() .setPublisherName("test") .setConnectionType(ConnectionType.Service) @@ -90,7 +100,7 @@ public class NbiNotificationsListenerImplTest extends AbstractTest { @Test public void onPublishNotificationAlarmServiceWrongPublisherTest() { NbiNotificationsListenerImpl listener = new NbiNotificationsListenerImpl(Map.of("test", publisherService), - Map.of("test", publisherAlarm), new HashMap<>()); + Map.of("test", publisherAlarm), Map.of("test", publisherTapiService)); PublishNotificationAlarmService notification = new PublishNotificationAlarmServiceBuilder() .setPublisherName("wrongPublisher") .setConnectionType(ConnectionType.Service) @@ -101,4 +111,37 @@ public class NbiNotificationsListenerImplTest extends AbstractTest { listener.onPublishNotificationAlarmService(notification); verify(publisherAlarm, times(0)).sendEvent(any(), anyString()); } + + @Test + public void onPublishTapiNotificationServiceTest() throws ExecutionException, InterruptedException { + NbiNotificationsListenerImpl listener = new NbiNotificationsListenerImpl(Map.of("test", publisherService), + Map.of("test", publisherAlarm), Map.of("test", publisherTapiService)); + + PublishTapiNotificationService notification + = new PublishTapiNotificationServiceBuilder(NotificationServiceDataUtils.buildReceivedTapiAlarmEvent()) + .setTopic("test") + .build(); + listener.onPublishTapiNotificationService(notification); + verify(publisherTapiService, times(1)).sendEvent(any(), anyString()); + } + + @Test + public void onPublishTapiNotificationServiceTestWrongPublisherTest() { + NbiNotificationsListenerImpl listener = new NbiNotificationsListenerImpl(Map.of("test", publisherService), + Map.of("test", publisherAlarm), Map.of("test", publisherTapiService)); + PublishTapiNotificationService notification + = new PublishTapiNotificationServiceBuilder(NotificationServiceDataUtils.buildReceivedTapiAlarmEvent()) + .setTopic(UUID.randomUUID().toString()) + .build(); + listener.onPublishTapiNotificationService(notification); + verify(publisherTapiService, times(0)).sendEvent(any(), eq(notification.getTopic())); + } + + @Test + public void getTapiPublisherFromTopicTest() { + NbiNotificationsListenerImpl listener = new NbiNotificationsListenerImpl(Map.of("test", publisherService), + Map.of("test", publisherAlarm), Map.of("test", publisherTapiService)); + assertNull(listener.getTapiPublisherFromTopic("toto")); + assertEquals(publisherTapiService, listener.getTapiPublisherFromTopic("test")); + } } diff --git a/nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/producer/PublisherTest.java b/nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/producer/PublisherTest.java index 1d988fc0c..0e07aff23 100644 --- a/nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/producer/PublisherTest.java +++ b/nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/producer/PublisherTest.java @@ -9,46 +9,86 @@ package org.opendaylight.transportpce.nbinotifications.producer; import static org.junit.Assert.assertEquals; +import com.google.common.util.concurrent.ListenableFuture; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; +import java.util.HashSet; +import java.util.List; import java.util.Map; +import java.util.concurrent.ExecutionException; import org.apache.kafka.clients.producer.MockProducer; import org.apache.kafka.common.serialization.StringSerializer; import org.junit.Before; import org.junit.Test; +import org.mockito.MockitoAnnotations; import org.opendaylight.transportpce.common.converter.JsonStringConverter; +import org.opendaylight.transportpce.common.network.NetworkTransactionImpl; +import org.opendaylight.transportpce.common.network.NetworkTransactionService; +import org.opendaylight.transportpce.common.network.RequestProcessor; +import org.opendaylight.transportpce.nbinotifications.impl.NbiNotificationsImpl; import org.opendaylight.transportpce.nbinotifications.serialization.ConfigConstants; import org.opendaylight.transportpce.nbinotifications.serialization.NotificationAlarmServiceSerializer; import org.opendaylight.transportpce.nbinotifications.serialization.NotificationServiceSerializer; +import org.opendaylight.transportpce.nbinotifications.serialization.TapiNotificationSerializer; +import org.opendaylight.transportpce.nbinotifications.utils.NotificationServiceDataUtils; +import org.opendaylight.transportpce.nbinotifications.utils.TopicManager; import org.opendaylight.transportpce.test.AbstractTest; import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationAlarmService; import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationProcessService; +import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiService; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Uuid; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.CreateNotificationSubscriptionServiceInputBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.CreateNotificationSubscriptionServiceOutput; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.create.notification.subscription.service.input.SubscriptionFilter; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.create.notification.subscription.service.input.SubscriptionFilterBuilder; +import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier; public class PublisherTest extends AbstractTest { private JsonStringConverter converterService; private JsonStringConverter converterAlarm; + private JsonStringConverter converterTapiService; private Publisher publisherService; private Publisher publisherAlarm; + private Publisher publisherTapiService; private MockProducer mockProducer; private MockProducer mockAlarmProducer; + private MockProducer mockTapiProducer; + private NbiNotificationsImpl nbiNotificationsImpl; + private TopicManager topicManager; + + public static NetworkTransactionService networkTransactionService; @Before - public void setUp() { + public void setUp() throws ExecutionException, InterruptedException { + topicManager = TopicManager.getInstance(); converterService = new JsonStringConverter<>(getDataStoreContextUtil().getBindingDOMCodecServices()); converterAlarm = new JsonStringConverter<>(getDataStoreContextUtil().getBindingDOMCodecServices()); + converterTapiService = new JsonStringConverter<>(getDataStoreContextUtil().getBindingDOMCodecServices()); NotificationServiceSerializer serializerService = new NotificationServiceSerializer(); NotificationAlarmServiceSerializer serializerAlarm = new NotificationAlarmServiceSerializer(); + TapiNotificationSerializer serializerTapi = new TapiNotificationSerializer(); Map properties = Map.of(ConfigConstants.CONVERTER, converterService); Map propertiesAlarm = Map.of(ConfigConstants.CONVERTER, converterAlarm); + Map propertiesTapi = Map.of(ConfigConstants.CONVERTER, converterTapiService); serializerService.configure(properties, false); serializerAlarm.configure(propertiesAlarm, false); + serializerTapi.configure(propertiesTapi, false); mockProducer = new MockProducer<>(true, new StringSerializer(), serializerService); mockAlarmProducer = new MockProducer<>(true, new StringSerializer(), serializerAlarm); + mockTapiProducer = new MockProducer<>(true, new StringSerializer(), serializerTapi); publisherService = new Publisher<>("test", mockProducer); publisherAlarm = new Publisher<>("test", mockAlarmProducer); + publisherTapiService = new Publisher<>("test", mockTapiProducer); + MockitoAnnotations.openMocks(this); + networkTransactionService = new NetworkTransactionImpl( + new RequestProcessor(getDataStoreContextUtil().getDataBroker())); + topicManager.setTapiConverter(converterTapiService); + NotificationServiceDataUtils.createTapiContext(networkTransactionService); + nbiNotificationsImpl = new NbiNotificationsImpl(converterService, converterAlarm, converterTapiService, + "localhost:8080", networkTransactionService, topicManager); } @Test @@ -73,4 +113,23 @@ public class PublisherTest extends AbstractTest { assertEquals("We should have one message", 1, mockAlarmProducer.history().size()); assertEquals("Key should be test", "test", mockAlarmProducer.history().get(0).key()); } + + @Test + public void sendTapiEventShouldBeSuccessful() throws IOException { + CreateNotificationSubscriptionServiceInputBuilder builder + = NotificationServiceDataUtils.buildNotificationSubscriptionServiceInputBuilder(); + SubscriptionFilter subscriptionFilter = new SubscriptionFilterBuilder(builder.getSubscriptionFilter()) + .setRequestedObjectIdentifier(new HashSet<>(List.of(new Uuid("76d8f07b-ead5-4132-8eb8-cf3fdef7e079")))) + .build(); + builder.setSubscriptionFilter(subscriptionFilter); + ListenableFuture> result = + nbiNotificationsImpl.createNotificationSubscriptionService(builder.build()); + String json = Files.readString(Paths.get("src/test/resources/tapi_event.json")); + NotificationTapiService notificationTapiService = converterTapiService + .createDataObjectFromJsonString(YangInstanceIdentifier.of(NotificationTapiService.QNAME), + json, JSONCodecFactorySupplier.RFC7951); + publisherTapiService.sendEvent(notificationTapiService, ""); + assertEquals("We should have one message", 1, mockTapiProducer.history().size()); + assertEquals("Key should be test", "test", mockTapiProducer.history().get(0).key()); + } } diff --git a/nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/serialization/NotificationTapiServiceDeserializerTest.java b/nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/serialization/NotificationTapiServiceDeserializerTest.java new file mode 100644 index 000000000..e50231ed0 --- /dev/null +++ b/nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/serialization/NotificationTapiServiceDeserializerTest.java @@ -0,0 +1,37 @@ +/* + * Copyright © 2021 Nokia, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.transportpce.nbinotifications.serialization; + +import static org.junit.Assert.assertEquals; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.Map; +import org.junit.Test; +import org.opendaylight.transportpce.common.converter.JsonStringConverter; +import org.opendaylight.transportpce.test.AbstractTest; +import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiService; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.get.notification.list.output.Notification; + +public class NotificationTapiServiceDeserializerTest extends AbstractTest { + + @Test + public void deserializeTest() throws IOException { + JsonStringConverter converter = new JsonStringConverter<>( + getDataStoreContextUtil().getBindingDOMCodecServices()); + TapiNotificationDeserializer deserializer = new TapiNotificationDeserializer(); + Map configs = Map.of(ConfigConstants.CONVERTER, converter); + deserializer.configure(configs, false); + Notification readEvent = deserializer.deserialize("76d8f07b-ead5-4132-8eb8-cf3fdef7e079", + Files.readAllBytes(Paths.get("src/test/resources/tapi_event.json"))); + deserializer.close(); + assertEquals("Service uuid should be 76d8f07b-ead5-4132-8eb8-cf3fdef7e079", + "76d8f07b-ead5-4132-8eb8-cf3fdef7e079", readEvent.getTargetObjectIdentifier().getValue()); + } +} diff --git a/nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/serialization/NotificationTapiServiceSerializerTest.java b/nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/serialization/NotificationTapiServiceSerializerTest.java new file mode 100644 index 000000000..233b1a9ba --- /dev/null +++ b/nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/serialization/NotificationTapiServiceSerializerTest.java @@ -0,0 +1,48 @@ +/* + * Copyright © 2021 Nokia, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ +package org.opendaylight.transportpce.nbinotifications.serialization; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.Map; +import org.junit.Test; +import org.opendaylight.transportpce.common.converter.JsonStringConverter; +import org.opendaylight.transportpce.test.AbstractTest; +import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.NotificationTapiService; +import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier; +import org.opendaylight.yangtools.yang.data.codec.gson.JSONCodecFactorySupplier; + +public class NotificationTapiServiceSerializerTest extends AbstractTest { + + @Test + public void serializeTest() throws IOException { + JsonStringConverter converter = + new JsonStringConverter<>(getDataStoreContextUtil().getBindingDOMCodecServices()); + String json = Files.readString(Paths.get("src/test/resources/tapi_event.json")); + NotificationTapiService notificationService = converter + .createDataObjectFromJsonString(YangInstanceIdentifier.of(NotificationTapiService.QNAME), + json, JSONCodecFactorySupplier.RFC7951); + TapiNotificationSerializer serializer = new TapiNotificationSerializer(); + Map configs = Map.of(ConfigConstants.CONVERTER, converter); + serializer.configure(configs, false); + byte[] data = serializer.serialize("test", notificationService); + serializer.close(); + assertNotNull("Serialized data should not be null", data); + String expectedJson = Files.readString(Paths.get("src/test/resources/expected_tapi_event.json")); + // Minify the json string + expectedJson = new ObjectMapper().readValue(expectedJson, JsonNode.class).toString(); + assertEquals("The event should be equals", expectedJson, new String(data, StandardCharsets.UTF_8)); + } +} diff --git a/nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/utils/NotificationServiceDataUtils.java b/nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/utils/NotificationServiceDataUtils.java index ea8c5496a..195ef39fa 100644 --- a/nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/utils/NotificationServiceDataUtils.java +++ b/nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/utils/NotificationServiceDataUtils.java @@ -7,7 +7,18 @@ */ package org.opendaylight.transportpce.nbinotifications.utils; +import java.nio.charset.Charset; +import java.time.OffsetDateTime; +import java.time.ZoneOffset; +import java.time.format.DateTimeFormatter; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ExecutionException; +import org.opendaylight.mdsal.common.api.LogicalDatastoreType; +import org.opendaylight.transportpce.common.network.NetworkTransactionService; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.node.types.rev210528.NodeIdType; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.ConnectionType; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev211210.service.endpoint.RxDirection; @@ -28,11 +39,42 @@ import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.get.notification import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.get.notifications.process.service.output.NotificationsProcessServiceBuilder; import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceAEndBuilder; import org.opendaylight.yang.gen.v1.nbi.notifications.rev211013.notification.process.service.ServiceZEndBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.AdministrativeState; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Context; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.ContextBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.DateAndTime; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.LayerProtocolName; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.OperationalState; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Uuid; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.local._class.Name; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.local._class.NameBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.Context1; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.Context1Builder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.context.ConnectivityContextBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.CreateNotificationSubscriptionServiceInputBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.GetNotificationListInputBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.NotificationType; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.ObjectType; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.SubscriptionState; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.context.NotificationContextBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.create.notification.subscription.service.input.SubscriptionFilter; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.create.notification.subscription.service.input.SubscriptionFilterBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.get.notification.list.output.Notification; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.get.notification.list.output.NotificationBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.ChangedAttributes; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.ChangedAttributesBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.TargetObjectName; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.notification.TargetObjectNameBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.context.TopologyContextBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.topology.context.NwTopologyServiceBuilder; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.Uint32; import org.opendaylight.yangtools.yang.common.Uint8; public final class NotificationServiceDataUtils { + public static final String TAPI_CONTEXT = "T-API context"; + private NotificationServiceDataUtils() { } @@ -71,6 +113,38 @@ public final class NotificationServiceDataUtils { .build(); } + public static Notification buildReceivedTapiAlarmEvent() { + DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx"); + OffsetDateTime offsetDateTime = OffsetDateTime.now(ZoneOffset.UTC); + DateAndTime datetime = new DateAndTime(dtf.format(offsetDateTime)); + Uuid targetObjectId = new Uuid(UUID.randomUUID().toString()); + TargetObjectName objectName = new TargetObjectNameBuilder() + .setValue(targetObjectId.getValue()) + .setValueName("Connectivity Service Name") + .build(); + ChangedAttributes adminStateChange = new ChangedAttributesBuilder() + .setValueName("administrativeState") + .setOldValue(AdministrativeState.LOCKED.getName()) + .setNewValue(AdministrativeState.UNLOCKED.getName()) + .build(); + ChangedAttributes operStateChange = new ChangedAttributesBuilder() + .setValueName("operationalState") + .setOldValue(OperationalState.DISABLED.getName()) + .setNewValue(OperationalState.ENABLED.getName()) + .build(); + return new NotificationBuilder() + .setNotificationType(NotificationType.ATTRIBUTEVALUECHANGE) + .setLayerProtocolName(LayerProtocolName.ETH) + .setTargetObjectType(ObjectType.CONNECTIVITYSERVICE) + .setEventTimeStamp(datetime) + .setUuid(new Uuid(UUID.randomUUID().toString())) + .setTargetObjectIdentifier(targetObjectId) + .setTargetObjectName(Map.of(objectName.key(), objectName)) + .setChangedAttributes(Map.of(adminStateChange.key(), adminStateChange, + operStateChange.key(), operStateChange)) + .build(); + } + public static ServiceAEndBuilder getServiceAEndBuild() { return new ServiceAEndBuilder() .setClli("clli") @@ -91,6 +165,25 @@ public final class NotificationServiceDataUtils { .setRxDirection(getRxDirection()); } + public static CreateNotificationSubscriptionServiceInputBuilder buildNotificationSubscriptionServiceInputBuilder() { + Name name = new NameBuilder() + .setValue("test subscription") + .setValueName("Subscription name") + .build(); + SubscriptionFilter subscriptionFilter = new SubscriptionFilterBuilder() + .setRequestedObjectTypes(new HashSet<>(List.of(ObjectType.CONNECTIVITYSERVICE))) + .setRequestedNotificationTypes(new HashSet<>(List.of(NotificationType.ALARMEVENT))) + .setRequestedLayerProtocols(new HashSet<>(List.of(LayerProtocolName.ETH))) + .setRequestedObjectIdentifier(new HashSet<>(List.of(new Uuid(UUID.randomUUID().toString())))) + .setIncludeContent(true) + .setLocalId("localId") + .setName(Map.of(name.key(), name)) + .build(); + return new CreateNotificationSubscriptionServiceInputBuilder() + .setSubscriptionFilter(subscriptionFilter) + .setSubscriptionState(SubscriptionState.ACTIVE); + } + private static Map getTxDirection() { return Map.of(new TxDirectionKey(Uint8.ZERO), new TxDirectionBuilder() .setPort(new PortBuilder() @@ -132,4 +225,71 @@ public final class NotificationServiceDataUtils { .setIndex(Uint8.ZERO) .build()); } + + public static void createTapiContext( + NetworkTransactionService networkTransactionService) throws ExecutionException, InterruptedException { + // Augmenting tapi context to include topology and connectivity contexts + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.Name contextName + = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameBuilder() + .setValue(TAPI_CONTEXT).setValueName("TAPI Context Name").build(); + + Context1 connectivityContext = + new Context1Builder() + .setConnectivityContext( + new ConnectivityContextBuilder() + .setConnection(new HashMap<>()) + .setConnectivityService(new HashMap<>()) + .build()) + .build(); + + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.Name nwTopoServiceName = + new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.global._class.NameBuilder() + .setValue("Network Topo Service") + .setValueName("Network Topo Service Name") + .build(); + + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.Context1 topologyContext + = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.Context1Builder() + .setTopologyContext(new TopologyContextBuilder() + .setNwTopologyService(new NwTopologyServiceBuilder() + .setTopology(new HashMap<>()) + .setUuid( + new Uuid( + UUID.nameUUIDFromBytes("Network Topo Service".getBytes(Charset.forName("UTF-8"))) + .toString())) + .setName(Map.of(nwTopoServiceName.key(), nwTopoServiceName)) + .build()) + .setTopology(new HashMap<>()) + .build()) + .build(); + + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.Context1 notificationContext + = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.Context1Builder() + .setNotificationContext(new NotificationContextBuilder() + .setNotification(new HashMap<>()) + .setNotifSubscription(new HashMap<>()) + .build()) + .build(); + + ContextBuilder contextBuilder = new ContextBuilder() + .setName(Map.of(contextName.key(), contextName)) + .setUuid( + new Uuid(UUID.nameUUIDFromBytes(TAPI_CONTEXT.getBytes(Charset.forName("UTF-8"))).toString())) + .setServiceInterfacePoint(new HashMap<>()) + .addAugmentation(connectivityContext) + .addAugmentation(topologyContext) + .addAugmentation(notificationContext); + + // todo: add notification context + InstanceIdentifier contextIID = InstanceIdentifier.builder(Context.class).build(); + // put in datastore + networkTransactionService.put(LogicalDatastoreType.OPERATIONAL, contextIID, contextBuilder.build()); + networkTransactionService.commit().get(); + } + + public static GetNotificationListInputBuilder buildGetNotificationListInputBuilder(String subscriptionUuid) { + return new GetNotificationListInputBuilder() + .setSubscriptionIdOrName(subscriptionUuid) + .setTimePeriod("some string"); + } } diff --git a/nbinotifications/src/test/resources/expected_tapi_event.json b/nbinotifications/src/test/resources/expected_tapi_event.json new file mode 100755 index 000000000..068a5ed79 --- /dev/null +++ b/nbinotifications/src/test/resources/expected_tapi_event.json @@ -0,0 +1,28 @@ +{ + "nbi-notifications:notification-tapi-service": { + "layer-protocol-name": "ETH", + "notification-type": "ATTRIBUTE_VALUE_CHANGE", + "changed-attributes": [ + { + "value-name": "administrativeState", + "old-value": "LOCKED", + "new-value": "UNLOCKED" + }, + { + "value-name": "operationalState", + "old-value": "DISABLED", + "new-value": "ENABLED" + } + ], + "target-object-name": [ + { + "value-name": "Connectivity Service Name", + "value": "76d8f07b-ead5-4132-8eb8-cf3fdef7e079" + } + ], + "uuid": "6ae49721-7f96-4924-b23b-31e5bee4946b", + "target-object-type": "CONNECTIVITY_SERVICE", + "event-time-stamp": "2022-04-06T09:06:01+00:00", + "target-object-identifier": "76d8f07b-ead5-4132-8eb8-cf3fdef7e079" + } +} \ No newline at end of file diff --git a/nbinotifications/src/test/resources/tapi_event.json b/nbinotifications/src/test/resources/tapi_event.json new file mode 100644 index 000000000..068a5ed79 --- /dev/null +++ b/nbinotifications/src/test/resources/tapi_event.json @@ -0,0 +1,28 @@ +{ + "nbi-notifications:notification-tapi-service": { + "layer-protocol-name": "ETH", + "notification-type": "ATTRIBUTE_VALUE_CHANGE", + "changed-attributes": [ + { + "value-name": "administrativeState", + "old-value": "LOCKED", + "new-value": "UNLOCKED" + }, + { + "value-name": "operationalState", + "old-value": "DISABLED", + "new-value": "ENABLED" + } + ], + "target-object-name": [ + { + "value-name": "Connectivity Service Name", + "value": "76d8f07b-ead5-4132-8eb8-cf3fdef7e079" + } + ], + "uuid": "6ae49721-7f96-4924-b23b-31e5bee4946b", + "target-object-type": "CONNECTIVITY_SERVICE", + "event-time-stamp": "2022-04-06T09:06:01+00:00", + "target-object-identifier": "76d8f07b-ead5-4132-8eb8-cf3fdef7e079" + } +} \ No newline at end of file