From 0dad0bd5a4bf8f282ffe96cff5d3609166356977 Mon Sep 17 00:00:00 2001 From: tpantelis Date: Wed, 29 Oct 2014 12:05:05 -0400 Subject: [PATCH] Bug 2134: Fix intermittent RaftActorTest failure We need to wait for akka's recovery to complete before we perform our tests as akka's recovery runs async and may interfere with our tests and cause them to fail if the timing is right. This was seen once on jenkins. Change-Id: Ia748d17f662d64235881005e6522441b384c78ea Signed-off-by: tpantelis --- .../controller/cluster/raft/RaftActorTest.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/RaftActorTest.java b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/RaftActorTest.java index 69af77c749..fd9912244a 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/RaftActorTest.java +++ b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/RaftActorTest.java @@ -358,6 +358,11 @@ public class RaftActorTest extends AbstractActorTest { TestActorRef mockActorRef = TestActorRef.create(getSystem(), MockRaftActor.props(persistenceId, Collections.EMPTY_MAP, Optional.of(config)), persistenceId); + MockRaftActor mockRaftActor = mockActorRef.underlyingActor(); + + // Wait for akka's recovery to complete so it doesn't interfere. + mockRaftActor.waitForRecoveryComplete(); + ByteString snapshotBytes = fromObject(Arrays.asList( new MockRaftActorContext.MockPayload("A"), new MockRaftActorContext.MockPayload("B"), @@ -367,8 +372,6 @@ public class RaftActorTest extends AbstractActorTest { Snapshot snapshot = Snapshot.create(snapshotBytes.toByteArray(), Lists.newArrayList(), 3, 1 ,3, 1); - MockRaftActor mockRaftActor = mockActorRef.underlyingActor(); - mockRaftActor.onReceiveRecover(new SnapshotOffer(new SnapshotMetadata(persistenceId, 100, 100), snapshot)); CountDownLatch applyRecoverySnapshotLatch = mockRaftActor.getApplyRecoverySnapshotLatch(); @@ -402,8 +405,6 @@ public class RaftActorTest extends AbstractActorTest { mockRaftActor.onReceiveRecover(mock(RecoveryCompleted.class)); - mockRaftActor.waitForRecoveryComplete(); - mockActorRef.tell(PoisonPill.getInstance(), getRef()); }}; @@ -430,6 +431,9 @@ public class RaftActorTest extends AbstractActorTest { MockRaftActor mockRaftActor = mockActorRef.underlyingActor(); + // Wait for akka's recovery to complete so it doesn't interfere. + mockRaftActor.waitForRecoveryComplete(); + ByteString snapshotBytes = fromObject(Arrays.asList( new MockRaftActorContext.MockPayload("A"), new MockRaftActorContext.MockPayload("B"), @@ -470,8 +474,6 @@ public class RaftActorTest extends AbstractActorTest { mockRaftActor.onReceiveRecover(mock(RecoveryCompleted.class)); - mockRaftActor.waitForRecoveryComplete(); - mockActorRef.tell(PoisonPill.getInstance(), getRef()); }}; } -- 2.36.6