2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.mdsal.dom.broker;
10 import static org.junit.Assert.assertFalse;
11 import static org.junit.Assert.assertNotNull;
12 import static org.junit.Assert.assertTrue;
13 import static org.mockito.Mockito.doReturn;
14 import static org.mockito.Mockito.mock;
16 import com.google.common.collect.Multimap;
17 import java.lang.reflect.Field;
18 import java.util.concurrent.ExecutorService;
19 import java.util.concurrent.TimeUnit;
20 import javax.annotation.Nonnull;
21 import org.junit.Test;
22 import org.opendaylight.mdsal.dom.api.DOMNotification;
23 import org.opendaylight.mdsal.dom.api.DOMNotificationListener;
24 import org.opendaylight.mdsal.dom.spi.DOMNotificationSubscriptionListener;
25 import org.opendaylight.yangtools.concepts.ListenerRegistration;
26 import org.opendaylight.yangtools.util.ListenerRegistry;
27 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
29 public class DOMNotificationRouterTest extends TestUtils {
32 public void create() throws Exception {
33 assertNotNull(DOMNotificationRouter.create(1,1,1,TimeUnit.SECONDS));
34 assertNotNull(DOMNotificationRouter.create(1));
37 @SuppressWarnings("checkstyle:IllegalCatch")
39 public void complexTest() throws Exception {
40 final DOMNotificationSubscriptionListener domNotificationSubscriptionListener =
41 mock(DOMNotificationSubscriptionListener.class);
42 final DOMNotificationListener domNotificationListener = new TestListener();
43 final DOMNotificationRouter domNotificationRouter = DOMNotificationRouter.create(1);
45 final Field listenersField = DOMNotificationRouter.class.getDeclaredField("listeners");
46 listenersField.setAccessible(true);
48 final Field subscriptionListenersField = DOMNotificationRouter.class.getDeclaredField("subscriptionListeners");
49 subscriptionListenersField.setAccessible(true);
51 Multimap<SchemaPath, ListenerRegistration<? extends DOMNotificationListener>> listeners =
52 (Multimap<SchemaPath, ListenerRegistration<? extends DOMNotificationListener>>)
53 listenersField.get(domNotificationRouter);
55 assertTrue(listeners.isEmpty());
56 assertNotNull(domNotificationRouter.registerNotificationListener(domNotificationListener, SchemaPath.ROOT));
57 assertNotNull(domNotificationRouter.registerNotificationListener(domNotificationListener, SchemaPath.SAME));
59 listeners = (Multimap<SchemaPath, ListenerRegistration<? extends DOMNotificationListener>>)
60 listenersField.get(domNotificationRouter);
62 assertFalse(listeners.isEmpty());
64 ListenerRegistry<DOMNotificationSubscriptionListener> subscriptionListeners =
65 (ListenerRegistry<DOMNotificationSubscriptionListener>)
66 subscriptionListenersField.get(domNotificationRouter);
68 assertFalse(subscriptionListeners.iterator().hasNext());
69 assertNotNull(domNotificationRouter.registerSubscriptionListener(domNotificationSubscriptionListener));
71 subscriptionListeners = (ListenerRegistry<DOMNotificationSubscriptionListener>)
72 subscriptionListenersField.get(domNotificationRouter);
73 assertTrue(subscriptionListeners.iterator().hasNext());
75 final DOMNotification domNotification = mock(DOMNotification.class);
76 doReturn("test").when(domNotification).toString();
77 doReturn(SchemaPath.ROOT).when(domNotification).getType();
78 doReturn(TEST_CHILD).when(domNotification).getBody();
80 assertNotNull(domNotificationRouter.offerNotification(domNotification));
83 assertNotNull(domNotificationRouter.offerNotification(domNotification, 1, TimeUnit.SECONDS));
84 assertNotNull(domNotificationRouter.offerNotification(domNotification, 1, TimeUnit.SECONDS));
85 } catch (Exception e) {
86 assertTrue(e instanceof UnsupportedOperationException);
89 assertNotNull(domNotificationRouter.putNotification(domNotification));
93 public void offerNotification() throws Exception {
94 final DOMNotificationRouter domNotificationRouter = DOMNotificationRouter.create(1);
95 final DOMNotification domNotification = mock(DOMNotification.class);
96 doReturn(SchemaPath.ROOT).when(domNotification).getType();
97 doReturn(TEST_CHILD).when(domNotification).getBody();
98 assertNotNull(domNotificationRouter.putNotification(domNotification));
99 assertNotNull(domNotificationRouter.offerNotification(domNotification));
100 assertNotNull(domNotificationRouter.offerNotification(domNotification, 1, TimeUnit.SECONDS));
104 public void close() throws Exception {
105 final DOMNotificationRouter domNotificationRouter = DOMNotificationRouter.create(1);
107 final Field executorField = DOMNotificationRouter.class.getDeclaredField("executor");
108 executorField.setAccessible(true);
110 final ExecutorService executor = (ExecutorService) executorField.get(domNotificationRouter);
112 assertFalse(executor.isShutdown());
113 domNotificationRouter.close();
114 assertTrue(executor.isShutdown());
117 private class TestListener implements DOMNotificationListener {
119 public void onNotification(@Nonnull DOMNotification notification) {}