* 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.netconf.mdsal.notification.impl;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import java.util.Date;
import java.util.Iterator;
import org.junit.Assert;
-import org.junit.Before;
import org.junit.Test;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
+import org.junit.runner.RunWith;
+import org.mockito.junit.MockitoJUnitRunner;
+import org.opendaylight.mdsal.binding.dom.codec.impl.DefaultBindingDOMCodecFactory;
+import org.opendaylight.mdsal.binding.generator.impl.DefaultBindingRuntimeGenerator;
+import org.opendaylight.netconf.api.xml.XmlUtil;
+import org.opendaylight.netconf.mdsal.notification.impl.ops.NotificationsTransformUtil;
import org.opendaylight.netconf.notifications.BaseNotificationPublisherRegistration;
import org.opendaylight.netconf.notifications.NetconfNotification;
import org.opendaylight.netconf.notifications.NetconfNotificationCollector;
import org.opendaylight.netconf.notifications.NetconfNotificationListener;
-import org.opendaylight.netconf.notifications.NetconfNotificationRegistry;
import org.opendaylight.netconf.notifications.NotificationListenerRegistration;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netconf.notification._1._0.rev080714.StreamNameType;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netmod.notification.rev080714.netconf.streams.Stream;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.netmod.notification.rev080714.netconf.streams.StreamBuilder;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.NetconfCapabilityChange;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206.NetconfCapabilityChangeBuilder;
+import org.opendaylight.yangtools.yang.parser.api.YangParserException;
+import org.opendaylight.yangtools.yang.parser.impl.DefaultYangParserFactory;
+@RunWith(MockitoJUnitRunner.class)
public class NetconfNotificationManagerTest {
-
public static final String RFC3339_DATE_FORMAT_WITH_MILLIS_BLUEPRINT = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX";
- @Mock
- private NetconfNotificationRegistry notificationRegistry;
-
- @Before
- public void setUp() throws Exception {
- MockitoAnnotations.initMocks(this);
- }
@Test
public void testEventTime() throws Exception {
@Test
public void testNotificationListeners() throws Exception {
- final NetconfNotificationManager netconfNotificationManager = new NetconfNotificationManager();
+ final NetconfNotificationManager netconfNotificationManager = createManager();
final BaseNotificationPublisherRegistration baseNotificationPublisherRegistration =
netconfNotificationManager.registerBaseNotificationPublisher();
verifyNoMoreInteractions(listener);
}
+ @Test
+ public void testCustomNotificationListeners() throws Exception {
+ final NetconfNotificationManager netconfNotificationManager = createManager();
+
+ final StreamNameType testStreamName = new StreamNameType("TEST_STREAM");
+ final Stream testStream = new StreamBuilder().setName(testStreamName).build();
+
+ final NetconfNotificationListener listenerBase = mock(NetconfNotificationListener.class);
+ netconfNotificationManager.registerNotificationListener(
+ NetconfNotificationManager.BASE_NETCONF_STREAM.getName(), listenerBase);
+
+ final NetconfNotificationListener listener = mock(NetconfNotificationListener.class);
+ netconfNotificationManager.registerNotificationListener(testStream.getName(), listener);
+
+ doNothing().when(listener).onNotification(eq(testStreamName), any(NetconfNotification.class));
+
+ final NetconfNotification notification = new NetconfNotification(
+ XmlUtil.readXmlToDocument("<notification/>"));
+ netconfNotificationManager.onNotification(testStream.getName(), notification);
+
+ verify(listener).onNotification(eq(testStream.getName()), eq(notification));
+
+ netconfNotificationManager.close();
+ netconfNotificationManager.onNotification(testStream.getName(), notification);
+
+ verifyNoMoreInteractions(listener);
+ verify(listenerBase, never()).onNotification(eq(testStream.getName()), eq(notification));
+ }
+
@Test
public void testClose() throws Exception {
- final NetconfNotificationManager netconfNotificationManager = new NetconfNotificationManager();
+ final NetconfNotificationManager netconfNotificationManager = createManager();
final BaseNotificationPublisherRegistration baseNotificationPublisherRegistration =
netconfNotificationManager.registerBaseNotificationPublisher();
final NetconfNotificationListener listener = mock(NetconfNotificationListener.class);
- doNothing().when(listener).onNotification(any(StreamNameType.class), any(NetconfNotification.class));
netconfNotificationManager
.registerNotificationListener(NetconfNotificationManager.BASE_NETCONF_STREAM.getName(), listener);
@Test
public void testStreamListeners() throws Exception {
- final NetconfNotificationManager netconfNotificationManager = new NetconfNotificationManager();
+ final NetconfNotificationManager netconfNotificationManager = createManager();
final NetconfNotificationCollector.NetconfNotificationStreamListener streamListener =
mock(NetconfNotificationCollector.NetconfNotificationStreamListener.class);
verify(streamListener).onStreamUnregistered(NetconfNotificationManager.BASE_STREAM_NAME);
}
+
+ private static NetconfNotificationManager createManager() throws YangParserException {
+ return new NetconfNotificationManager(new NotificationsTransformUtil(new DefaultYangParserFactory(),
+ new DefaultBindingRuntimeGenerator(), new DefaultBindingDOMCodecFactory()));
+ }
}
\ No newline at end of file