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.cluster.notifications;
10 import akka.actor.ActorRef;
11 import akka.actor.ActorSystem;
12 import akka.testkit.TestProbe;
13 import akka.testkit.javadsl.TestKit;
14 import java.util.ArrayList;
15 import java.util.List;
16 import org.junit.After;
17 import org.junit.Assert;
18 import org.junit.Before;
19 import org.junit.Test;
21 public class RoleChangeNotifierTest {
23 private static final String MEMBER_ID = "member-1";
24 private static final int LISTENER_COUNT = 3;
25 private ActorSystem system;
26 private List<TestProbe> listeners;
27 private ActorRef notifier;
31 system = ActorSystem.apply();
32 notifier = system.actorOf(RoleChangeNotifier.getProps(MEMBER_ID));
33 listeners = new ArrayList<>(LISTENER_COUNT);
34 for (int i = 0; i < LISTENER_COUNT; i++) {
35 listeners.add(new TestProbe(system));
40 public void tearDown() {
41 TestKit.shutdownActorSystem(system);
45 public void testHandleReceiveRoleChange() {
47 final RoleChanged msg = new RoleChanged(MEMBER_ID, "old", "new");
48 notifier.tell(msg, ActorRef.noSender());
49 checkListenerRoleChangeNotification(msg);
53 public void testHandleReceiveLeaderStateChanged() {
55 final LeaderStateChanged msg = new LeaderStateChanged(MEMBER_ID, "leader", (short) 0);
56 notifier.tell(msg, ActorRef.noSender());
57 checkListenerLeaderStateChanged(msg);
61 public void testHandleReceiveRegistrationAfterRoleChange() {
62 final RoleChanged roleChanged1 = new RoleChanged(MEMBER_ID, "old1", "new1");
63 final RoleChanged lastRoleChanged = new RoleChanged(MEMBER_ID, "old2", "new2");
64 notifier.tell(roleChanged1, ActorRef.noSender());
65 notifier.tell(lastRoleChanged, ActorRef.noSender());
67 checkListenerRoleChangeNotification(lastRoleChanged);
71 public void testHandleReceiveRegistrationAfterLeaderStateChange() {
72 final LeaderStateChanged leaderStateChanged1 = new LeaderStateChanged(MEMBER_ID, "leader1", (short) 0);
73 final LeaderStateChanged lastLeaderStateChanged = new LeaderStateChanged(MEMBER_ID, "leader2", (short) 1);
74 notifier.tell(leaderStateChanged1, ActorRef.noSender());
75 notifier.tell(lastLeaderStateChanged, ActorRef.noSender());
77 checkListenerLeaderStateChanged(lastLeaderStateChanged);
80 private void registerListeners() {
81 for (final TestProbe listener : listeners) {
82 notifier.tell(new RegisterRoleChangeListener(), listener.ref());
83 listener.expectMsgClass(RegisterRoleChangeListenerReply.class);
87 private void checkListenerRoleChangeNotification(final RoleChanged roleChanged) {
88 for (final TestProbe listener : listeners) {
89 final RoleChangeNotification received = listener.expectMsgClass(RoleChangeNotification.class);
90 Assert.assertEquals(roleChanged.getMemberId(), received.getMemberId());
91 Assert.assertEquals(roleChanged.getOldRole(), received.getOldRole());
92 Assert.assertEquals(roleChanged.getNewRole(), received.getNewRole());
96 private void checkListenerLeaderStateChanged(final LeaderStateChanged leaderStateChanged) {
97 for (final TestProbe listener : listeners) {
98 final LeaderStateChanged received = listener.expectMsgClass(LeaderStateChanged.class);
99 Assert.assertEquals(leaderStateChanged.getMemberId(), received.getMemberId());
100 Assert.assertEquals(leaderStateChanged.getLeaderId(), received.getLeaderId());
101 Assert.assertEquals(leaderStateChanged.getLeaderPayloadVersion(), received.getLeaderPayloadVersion());