Unit test for RemoteRpcRegistryMXBeanImpl class
[controller.git] / opendaylight / md-sal / sal-remoterpc-connector / src / test / java / org / opendaylight / controller / remote / rpc / registry / mbeans / RemoteRpcRegistryMXBeanImplTest.java
1 /*
2  * Copyright (c) 2017 Pantheon Technologies s.r.o. 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.controller.remote.rpc.registry.mbeans;
9
10 import akka.actor.ActorRef;
11 import akka.actor.ActorSystem;
12 import akka.actor.Props;
13 import akka.testkit.JavaTestKit;
14 import akka.testkit.TestActorRef;
15 import com.google.common.collect.Lists;
16 import com.google.common.util.concurrent.Uninterruptibles;
17 import java.util.Collections;
18 import java.util.List;
19 import java.util.Map;
20 import java.util.Set;
21 import java.util.concurrent.TimeUnit;
22 import org.junit.After;
23 import org.junit.Assert;
24 import org.junit.Before;
25 import org.junit.Test;
26 import org.opendaylight.controller.md.sal.dom.api.DOMRpcIdentifier;
27 import org.opendaylight.controller.remote.rpc.RemoteRpcProviderConfig;
28 import org.opendaylight.controller.remote.rpc.registry.RpcRegistry;
29 import org.opendaylight.yangtools.yang.common.QName;
30 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
31 import org.opendaylight.yangtools.yang.model.api.SchemaPath;
32
33 public class RemoteRpcRegistryMXBeanImplTest {
34
35     private static final QName LOCAL_QNAME = QName.create("base", "local");
36     private static final SchemaPath EMPTY_SCHEMA_PATH = SchemaPath.ROOT;
37     private static final SchemaPath LOCAL_SCHEMA_PATH = SchemaPath.create(true, LOCAL_QNAME);
38
39     private ActorSystem system;
40     private TestActorRef<RpcRegistry> testActor;
41     private List<DOMRpcIdentifier> buckets;
42     private RemoteRpcRegistryMXBeanImpl mxBean;
43
44     @Before
45     public void setUp() throws Exception {
46         system = ActorSystem.create("test");
47
48         final DOMRpcIdentifier emptyRpcIdentifier = DOMRpcIdentifier.create(
49                 EMPTY_SCHEMA_PATH, YangInstanceIdentifier.EMPTY);
50         final DOMRpcIdentifier localRpcIdentifier = DOMRpcIdentifier.create(
51                 LOCAL_SCHEMA_PATH, YangInstanceIdentifier.of(LOCAL_QNAME));
52
53         buckets = Lists.newArrayList(emptyRpcIdentifier, localRpcIdentifier);
54
55         final RemoteRpcProviderConfig config = new RemoteRpcProviderConfig.Builder("system").build();
56         final JavaTestKit invoker = new JavaTestKit(system);
57         final JavaTestKit registrar = new JavaTestKit(system);
58         final JavaTestKit supervisor = new JavaTestKit(system);
59         final Props props = RpcRegistry.props(config, invoker.getRef(), registrar.getRef());
60         testActor = new TestActorRef<>(system, props, supervisor.getRef(), "testActor");
61         final RpcRegistry rpcRegistry = testActor.underlyingActor();
62
63         mxBean = new RemoteRpcRegistryMXBeanImpl(rpcRegistry);
64         Uninterruptibles.sleepUninterruptibly(200, TimeUnit.MILLISECONDS);
65     }
66
67     @After
68     public void tearDown() throws Exception {
69         JavaTestKit.shutdownActorSystem(system, null, Boolean.TRUE);
70     }
71
72     @Test
73     public void testGetGlobalRpcEmptyBuckets() throws Exception {
74         final Set<String> globalRpc = mxBean.getGlobalRpc();
75
76         Assert.assertNotNull(globalRpc);
77         Assert.assertTrue(globalRpc.isEmpty());
78     }
79
80     @Test
81     public void testGetGlobalRpc() throws Exception {
82         testActor.tell(new RpcRegistry.Messages.AddOrUpdateRoutes(Lists.newArrayList(buckets)), ActorRef.noSender());
83         final Set<String> globalRpc = mxBean.getGlobalRpc();
84
85         Assert.assertNotNull(globalRpc);
86         Assert.assertEquals(1, globalRpc.size());
87
88         final String rpc = globalRpc.iterator().next();
89         Assert.assertEquals(EMPTY_SCHEMA_PATH.toString(), rpc);
90     }
91
92     @Test
93     public void testGetLocalRegisteredRoutedRpcEmptyBuckets() throws Exception {
94         final Set<String> localRegisteredRoutedRpc = mxBean.getLocalRegisteredRoutedRpc();
95
96         Assert.assertNotNull(localRegisteredRoutedRpc);
97         Assert.assertTrue(localRegisteredRoutedRpc.isEmpty());
98     }
99
100     @Test
101     public void testGetLocalRegisteredRoutedRpc() throws Exception {
102         testActor.tell(new RpcRegistry.Messages.AddOrUpdateRoutes(Lists.newArrayList(buckets)), ActorRef.noSender());
103         final Set<String> localRegisteredRoutedRpc = mxBean.getLocalRegisteredRoutedRpc();
104
105         Assert.assertNotNull(localRegisteredRoutedRpc);
106         Assert.assertEquals(1, localRegisteredRoutedRpc.size());
107
108         final String localRpc = localRegisteredRoutedRpc.iterator().next();
109         Assert.assertTrue(localRpc.contains(LOCAL_QNAME.toString()));
110         Assert.assertTrue(localRpc.contains(LOCAL_SCHEMA_PATH.toString()));
111     }
112
113     @Test
114     public void testFindRpcByNameEmptyBuckets() throws Exception {
115         final Map<String, String> rpcByName = mxBean.findRpcByName("");
116
117         Assert.assertNotNull(rpcByName);
118         Assert.assertTrue(rpcByName.isEmpty());
119     }
120
121     @Test
122     public void testFindRpcByName() throws Exception {
123         testActor.tell(new RpcRegistry.Messages.AddOrUpdateRoutes(Lists.newArrayList(buckets)), ActorRef.noSender());
124         final Map<String, String> rpcByName = mxBean.findRpcByName("");
125
126         Assert.assertNotNull(rpcByName);
127         Assert.assertEquals(1, rpcByName.size());
128         Assert.assertTrue(rpcByName.containsValue(LOCAL_QNAME.getLocalName()));
129     }
130
131     @Test
132     public void testFindRpcByRouteEmptyBuckets() throws Exception {
133         final Map<String, String> rpcByRoute = mxBean.findRpcByRoute("");
134
135         Assert.assertNotNull(rpcByRoute);
136         Assert.assertTrue(rpcByRoute.isEmpty());
137     }
138
139     @Test
140     public void testFindRpcByRoute() throws Exception {
141         testActor.tell(new RpcRegistry.Messages.AddOrUpdateRoutes(Lists.newArrayList(buckets)), ActorRef.noSender());
142         final Map<String, String> rpcByRoute = mxBean.findRpcByRoute("");
143
144         Assert.assertNotNull(rpcByRoute);
145         Assert.assertEquals(1, rpcByRoute.size());
146         Assert.assertTrue(rpcByRoute.containsValue(LOCAL_QNAME.getLocalName()));
147     }
148
149     @Test
150     public void testGetBucketVersionsEmptyBuckets() throws Exception {
151         final String bucketVersions = mxBean.getBucketVersions();
152         Assert.assertEquals(Collections.EMPTY_MAP.toString(), bucketVersions);
153     }
154
155     @Test
156     public void testGetBucketVersions() throws Exception {
157         testActor.tell(new RpcRegistry.Messages.AddOrUpdateRoutes(Lists.newArrayList(buckets)), ActorRef.noSender());
158         final String bucketVersions = mxBean.getBucketVersions();
159
160         Assert.assertTrue(bucketVersions.contains(testActor.provider().getDefaultAddress().toString()));
161     }
162 }