BUG 4017: Notification publish service is not available from provider context
[controller.git] / opendaylight / md-sal / sal-akka-raft / src / test / java / org / opendaylight / controller / cluster / raft / RaftActorLeadershipTransferCohortTest.java
index 5680a0b5901b3be485ce42ecc32168f18c608775..9037f68b82b720b5e91d069066f36bfb27e576a7 100644 (file)
@@ -7,11 +7,15 @@
  */
 package org.opendaylight.controller.cluster.raft;
 
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.timeout;
 import static org.mockito.Mockito.verify;
+import akka.actor.ActorRef;
 import akka.dispatch.Dispatchers;
+import com.google.common.base.Function;
 import org.junit.After;
 import org.junit.Test;
 import org.opendaylight.controller.cluster.raft.RaftActorLeadershipTransferCohort.OnComplete;
@@ -26,7 +30,8 @@ public class RaftActorLeadershipTransferCohortTest extends AbstractActorTest {
     private MockRaftActor mockRaftActor;
     private RaftActorLeadershipTransferCohort cohort;
     private final OnComplete onComplete = mock(OnComplete.class);
-    DefaultConfigParamsImpl config = new DefaultConfigParamsImpl();
+    private final DefaultConfigParamsImpl config = new DefaultConfigParamsImpl();
+    private Function<Runnable, Void> pauseLeaderFunction;
 
     @After
     public void tearDown() {
@@ -34,9 +39,13 @@ public class RaftActorLeadershipTransferCohortTest extends AbstractActorTest {
     }
 
     private void setup() {
+        doNothing().when(onComplete).onSuccess(any(ActorRef.class), any(ActorRef.class));
+        doNothing().when(onComplete).onFailure(any(ActorRef.class), any(ActorRef.class));
+
         String persistenceId = factory.generateActorId("leader-");
         mockRaftActor = factory.<MockRaftActor>createTestActor(MockRaftActor.builder().id(persistenceId).config(
-                config).props().withDispatcher(Dispatchers.DefaultDispatcherId()), persistenceId).underlyingActor();
+                config).pauseLeaderFunction(pauseLeaderFunction).props().withDispatcher(Dispatchers.DefaultDispatcherId()),
+                persistenceId).underlyingActor();
         cohort = new RaftActorLeadershipTransferCohort(mockRaftActor, null);
         cohort.addOnComplete(onComplete);
         mockRaftActor.waitForInitializeBehaviorComplete();
@@ -71,7 +80,7 @@ public class RaftActorLeadershipTransferCohortTest extends AbstractActorTest {
     public void testNotLeaderOnRun() {
         config.setElectionTimeoutFactor(10000);
         setup();
-        cohort.run();
+        cohort.doTransfer();
         verify(onComplete).onSuccess(mockRaftActor.self(), null);
     }
 
@@ -81,4 +90,18 @@ public class RaftActorLeadershipTransferCohortTest extends AbstractActorTest {
         cohort.abortTransfer();
         verify(onComplete).onFailure(mockRaftActor.self(), null);
     }
+
+    @Test
+    public void testPauseLeaderTimeout() {
+        pauseLeaderFunction = new Function<Runnable, Void>() {
+            @Override
+            public Void apply(Runnable input) {
+                return null;
+            }
+        };
+
+        setup();
+        cohort.init();
+        verify(onComplete, timeout(2000)).onFailure(mockRaftActor.self(), null);
+    }
 }