use of org.opendaylight.controller.cluster.notifications.RoleChangeNotifier in project controller by opendaylight.
the class RoleChangeNotifierTest method testHandleRaftRoleChanged.
@Test
public void testHandleRaftRoleChanged() throws Exception {
new TestKit(getSystem()) {
{
String memberId = "testHandleRegisterRoleChangeListenerWithNotificationSet";
ActorRef listenerActor = getSystem().actorOf(MessageCollectorActor.props());
ActorRef shardActor = getTestActor();
TestActorRef<RoleChangeNotifier> notifierTestActorRef = TestActorRef.create(getSystem(), RoleChangeNotifier.getProps(memberId), memberId);
notifierTestActorRef.tell(new RoleChanged(memberId, RaftState.Candidate.name(), RaftState.Leader.name()), shardActor);
// no notification should be sent as listener has not yet
// registered
assertNull(MessageCollectorActor.getFirstMatching(listenerActor, RoleChangeNotification.class));
// listener registers after role has been changed, ensure we
// sent the latest role change after a reply
notifierTestActorRef.tell(new RegisterRoleChangeListener(), listenerActor);
RegisterRoleChangeListenerReply reply = MessageCollectorActor.getFirstMatching(listenerActor, RegisterRoleChangeListenerReply.class);
assertNotNull(reply);
RoleChangeNotification notification = MessageCollectorActor.getFirstMatching(listenerActor, RoleChangeNotification.class);
assertNotNull(notification);
assertEquals(RaftState.Candidate.name(), notification.getOldRole());
assertEquals(RaftState.Leader.name(), notification.getNewRole());
}
};
}
use of org.opendaylight.controller.cluster.notifications.RoleChangeNotifier in project controller by opendaylight.
the class RoleChangeNotifierTest method testHandleRegisterRoleChangeListener.
@Test
public void testHandleRegisterRoleChangeListener() throws Exception {
new TestKit(getSystem()) {
{
String memberId = "testHandleRegisterRoleChangeListener";
ActorRef listenerActor = getSystem().actorOf(MessageCollectorActor.props());
TestActorRef<RoleChangeNotifier> notifierTestActorRef = TestActorRef.create(getSystem(), RoleChangeNotifier.getProps(memberId), memberId);
notifierTestActorRef.tell(new RegisterRoleChangeListener(), listenerActor);
RegisterRoleChangeListenerReply reply = MessageCollectorActor.getFirstMatching(listenerActor, RegisterRoleChangeListenerReply.class);
assertNotNull(reply);
RoleChangeNotification notification = MessageCollectorActor.getFirstMatching(listenerActor, RoleChangeNotification.class);
assertNull(notification);
}
};
}
use of org.opendaylight.controller.cluster.notifications.RoleChangeNotifier in project controller by opendaylight.
the class RoleChangeNotifierTest method testHandleLeaderStateChanged.
@Test
public void testHandleLeaderStateChanged() throws Exception {
new TestKit(getSystem()) {
{
String actorId = "testHandleLeaderStateChanged";
TestActorRef<RoleChangeNotifier> notifierTestActorRef = TestActorRef.create(getSystem(), RoleChangeNotifier.getProps(actorId), actorId);
notifierTestActorRef.tell(new LeaderStateChanged("member1", "leader1", (short) 5), ActorRef.noSender());
// listener registers after the sate has been changed, ensure we
// sent the latest state change after a reply
notifierTestActorRef.tell(new RegisterRoleChangeListener(), getRef());
expectMsgClass(RegisterRoleChangeListenerReply.class);
LeaderStateChanged leaderStateChanged = expectMsgClass(LeaderStateChanged.class);
assertEquals("getMemberId", "member1", leaderStateChanged.getMemberId());
assertEquals("getLeaderId", "leader1", leaderStateChanged.getLeaderId());
assertEquals("getLeaderPayloadVersion", 5, leaderStateChanged.getLeaderPayloadVersion());
notifierTestActorRef.tell(new LeaderStateChanged("member1", "leader2", (short) 6), ActorRef.noSender());
leaderStateChanged = expectMsgClass(LeaderStateChanged.class);
assertEquals("getMemberId", "member1", leaderStateChanged.getMemberId());
assertEquals("getLeaderId", "leader2", leaderStateChanged.getLeaderId());
assertEquals("getLeaderPayloadVersion", 6, leaderStateChanged.getLeaderPayloadVersion());
}
};
}
Aggregations