X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-akka-raft%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fraft%2FAbstractRaftActorIntegrationTest.java;h=bf55fa7aca01e1612e1384e007c34c4582da2308;hp=74440b5c24c37b7c22ba6ca8fb6ee1a3eed16c38;hb=4e000b89c3b5ac555cb1e2c39e999a8633b48a96;hpb=55e018bfad0c70b773641142d6fbf009cd67fda4 diff --git a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/AbstractRaftActorIntegrationTest.java b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/AbstractRaftActorIntegrationTest.java index 74440b5c24..bf55fa7aca 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/AbstractRaftActorIntegrationTest.java +++ b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/AbstractRaftActorIntegrationTest.java @@ -12,12 +12,10 @@ import static org.junit.Assert.assertNotNull; import akka.actor.ActorRef; import akka.actor.InvalidActorNameException; import akka.actor.PoisonPill; -import akka.actor.Props; import akka.actor.Terminated; import akka.dispatch.Dispatchers; import akka.testkit.JavaTestKit; import akka.testkit.TestActorRef; -import com.google.common.base.Optional; import com.google.common.base.Predicate; import com.google.common.base.Supplier; import com.google.common.collect.ImmutableMap; @@ -73,16 +71,9 @@ public abstract class AbstractRaftActorIntegrationTest extends AbstractActorTest private final TestActorRef collectorActor; private final Map, Boolean> dropMessages = new ConcurrentHashMap<>(); - private TestRaftActor(String id, Map peerAddresses, ConfigParams config, - TestActorRef collectorActor) { - super(id, peerAddresses, Optional.of(config), null); - this.collectorActor = collectorActor; - } - - public static Props props(String id, Map peerAddresses, ConfigParams config, - TestActorRef collectorActor) { - return Props.create(TestRaftActor.class, id, peerAddresses, config, collectorActor). - withDispatcher(Dispatchers.DefaultDispatcherId()); + private TestRaftActor(Builder builder) { + super(builder); + this.collectorActor = builder.collectorActor; } void startDropMessages(Class msgClass) { @@ -148,6 +139,23 @@ public abstract class AbstractRaftActorIntegrationTest extends AbstractActorTest public ActorRef collectorActor() { return collectorActor; } + + public static Builder newBuilder() { + return new Builder(); + } + + public static class Builder extends AbstractBuilder { + private TestActorRef collectorActor; + + public Builder collectorActor(TestActorRef collectorActor) { + this.collectorActor = collectorActor; + return this; + } + + private Builder() { + super(TestRaftActor.class); + } + } } protected final Logger testLog = LoggerFactory.getLogger(getClass()); @@ -178,7 +186,9 @@ public abstract class AbstractRaftActorIntegrationTest extends AbstractActorTest protected long initialTerm = 5; protected long currentTerm; - protected List expSnapshotState = new ArrayList<>(); + protected int snapshotBatchCount = 4; + + protected List expSnapshotState = new ArrayList<>(); @After public void tearDown() { @@ -191,7 +201,7 @@ public abstract class AbstractRaftActorIntegrationTest extends AbstractActorTest DefaultConfigParamsImpl configParams = new DefaultConfigParamsImpl(); configParams.setHeartBeatInterval(new FiniteDuration(100, TimeUnit.MILLISECONDS)); configParams.setElectionTimeoutFactor(1); - configParams.setSnapshotBatchCount(4); + configParams.setSnapshotBatchCount(snapshotBatchCount); configParams.setSnapshotDataThresholdPercentage(70); configParams.setIsolatedLeaderCheckInterval(new FiniteDuration(1, TimeUnit.DAYS)); return configParams; @@ -210,16 +220,19 @@ public abstract class AbstractRaftActorIntegrationTest extends AbstractActorTest protected TestActorRef newTestRaftActor(String id, Map peerAddresses, ConfigParams configParams) { - TestActorRef collectorActor = factory.createTestActor( + return newTestRaftActor(id, TestRaftActor.newBuilder().peerAddresses(peerAddresses != null ? peerAddresses : + Collections.emptyMap()).config(configParams)); + } + + protected TestActorRef newTestRaftActor(String id, TestRaftActor.Builder builder) { + builder.collectorActor(factory.createTestActor( MessageCollectorActor.props().withDispatcher(Dispatchers.DefaultDispatcherId()), - factory.generateActorId(id + "-collector")); + factory.generateActorId(id + "-collector"))).id(id); InvalidActorNameException lastEx = null; for(int i = 0; i < 10; i++) { try { - return factory.createTestActor(TestRaftActor.props(id, - peerAddresses != null ? peerAddresses : Collections.emptyMap(), - configParams, collectorActor), id); + return factory.createTestActor(builder.props().withDispatcher(Dispatchers.DefaultDispatcherId()), id); } catch (InvalidActorNameException e) { lastEx = e; Uninterruptibles.sleepUninterruptibly(100, TimeUnit.MILLISECONDS); @@ -251,7 +264,7 @@ public abstract class AbstractRaftActorIntegrationTest extends AbstractActorTest @SuppressWarnings("unchecked") protected void verifySnapshot(String prefix, Snapshot snapshot, long lastAppliedTerm, - int lastAppliedIndex, long lastTerm, long lastIndex) + long lastAppliedIndex, long lastTerm, long lastIndex) throws Exception { assertEquals(prefix + " Snapshot getLastAppliedTerm", lastAppliedTerm, snapshot.getLastAppliedTerm()); assertEquals(prefix + " Snapshot getLastAppliedIndex", lastAppliedIndex, snapshot.getLastAppliedIndex()); @@ -259,7 +272,8 @@ public abstract class AbstractRaftActorIntegrationTest extends AbstractActorTest assertEquals(prefix + " Snapshot getLastIndex", lastIndex, snapshot.getLastIndex()); List actualState = (List)MockRaftActor.toObject(snapshot.getState()); - assertEquals(prefix + " Snapshot getState size", expSnapshotState.size(), actualState.size()); + assertEquals(String.format("%s Snapshot getState size. Expected %s: . Actual: %s", prefix, expSnapshotState, + actualState), expSnapshotState.size(), actualState.size()); for(int i = 0; i < expSnapshotState.size(); i++) { assertEquals(prefix + " Snapshot state " + i, expSnapshotState.get(i), actualState.get(i)); } @@ -307,6 +321,34 @@ public abstract class AbstractRaftActorIntegrationTest extends AbstractActorTest } protected String testActorPath(String id){ - return "akka://test/user" + id; + return factory.createTestActorPath(id); + } + + protected void verifyLeadersTrimmedLog(long lastIndex) { + verifyTrimmedLog("Leader", leaderActor, lastIndex, lastIndex - 1); + } + + protected void verifyLeadersTrimmedLog(long lastIndex, long replicatedToAllIndex) { + verifyTrimmedLog("Leader", leaderActor, lastIndex, replicatedToAllIndex); + } + + protected void verifyFollowersTrimmedLog(int num, TestActorRef actorRef, long lastIndex) { + verifyTrimmedLog("Follower " + num, actorRef, lastIndex, lastIndex - 1); + } + + protected void verifyTrimmedLog(String name, TestActorRef actorRef, long lastIndex, + long replicatedToAllIndex) { + TestRaftActor actor = actorRef.underlyingActor(); + RaftActorContext context = actor.getRaftActorContext(); + long snapshotIndex = lastIndex - 1; + assertEquals(name + " snapshot term", snapshotIndex < 0 ? -1 : currentTerm, + context.getReplicatedLog().getSnapshotTerm()); + assertEquals(name + " snapshot index", snapshotIndex, context.getReplicatedLog().getSnapshotIndex()); + assertEquals(name + " journal log size", 1, context.getReplicatedLog().size()); + assertEquals(name + " journal last index", lastIndex, context.getReplicatedLog().lastIndex()); + assertEquals(name + " commit index", lastIndex, context.getCommitIndex()); + assertEquals(name + " last applied", lastIndex, context.getLastApplied()); + assertEquals(name + " replicatedToAllIndex", replicatedToAllIndex, + actor.getCurrentBehavior().getReplicatedToAllIndex()); } }