2 * Copyright (c) 2017 Pantheon Technologies s.r.o. 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.controller.remote.rpc.registry.mbeans;
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;
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;
33 public class RemoteRpcRegistryMXBeanImplTest {
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);
39 private ActorSystem system;
40 private TestActorRef<RpcRegistry> testActor;
41 private List<DOMRpcIdentifier> buckets;
42 private RemoteRpcRegistryMXBeanImpl mxBean;
45 public void setUp() throws Exception {
46 system = ActorSystem.create("test");
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));
53 buckets = Lists.newArrayList(emptyRpcIdentifier, localRpcIdentifier);
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();
63 mxBean = new RemoteRpcRegistryMXBeanImpl(rpcRegistry);
64 Uninterruptibles.sleepUninterruptibly(200, TimeUnit.MILLISECONDS);
68 public void tearDown() throws Exception {
69 JavaTestKit.shutdownActorSystem(system, null, Boolean.TRUE);
73 public void testGetGlobalRpcEmptyBuckets() throws Exception {
74 final Set<String> globalRpc = mxBean.getGlobalRpc();
76 Assert.assertNotNull(globalRpc);
77 Assert.assertTrue(globalRpc.isEmpty());
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();
85 Assert.assertNotNull(globalRpc);
86 Assert.assertEquals(1, globalRpc.size());
88 final String rpc = globalRpc.iterator().next();
89 Assert.assertEquals(EMPTY_SCHEMA_PATH.toString(), rpc);
93 public void testGetLocalRegisteredRoutedRpcEmptyBuckets() throws Exception {
94 final Set<String> localRegisteredRoutedRpc = mxBean.getLocalRegisteredRoutedRpc();
96 Assert.assertNotNull(localRegisteredRoutedRpc);
97 Assert.assertTrue(localRegisteredRoutedRpc.isEmpty());
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();
105 Assert.assertNotNull(localRegisteredRoutedRpc);
106 Assert.assertEquals(1, localRegisteredRoutedRpc.size());
108 final String localRpc = localRegisteredRoutedRpc.iterator().next();
109 Assert.assertTrue(localRpc.contains(LOCAL_QNAME.toString()));
110 Assert.assertTrue(localRpc.contains(LOCAL_SCHEMA_PATH.toString()));
114 public void testFindRpcByNameEmptyBuckets() throws Exception {
115 final Map<String, String> rpcByName = mxBean.findRpcByName("");
117 Assert.assertNotNull(rpcByName);
118 Assert.assertTrue(rpcByName.isEmpty());
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("");
126 Assert.assertNotNull(rpcByName);
127 Assert.assertEquals(1, rpcByName.size());
128 Assert.assertTrue(rpcByName.containsValue(LOCAL_QNAME.getLocalName()));
132 public void testFindRpcByRouteEmptyBuckets() throws Exception {
133 final Map<String, String> rpcByRoute = mxBean.findRpcByRoute("");
135 Assert.assertNotNull(rpcByRoute);
136 Assert.assertTrue(rpcByRoute.isEmpty());
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("");
144 Assert.assertNotNull(rpcByRoute);
145 Assert.assertEquals(1, rpcByRoute.size());
146 Assert.assertTrue(rpcByRoute.containsValue(LOCAL_QNAME.getLocalName()));
150 public void testGetBucketVersionsEmptyBuckets() throws Exception {
151 final String bucketVersions = mxBean.getBucketVersions();
152 Assert.assertEquals(Collections.EMPTY_MAP.toString(), bucketVersions);
156 public void testGetBucketVersions() throws Exception {
157 testActor.tell(new RpcRegistry.Messages.AddOrUpdateRoutes(Lists.newArrayList(buckets)), ActorRef.noSender());
158 final String bucketVersions = mxBean.getBucketVersions();
160 Assert.assertTrue(bucketVersions.contains(testActor.provider().getDefaultAddress().toString()));