Fix NPE when creating a producer after shard was unregistered
[mdsal.git] / dom / mdsal-dom-broker / src / test / java / org / opendaylight / mdsal / dom / broker / DOMRpcRouterTest.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.assertNotEquals;
12 import static org.junit.Assert.assertNotNull;
13 import static org.junit.Assert.assertTrue;
14 import static org.mockito.Mockito.mock;
15
16 import java.lang.reflect.Field;
17 import java.util.Collection;
18 import java.util.concurrent.RejectedExecutionException;
19 import org.junit.Test;
20 import org.opendaylight.mdsal.dom.api.DOMRpcAvailabilityListener;
21 import org.opendaylight.mdsal.dom.api.DOMRpcIdentifier;
22 import org.opendaylight.mdsal.dom.broker.util.TestModel;
23 import org.opendaylight.yangtools.concepts.ListenerRegistration;
24 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
25
26 public class DOMRpcRouterTest extends TestUtils {
27
28     @Test
29     public void registerRpcImplementation() throws Exception {
30         final DOMRpcRouter rpcRouter = new DOMRpcRouter();
31         final Field routingTableField = DOMRpcRouter.class.getDeclaredField("routingTable");
32         routingTableField.setAccessible(true);
33         DOMRpcRoutingTable routingTable = (DOMRpcRoutingTable) routingTableField.get(rpcRouter);
34         assertFalse(routingTable.getRpcs().containsKey(SchemaPath.ROOT));
35
36         rpcRouter.registerRpcImplementation(getTestRpcImplementation(), DOMRpcIdentifier.create(SchemaPath.ROOT, null));
37         routingTable = (DOMRpcRoutingTable) routingTableField.get(rpcRouter);
38         assertTrue(routingTable.getRpcs().containsKey(SchemaPath.ROOT));
39
40         rpcRouter.registerRpcImplementation(getTestRpcImplementation(), DOMRpcIdentifier.create(SchemaPath.SAME, null));
41         routingTable = (DOMRpcRoutingTable) routingTableField.get(rpcRouter);
42         assertTrue(routingTable.getRpcs().containsKey(SchemaPath.SAME));
43     }
44
45     @Test
46     public void invokeRpc() throws Exception {
47         final DOMRpcRouter rpcRouter = new DOMRpcRouter();
48         assertNotNull(rpcRouter.invokeRpc(SchemaPath.create(false, TestModel.TEST_QNAME), null));
49     }
50
51     @Test
52     public void registerRpcListener() throws Exception {
53         final DOMRpcRouter rpcRouter = new DOMRpcRouter();
54         final DOMRpcAvailabilityListener listener = mock(DOMRpcAvailabilityListener.class);
55
56         final Field listenersField = DOMRpcRouter.class.getDeclaredField("listeners");
57         listenersField.setAccessible(true);
58         final Collection<ListenerRegistration<? extends DOMRpcAvailabilityListener>> listenersOriginal =
59                 (Collection<ListenerRegistration<? extends DOMRpcAvailabilityListener>>) listenersField.get(rpcRouter);
60
61         assertNotNull(rpcRouter.registerRpcListener(listener));
62
63         final Collection<ListenerRegistration<? extends DOMRpcAvailabilityListener>> listenersChanged =
64                 (Collection<ListenerRegistration<? extends DOMRpcAvailabilityListener>>) listenersField.get(rpcRouter);
65         assertNotEquals(listenersOriginal, listenersChanged);
66         assertTrue(listenersOriginal.isEmpty());
67         assertFalse(listenersChanged.isEmpty());
68     }
69
70     @Test
71     public void onGlobalContextUpdated() throws Exception {
72         final DOMRpcRouter rpcRouter = new DOMRpcRouter();
73         final Field routingTableField = DOMRpcRouter.class.getDeclaredField("routingTable");
74         routingTableField.setAccessible(true);
75
76         final DOMRpcRoutingTable routingTableOriginal = (DOMRpcRoutingTable) routingTableField.get(rpcRouter);
77
78         rpcRouter.onGlobalContextUpdated(TestModel.createTestContext());
79
80         final DOMRpcRoutingTable routingTableChanged = (DOMRpcRoutingTable) routingTableField.get(rpcRouter);
81         assertNotEquals(routingTableOriginal, routingTableChanged);
82     }
83
84     @Test(expected = RejectedExecutionException.class)
85     public void close() throws Exception {
86         final DOMRpcRouter rpcRouter = new DOMRpcRouter();
87         rpcRouter.close();
88         rpcRouter.registerRpcImplementation(getTestRpcImplementation(), DOMRpcIdentifier.create(SchemaPath.ROOT, null));
89     }
90 }