X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-distributed-datastore%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fdatastore%2FRoleChangeNotifierTest.java;h=bbcedd681104eaa45b905ce981cb991e7aa3ee49;hp=4e61260550cdc9ab4f5b7e9409e295337e0d47b8;hb=12fcdfe39aa26dcba7fd3bb4d4c68e3d02e65c51;hpb=d145dc860316c87bc55e35e20b2ca0359df433f4 diff --git a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/RoleChangeNotifierTest.java b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/RoleChangeNotifierTest.java index 4e61260550..bbcedd6811 100644 --- a/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/RoleChangeNotifierTest.java +++ b/opendaylight/md-sal/sal-distributed-datastore/src/test/java/org/opendaylight/controller/cluster/datastore/RoleChangeNotifierTest.java @@ -1,79 +1,120 @@ +/* + * Copyright (c) 2014, 2015 Cisco Systems, Inc. and others. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 which accompanies this distribution, + * and is available at http://www.eclipse.org/legal/epl-v10.html + */ + package org.opendaylight.controller.cluster.datastore; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; import akka.actor.ActorRef; -import akka.actor.Props; -import akka.testkit.JavaTestKit; import akka.testkit.TestActorRef; +import akka.testkit.javadsl.TestKit; import org.junit.Test; -import org.opendaylight.controller.cluster.datastore.utils.MessageCollectorActor; +import org.opendaylight.controller.cluster.notifications.LeaderStateChanged; import org.opendaylight.controller.cluster.notifications.RegisterRoleChangeListener; import org.opendaylight.controller.cluster.notifications.RegisterRoleChangeListenerReply; import org.opendaylight.controller.cluster.notifications.RoleChangeNotification; import org.opendaylight.controller.cluster.notifications.RoleChangeNotifier; import org.opendaylight.controller.cluster.notifications.RoleChanged; import org.opendaylight.controller.cluster.raft.RaftState; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; +import org.opendaylight.controller.cluster.raft.utils.MessageCollectorActor; -public class RoleChangeNotifierTest extends AbstractActorTest { +public class RoleChangeNotifierTest extends AbstractActorTest { @Test - public void testHandleRegisterRoleChangeListener() throws Exception { - new JavaTestKit(getSystem()) {{ - String memberId = "testHandleRegisterRoleChangeListener"; - ActorRef listenerActor = getSystem().actorOf(Props.create(MessageCollectorActor.class)); - - TestActorRef notifierTestActorRef = TestActorRef.create( - getSystem(), RoleChangeNotifier.getProps(memberId), memberId); - - notifierTestActorRef.tell(new RegisterRoleChangeListener(), listenerActor); - - RegisterRoleChangeListenerReply reply = (RegisterRoleChangeListenerReply) - MessageCollectorActor.getFirstMatching(listenerActor, RegisterRoleChangeListenerReply.class); - assertNotNull(reply); - - RoleChangeNotification notification = (RoleChangeNotification) - MessageCollectorActor.getFirstMatching(listenerActor, RoleChangeNotification.class); - assertNull(notification); - }}; - + public void testHandleRegisterRoleChangeListener() { + new TestKit(getSystem()) { + { + String memberId = "testHandleRegisterRoleChangeListener"; + ActorRef listenerActor = getSystem().actorOf(MessageCollectorActor.props()); + + TestActorRef 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); + } + }; } @Test - public void testHandleRaftRoleChanged() throws Exception { - new JavaTestKit(getSystem()) {{ - String memberId = "testHandleRegisterRoleChangeListenerWithNotificationSet"; - ActorRef listenerActor = getSystem().actorOf(Props.create(MessageCollectorActor.class)); - ActorRef shardActor = getTestActor(); + public void testHandleRaftRoleChanged() { + new TestKit(getSystem()) { + { + String memberId = "testHandleRegisterRoleChangeListenerWithNotificationSet"; + ActorRef listenerActor = getSystem().actorOf(MessageCollectorActor.props()); + ActorRef shardActor = getTestActor(); - TestActorRef notifierTestActorRef = TestActorRef.create( - getSystem(), RoleChangeNotifier.getProps(memberId), memberId); + TestActorRef notifierTestActorRef = TestActorRef.create(getSystem(), + RoleChangeNotifier.getProps(memberId), memberId); - RoleChangeNotifier roleChangeNotifier = notifierTestActorRef.underlyingActor(); + notifierTestActorRef.tell( + new RoleChanged(memberId, RaftState.Candidate.name(), RaftState.Leader.name()), shardActor); - 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)); - // 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); - // 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); - RegisterRoleChangeListenerReply reply = (RegisterRoleChangeListenerReply) - 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()); - RoleChangeNotification notification = (RoleChangeNotification) - MessageCollectorActor.getFirstMatching(listenerActor, RoleChangeNotification.class); - assertNotNull(notification); - assertEquals(RaftState.Candidate.name(), notification.getOldRole()); - assertEquals(RaftState.Leader.name(), notification.getNewRole()); + } + }; - }}; + } + @Test + public void testHandleLeaderStateChanged() { + new TestKit(getSystem()) { + { + String actorId = "testHandleLeaderStateChanged"; + TestActorRef 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()); + } + }; } } - -