checkStyleViolationSeverity=error implemented for mdsal-dom-broker
[mdsal.git] / dom / mdsal-dom-broker / src / test / java / org / opendaylight / mdsal / dom / broker / DOMNotificationRouterTest.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.mdsal.dom.broker;
9
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;
15
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;
28
29 public class DOMNotificationRouterTest extends TestUtils {
30
31     @Test
32     public void create() throws Exception {
33         assertNotNull(DOMNotificationRouter.create(1,1,1,TimeUnit.SECONDS));
34         assertNotNull(DOMNotificationRouter.create(1));
35     }
36
37     @SuppressWarnings("checkstyle:IllegalCatch")
38     @Test
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);
44
45         final Field listenersField = DOMNotificationRouter.class.getDeclaredField("listeners");
46         listenersField.setAccessible(true);
47
48         final Field subscriptionListenersField = DOMNotificationRouter.class.getDeclaredField("subscriptionListeners");
49         subscriptionListenersField.setAccessible(true);
50
51         Multimap<SchemaPath, ListenerRegistration<? extends DOMNotificationListener>> listeners =
52                 (Multimap<SchemaPath, ListenerRegistration<? extends DOMNotificationListener>>)
53                         listenersField.get(domNotificationRouter);
54
55         assertTrue(listeners.isEmpty());
56         assertNotNull(domNotificationRouter.registerNotificationListener(domNotificationListener, SchemaPath.ROOT));
57         assertNotNull(domNotificationRouter.registerNotificationListener(domNotificationListener, SchemaPath.SAME));
58
59         listeners = (Multimap<SchemaPath, ListenerRegistration<? extends DOMNotificationListener>>)
60                         listenersField.get(domNotificationRouter);
61
62         assertFalse(listeners.isEmpty());
63
64         ListenerRegistry<DOMNotificationSubscriptionListener> subscriptionListeners =
65                 (ListenerRegistry<DOMNotificationSubscriptionListener>)
66                         subscriptionListenersField.get(domNotificationRouter);
67
68         assertFalse(subscriptionListeners.iterator().hasNext());
69         assertNotNull(domNotificationRouter.registerSubscriptionListener(domNotificationSubscriptionListener));
70
71         subscriptionListeners = (ListenerRegistry<DOMNotificationSubscriptionListener>)
72                         subscriptionListenersField.get(domNotificationRouter);
73         assertTrue(subscriptionListeners.iterator().hasNext());
74
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();
79
80         assertNotNull(domNotificationRouter.offerNotification(domNotification));
81
82         try {
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);
87         }
88
89         assertNotNull(domNotificationRouter.putNotification(domNotification));
90     }
91
92     @Test
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));
101     }
102
103     @Test
104     public void close() throws Exception {
105         final DOMNotificationRouter domNotificationRouter = DOMNotificationRouter.create(1);
106
107         final Field executorField = DOMNotificationRouter.class.getDeclaredField("executor");
108         executorField.setAccessible(true);
109
110         final ExecutorService executor = (ExecutorService) executorField.get(domNotificationRouter);
111
112         assertFalse(executor.isShutdown());
113         domNotificationRouter.close();
114         assertTrue(executor.isShutdown());
115     }
116
117     private class TestListener implements DOMNotificationListener {
118         @Override
119         public void onNotification(@Nonnull DOMNotification notification) {}
120     }
121 }