akka.actor.provider set to 'cluster'
[controller.git] / opendaylight / md-sal / sal-remoterpc-connector / src / test / java / org / opendaylight / controller / remote / rpc / registry / mbeans / RemoteActionRegistryMXBeanImplTest.java
1 /*
2  * Copyright (c) 2019 Nordix Foundation.  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.dispatch.Dispatchers;
14 import akka.testkit.TestActorRef;
15 import akka.testkit.javadsl.TestKit;
16 import akka.util.Timeout;
17 import com.google.common.collect.Lists;
18 import com.typesafe.config.ConfigFactory;
19 import java.util.Collections;
20 import java.util.List;
21 import java.util.Map;
22 import java.util.Set;
23 import java.util.concurrent.TimeUnit;
24 import org.junit.After;
25 import org.junit.Assert;
26 import org.junit.Before;
27 import org.junit.Test;
28 import org.opendaylight.controller.remote.rpc.RemoteOpsProviderConfig;
29 import org.opendaylight.controller.remote.rpc.registry.ActionRegistry;
30 import org.opendaylight.controller.remote.rpc.registry.gossip.BucketStoreAccess;
31 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
32 import org.opendaylight.mdsal.dom.api.DOMActionInstance;
33 import org.opendaylight.yangtools.yang.common.QName;
34 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
35 import org.opendaylight.yangtools.yang.model.api.stmt.SchemaNodeIdentifier.Absolute;
36
37 public class RemoteActionRegistryMXBeanImplTest {
38
39     private static final QName LOCAL_QNAME = QName.create("base", "local");
40     private static final QName REMOTE_QNAME = QName.create("base", "local");
41     private static final Absolute LOCAL_SCHEMA_PATH = Absolute.of(LOCAL_QNAME);
42     private static final Absolute REMOTE_SCHEMA_PATH = Absolute.of(REMOTE_QNAME);
43
44     private ActorSystem system;
45     private TestActorRef<ActionRegistry> testActor;
46     private List<DOMActionInstance> buckets;
47     private RemoteActionRegistryMXBeanImpl mxBean;
48
49     @Before
50     public void setUp() {
51         system = ActorSystem.create("test", ConfigFactory.load().getConfig("unit-test"));
52
53         final DOMActionInstance emptyActionIdentifier = DOMActionInstance.of(
54                 REMOTE_SCHEMA_PATH, LogicalDatastoreType.OPERATIONAL, YangInstanceIdentifier.empty());
55         final DOMActionInstance localActionIdentifier = DOMActionInstance.of(
56                 LOCAL_SCHEMA_PATH, LogicalDatastoreType.OPERATIONAL, YangInstanceIdentifier.of(LOCAL_QNAME));
57
58         buckets = Lists.newArrayList(emptyActionIdentifier, localActionIdentifier);
59
60         final RemoteOpsProviderConfig config = new RemoteOpsProviderConfig.Builder("system").build();
61         final TestKit invoker = new TestKit(system);
62         final TestKit registrar = new TestKit(system);
63         final TestKit supervisor = new TestKit(system);
64         final Props props = ActionRegistry.props(config, invoker.getRef(), registrar.getRef())
65                 .withDispatcher(Dispatchers.DefaultDispatcherId());
66         testActor = new TestActorRef<>(system, props, supervisor.getRef(), "testActor");
67
68         final Timeout timeout = Timeout.apply(10, TimeUnit.SECONDS);
69         mxBean = new RemoteActionRegistryMXBeanImpl(new BucketStoreAccess(testActor, system.dispatcher(), timeout),
70                 timeout);
71     }
72
73     @After
74     public void tearDown() {
75         TestKit.shutdownActorSystem(system, Boolean.TRUE);
76     }
77
78     @Test
79     public void testGetLocalRegisteredRoutedActionEmptyBuckets() {
80         final Set<String> localRegisteredRoutedAction = mxBean.getLocalRegisteredAction();
81
82         Assert.assertNotNull(localRegisteredRoutedAction);
83         Assert.assertTrue(localRegisteredRoutedAction.isEmpty());
84     }
85
86     @Test
87     public void testGetLocalRegisteredRoutedAction() {
88         testActor.tell(new ActionRegistry.Messages.UpdateActions(Lists.newArrayList(buckets),
89                 Collections.emptyList()), ActorRef.noSender());
90         final Set<String> localRegisteredRoutedAction = mxBean.getLocalRegisteredAction();
91
92         Assert.assertNotNull(localRegisteredRoutedAction);
93         Assert.assertEquals(1, localRegisteredRoutedAction.size());
94
95         final String localAction = localRegisteredRoutedAction.iterator().next();
96         Assert.assertTrue(localAction.contains(LOCAL_QNAME.toString()));
97         Assert.assertTrue(localAction.contains(LOCAL_SCHEMA_PATH.toString()));
98     }
99
100     @Test
101     public void testFindActionByNameEmptyBuckets() {
102         final Map<String, String> rpcByName = mxBean.findActionByName("");
103
104         Assert.assertNotNull(rpcByName);
105         Assert.assertTrue(rpcByName.isEmpty());
106     }
107
108     @Test
109     public void testFindActionByName() {
110         testActor.tell(new ActionRegistry.Messages.UpdateActions(Lists.newArrayList(buckets),
111                 Collections.emptyList()), ActorRef.noSender());
112         final Map<String, String> rpcByName = mxBean.findActionByName("");
113
114         Assert.assertNotNull(rpcByName);
115         Assert.assertEquals(1, rpcByName.size());
116         Assert.assertTrue(rpcByName.containsValue(LOCAL_QNAME.getLocalName()));
117     }
118
119     @Test
120     public void testFindActionByRouteEmptyBuckets() {
121         final Map<String, String> rpcByRoute = mxBean.findActionByRoute("");
122
123         Assert.assertNotNull(rpcByRoute);
124         Assert.assertTrue(rpcByRoute.isEmpty());
125     }
126
127     @Test
128     public void testFindActionByRoute() {
129         testActor.tell(new ActionRegistry.Messages.UpdateActions(Lists.newArrayList(buckets),
130                 Collections.emptyList()), ActorRef.noSender());
131         final Map<String, String> rpcByRoute = mxBean.findActionByRoute("");
132
133         Assert.assertNotNull(rpcByRoute);
134         Assert.assertEquals(1, rpcByRoute.size());
135         Assert.assertTrue(rpcByRoute.containsValue(LOCAL_QNAME.getLocalName()));
136     }
137
138     @Test
139     public void testGetBucketVersionsEmptyBuckets() {
140         final String bucketVersions = mxBean.getBucketVersions();
141         Assert.assertEquals(Collections.emptyMap().toString(), bucketVersions);
142     }
143
144     @Test
145     public void testGetBucketVersions() {
146         testActor.tell(new ActionRegistry.Messages.UpdateActions(Lists.newArrayList(buckets),
147                 Collections.emptyList()), ActorRef.noSender());
148         final String bucketVersions = mxBean.getBucketVersions();
149
150         Assert.assertTrue(bucketVersions.contains(testActor.provider().getDefaultAddress().toString()));
151     }
152 }