X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-akka-raft%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fraft%2FMigratedMessagesTest.java;h=5a1ac54c7cab6f8a477bce09d670e80463269c84;hb=f33beecf2a10955a9219757529ba3017079816cc;hp=9ce89093fd6ef36403d09dc539814a65f94d6feb;hpb=79e6240ad565717e2fba62a339f11fcbd239f440;p=controller.git diff --git a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/MigratedMessagesTest.java b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/MigratedMessagesTest.java index 9ce89093fd..5a1ac54c7c 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/MigratedMessagesTest.java +++ b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/MigratedMessagesTest.java @@ -11,13 +11,12 @@ import static org.junit.Assert.assertEquals; import akka.actor.ActorRef; import akka.dispatch.Dispatchers; -import akka.testkit.JavaTestKit; import akka.testkit.TestActorRef; import com.google.common.base.Optional; import com.google.common.collect.ImmutableMap; +import com.google.common.io.ByteSource; import com.google.common.util.concurrent.Uninterruptibles; -import java.util.Arrays; -import java.util.HashSet; +import java.io.OutputStream; import java.util.List; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; @@ -26,9 +25,10 @@ import org.junit.Before; import org.junit.Test; import org.opendaylight.controller.cluster.raft.base.messages.CaptureSnapshotReply; import org.opendaylight.controller.cluster.raft.persisted.ApplyJournalEntries; -import org.opendaylight.controller.cluster.raft.persisted.ServerConfigurationPayload; -import org.opendaylight.controller.cluster.raft.persisted.ServerInfo; +import org.opendaylight.controller.cluster.raft.persisted.ByteState; import org.opendaylight.controller.cluster.raft.persisted.SimpleReplicatedLogEntry; +import org.opendaylight.controller.cluster.raft.persisted.Snapshot; +import org.opendaylight.controller.cluster.raft.persisted.Snapshot.State; import org.opendaylight.controller.cluster.raft.persisted.UpdateElectionTerm; import org.opendaylight.controller.cluster.raft.policy.DisableElectionsRaftPolicy; import org.opendaylight.controller.cluster.raft.utils.InMemoryJournal; @@ -52,104 +52,12 @@ public class MigratedMessagesTest extends AbstractActorTest { } @After - public void tearDown() throws Exception { + public void tearDown() { factory.close(); InMemoryJournal.clear(); InMemorySnapshotStore.clear(); } - @Test - public void testSnapshotAfterStartupWithMigratedServerConfigPayloadAndPersistenceEnabled() { - TEST_LOG.info("testSnapshotAfterStartupWithMigratedServerConfigPayloadAndPersistenceEnabled starting"); - doTestSnapshotAfterStartupWithMigratedServerConfigPayload(true); - TEST_LOG.info("testSnapshotAfterStartupWithMigratedServerConfigPayloadAndPersistenceEnabled ending"); - } - - @Test - public void testSnapshotAfterStartupWithMigratedServerConfigPayloadAndPersistenceDisabled() { - TEST_LOG.info("testSnapshotAfterStartupWithMigratedServerConfigPayloadAndPersistenceDisabled starting"); - - TestActorRef actor = doTestSnapshotAfterStartupWithMigratedServerConfigPayload(false); - MockRaftActor mockRaftActor = actor.underlyingActor(); - String id = mockRaftActor.persistenceId(); - ConfigParams config = mockRaftActor.getRaftActorContext().getConfigParams(); - - factory.killActor(actor, new JavaTestKit(getSystem())); - - actor = factory.createTestActor(MockRaftActor.builder().id(id).config(config) - .persistent(Optional.of(false)).props().withDispatcher(Dispatchers.DefaultDispatcherId()), id); - mockRaftActor = actor.underlyingActor(); - mockRaftActor.waitForRecoveryComplete(); - - assertEquals("electionTerm", 1, - mockRaftActor.getRaftActorContext().getTermInformation().getCurrentTerm()); - assertEquals("votedFor", id, - mockRaftActor.getRaftActorContext().getTermInformation().getVotedFor()); - - TEST_LOG.info("testSnapshotAfterStartupWithMigratedServerConfigPayloadAndPersistenceDisabled ending"); - } - - @Test - public void testSnapshotAfterStartupWithMigratedUpdateElectionTermAndPersistenceEnabled() { - TEST_LOG.info("testSnapshotAfterStartupWithMigratedUpdateElectionTermAndPersistenceEnabled starting"); - - String persistenceId = factory.generateActorId("test-actor-"); - - org.opendaylight.controller.cluster.raft.base.messages.UpdateElectionTerm updateElectionTerm = - new org.opendaylight.controller.cluster.raft.base.messages.UpdateElectionTerm(5, persistenceId); - - InMemoryJournal.addEntry(persistenceId, 1, updateElectionTerm); - - doTestSnapshotAfterStartupWithMigratedMessage(persistenceId, true, snapshot -> { - assertEquals("getElectionVotedFor", persistenceId, snapshot.getElectionVotedFor()); - assertEquals("getElectionTerm", 5, snapshot.getElectionTerm()); - }); - - TEST_LOG.info("testSnapshotAfterStartupWithMigratedUpdateElectionTermAndPersistenceEnabled ending"); - } - - @Test - public void testSnapshotAfterStartupWithMigratedUpdateElectionTermAndPersistenceDisabled() { - TEST_LOG.info("testSnapshotAfterStartupWithMigratedUpdateElectionTermAndPersistenceDisabled starting"); - - String persistenceId = factory.generateActorId("test-actor-"); - - org.opendaylight.controller.cluster.raft.base.messages.UpdateElectionTerm updateElectionTerm = - new org.opendaylight.controller.cluster.raft.base.messages.UpdateElectionTerm(5, persistenceId); - - InMemoryJournal.addEntry(persistenceId, 1, updateElectionTerm); - - doTestSnapshotAfterStartupWithMigratedMessage(persistenceId, false, snapshot -> { - assertEquals("getElectionVotedFor", persistenceId, snapshot.getElectionVotedFor()); - assertEquals("getElectionTerm", 5, snapshot.getElectionTerm()); - }); - - TEST_LOG.info("testSnapshotAfterStartupWithMigratedUpdateElectionTermAndPersistenceDisabled ending"); - } - - @Test - public void testSnapshotAfterStartupWithMigratedApplyJournalEntries() { - TEST_LOG.info("testSnapshotAfterStartupWithMigratedApplyJournalEntries starting"); - - String persistenceId = factory.generateActorId("test-actor-"); - - InMemoryJournal.addEntry(persistenceId, 1, new UpdateElectionTerm(1, persistenceId)); - InMemoryJournal.addEntry(persistenceId, 2, new SimpleReplicatedLogEntry(0, 1, - new MockRaftActorContext.MockPayload("A"))); - InMemoryJournal.addEntry(persistenceId, 3, - new org.opendaylight.controller.cluster.raft.base.messages.ApplyJournalEntries(0)); - - - doTestSnapshotAfterStartupWithMigratedMessage(persistenceId, true, snapshot -> { - assertEquals("getLastAppliedIndex", 0, snapshot.getLastAppliedIndex()); - assertEquals("getLastAppliedTerm", 1, snapshot.getLastAppliedTerm()); - assertEquals("getLastIndex", 0, snapshot.getLastIndex()); - assertEquals("getLastTerm", 1, snapshot.getLastTerm()); - }); - - TEST_LOG.info("testSnapshotAfterStartupWithMigratedApplyJournalEntries ending"); - } - @Test public void testNoSnapshotAfterStartupWithNoMigratedMessages() { TEST_LOG.info("testNoSnapshotAfterStartupWithNoMigratedMessages starting"); @@ -164,12 +72,17 @@ public class MigratedMessagesTest extends AbstractActorTest { RaftActorSnapshotCohort snapshotCohort = new RaftActorSnapshotCohort() { @Override - public void createSnapshot(ActorRef actorRef) { - actorRef.tell(new CaptureSnapshotReply(new byte[0]), actorRef); + public void createSnapshot(ActorRef actorRef, java.util.Optional installSnapshotStream) { + actorRef.tell(new CaptureSnapshotReply(ByteState.empty(), installSnapshotStream), actorRef); + } + + @Override + public void applySnapshot(Snapshot.State snapshotState) { } @Override - public void applySnapshot(byte[] snapshotBytes) { + public State deserializeSnapshot(ByteSource snapshotBytes) { + throw new UnsupportedOperationException(); } }; @@ -188,57 +101,9 @@ public class MigratedMessagesTest extends AbstractActorTest { TEST_LOG.info("testNoSnapshotAfterStartupWithNoMigratedMessages ending"); } - @Test - public void testSnapshotAfterStartupWithMigratedReplicatedLogEntry() { - TEST_LOG.info("testSnapshotAfterStartupWithMigratedReplicatedLogEntry starting"); - - String persistenceId = factory.generateActorId("test-actor-"); - - InMemoryJournal.addEntry(persistenceId, 1, new UpdateElectionTerm(1, persistenceId)); - MockRaftActorContext.MockPayload expPayload = new MockRaftActorContext.MockPayload("A"); - InMemoryJournal.addEntry(persistenceId, 2, new org.opendaylight.controller.cluster.raft.ReplicatedLogImplEntry( - 0, 1, expPayload)); - - doTestSnapshotAfterStartupWithMigratedMessage(persistenceId, true, snapshot -> { - assertEquals("Unapplied entries size", 1, snapshot.getUnAppliedEntries().size()); - assertEquals("Unapplied entry term", 1, snapshot.getUnAppliedEntries().get(0).getTerm()); - assertEquals("Unapplied entry index", 0, snapshot.getUnAppliedEntries().get(0).getIndex()); - assertEquals("Unapplied entry data", expPayload, snapshot.getUnAppliedEntries().get(0).getData()); - }); - - TEST_LOG.info("testSnapshotAfterStartupWithMigratedReplicatedLogEntry ending"); - } - - private TestActorRef doTestSnapshotAfterStartupWithMigratedServerConfigPayload(boolean persistent) { - String persistenceId = factory.generateActorId("test-actor-"); - - org.opendaylight.controller.cluster.raft.ServerConfigurationPayload persistedServerConfig = - new org.opendaylight.controller.cluster.raft.ServerConfigurationPayload(Arrays.asList( - new org.opendaylight.controller.cluster.raft.ServerConfigurationPayload.ServerInfo( - persistenceId, true), - new org.opendaylight.controller.cluster.raft.ServerConfigurationPayload.ServerInfo( - "downNode", true))); - - ServerConfigurationPayload expectedServerConfig = new ServerConfigurationPayload(Arrays.asList( - new ServerInfo(persistenceId, true), new ServerInfo("downNode", true))); - - InMemoryJournal.addEntry(persistenceId, 1, new UpdateElectionTerm(1, persistenceId)); - InMemoryJournal.addEntry(persistenceId, 3, new SimpleReplicatedLogEntry(0, 1, persistedServerConfig)); - - TestActorRef actor = doTestSnapshotAfterStartupWithMigratedMessage(persistenceId, - persistent, snapshot -> { - assertEquals("getElectionVotedFor", persistenceId, snapshot.getElectionVotedFor()); - assertEquals("getElectionTerm", 1, snapshot.getElectionTerm()); - assertEquals("getServerConfiguration", new HashSet<>(expectedServerConfig.getServerConfig()), - new HashSet<>(snapshot.getServerConfiguration().getServerConfig())); - }); - - return actor; - } - @SuppressWarnings("checkstyle:IllegalCatch") private TestActorRef doTestSnapshotAfterStartupWithMigratedMessage(String id, boolean persistent, - Consumer snapshotVerifier) { + Consumer snapshotVerifier, final State snapshotState) { InMemorySnapshotStore.addSnapshotSavedLatch(id); InMemoryJournal.addDeleteMessagesCompleteLatch(id); DefaultConfigParamsImpl config = new DefaultConfigParamsImpl(); @@ -246,12 +111,17 @@ public class MigratedMessagesTest extends AbstractActorTest { RaftActorSnapshotCohort snapshotCohort = new RaftActorSnapshotCohort() { @Override - public void createSnapshot(ActorRef actorRef) { - actorRef.tell(new CaptureSnapshotReply(new byte[0]), actorRef); + public void createSnapshot(ActorRef actorRef, java.util.Optional installSnapshotStream) { + actorRef.tell(new CaptureSnapshotReply(snapshotState, installSnapshotStream), actorRef); + } + + @Override + public void applySnapshot(State newState) { } @Override - public void applySnapshot(byte[] snapshotBytes) { + public State deserializeSnapshot(ByteSource snapshotBytes) { + throw new UnsupportedOperationException(); } };