ab65929fe7662fd168d9b75abdb009537c25a234
[controller.git] / opendaylight / md-sal / sal-clustering-commons / src / test / java / org / opendaylight / controller / cluster / notifications / RoleChangeNotifierTest.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.cluster.notifications;
9
10 import akka.actor.ActorRef;
11 import akka.actor.ActorSystem;
12 import akka.testkit.JavaTestKit;
13 import akka.testkit.TestProbe;
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;
20
21 public class RoleChangeNotifierTest {
22
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;
28
29     @Before
30     public void setUp() throws Exception {
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));
36         }
37     }
38
39     @After
40     public void tearDown() throws Exception {
41         JavaTestKit.shutdownActorSystem(system);
42     }
43
44     @Test
45     public void testHandleReceiveRoleChange() throws Exception {
46         registerListeners();
47         final RoleChanged msg = new RoleChanged(MEMBER_ID, "old", "new");
48         notifier.tell(msg, ActorRef.noSender());
49         checkListenerRoleChangeNotification(msg);
50     }
51
52     @Test
53     public void testHandleReceiveLeaderStateChanged() throws Exception {
54         registerListeners();
55         final LeaderStateChanged msg = new LeaderStateChanged(MEMBER_ID, "leader", (short) 0);
56         notifier.tell(msg, ActorRef.noSender());
57         checkListenerLeaderStateChanged(msg);
58     }
59
60     @Test
61     public void testHandleReceiveRegistrationAfterRoleChange() throws Exception {
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());
66         registerListeners();
67         checkListenerRoleChangeNotification(lastRoleChanged);
68     }
69
70     @Test
71     public void testHandleReceiveRegistrationAfterLeaderStateChange() throws Exception {
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());
76         registerListeners();
77         checkListenerLeaderStateChanged(lastLeaderStateChanged);
78     }
79
80     private void registerListeners() {
81         for (final TestProbe listener : listeners) {
82             notifier.tell(new RegisterRoleChangeListener(), listener.ref());
83             listener.expectMsgClass(RegisterRoleChangeListenerReply.class);
84         }
85     }
86
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());
93         }
94     }
95
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());
102         }
103     }
104
105 }