X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=opendaylight%2Fmd-sal%2Fsal-akka-raft%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fraft%2FSnapshotManagerTest.java;h=c619917fd4f61dba44d54a6746c256ae23a1d5ef;hb=refs%2Fchanges%2F03%2F42303%2F2;hp=df83f8f55843b4f82ad9f4f8336c8b6913482c5b;hpb=928f7af243a1e7ff9cf2b9b58846fa16a7009cca;p=controller.git diff --git a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/SnapshotManagerTest.java b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/SnapshotManagerTest.java index df83f8f558..c619917fd4 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/SnapshotManagerTest.java +++ b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/SnapshotManagerTest.java @@ -22,12 +22,9 @@ import static org.mockito.Mockito.reset; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import akka.actor.ActorRef; -import akka.japi.Procedure; import akka.persistence.SnapshotSelectionCriteria; import akka.testkit.TestActorRef; -import com.google.common.collect.ImmutableMap; import java.util.Arrays; -import java.util.HashMap; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -38,6 +35,7 @@ import org.opendaylight.controller.cluster.DataPersistenceProvider; import org.opendaylight.controller.cluster.raft.SnapshotManager.LastAppliedTermInformationReader; import org.opendaylight.controller.cluster.raft.base.messages.CaptureSnapshot; import org.opendaylight.controller.cluster.raft.base.messages.SendInstallSnapshot; +import org.opendaylight.controller.cluster.raft.base.messages.SnapshotComplete; import org.opendaylight.controller.cluster.raft.behaviors.RaftActorBehavior; import org.opendaylight.controller.cluster.raft.utils.MessageCollectorActor; import org.slf4j.LoggerFactory; @@ -60,7 +58,10 @@ public class SnapshotManagerTest extends AbstractActorTest { private RaftActorBehavior mockRaftActorBehavior; @Mock - private Procedure mockProcedure; + private Runnable mockProcedure; + + @Mock + private ElectionTerm mockElectionTerm; private SnapshotManager snapshotManager; @@ -72,18 +73,19 @@ public class SnapshotManagerTest extends AbstractActorTest { public void setUp(){ MockitoAnnotations.initMocks(this); - doReturn(new HashMap<>()).when(mockRaftActorContext).getPeerAddresses(); + doReturn(false).when(mockRaftActorContext).hasFollowers(); doReturn(mockConfigParams).when(mockRaftActorContext).getConfigParams(); doReturn(10L).when(mockConfigParams).getSnapshotBatchCount(); doReturn(70).when(mockConfigParams).getSnapshotDataThresholdPercentage(); doReturn(mockReplicatedLog).when(mockRaftActorContext).getReplicatedLog(); doReturn("123").when(mockRaftActorContext).getId(); doReturn(mockDataPersistenceProvider).when(mockRaftActorContext).getPersistenceProvider(); + doReturn(mockRaftActorBehavior).when(mockRaftActorContext).getCurrentBehavior(); doReturn("123").when(mockRaftActorBehavior).getLeaderId(); - ElectionTerm mockElectionTerm = mock(ElectionTerm.class); doReturn(mockElectionTerm).when(mockRaftActorContext).getTermInformation(); doReturn(5L).when(mockElectionTerm).getCurrentTerm(); + doReturn("member5").when(mockElectionTerm).getVotedFor(); snapshotManager = new SnapshotManager(mockRaftActorContext, LoggerFactory.getLogger(this.getClass())); factory = new TestActorFactory(getSystem()); @@ -91,7 +93,7 @@ public class SnapshotManagerTest extends AbstractActorTest { actorRef = factory.createTestActor(MessageCollectorActor.props(), factory.generateActorId("test-")); doReturn(actorRef).when(mockRaftActorContext).getActor(); - snapshotManager.setCreateSnapshotCallable(mockProcedure); + snapshotManager.setCreateSnapshotRunnable(mockProcedure); } @After @@ -113,7 +115,7 @@ public class SnapshotManagerTest extends AbstractActorTest { assertEquals(true, snapshotManager.isCapturing()); - verify(mockProcedure).apply(null); + verify(mockProcedure).run(); CaptureSnapshot captureSnapshot = snapshotManager.getCaptureSnapshot(); @@ -140,7 +142,7 @@ public class SnapshotManagerTest extends AbstractActorTest { assertEquals(true, snapshotManager.isCapturing()); - verify(mockProcedure).apply(null); + verify(mockProcedure).run(); CaptureSnapshot captureSnapshot = snapshotManager.getCaptureSnapshot(); @@ -168,7 +170,7 @@ public class SnapshotManagerTest extends AbstractActorTest { assertEquals(true, snapshotManager.isCapturing()); - verify(mockProcedure).apply(null); + verify(mockProcedure).run(); CaptureSnapshot captureSnapshot = snapshotManager.getCaptureSnapshot(); @@ -191,7 +193,7 @@ public class SnapshotManagerTest extends AbstractActorTest { @Test public void testCaptureWithCreateProcedureError () throws Exception { - doThrow(new Exception("mock")).when(mockProcedure).apply(null); + doThrow(new RuntimeException("mock")).when(mockProcedure).run(); boolean capture = snapshotManager.capture(new MockRaftActorContext.MockReplicatedLogEntry(1,9, new MockRaftActorContext.MockPayload()), 9); @@ -200,7 +202,7 @@ public class SnapshotManagerTest extends AbstractActorTest { assertEquals(false, snapshotManager.isCapturing()); - verify(mockProcedure).apply(null); + verify(mockProcedure).run(); } @Test @@ -210,7 +212,7 @@ public class SnapshotManagerTest extends AbstractActorTest { assertTrue(capture); - verify(mockProcedure).apply(null); + verify(mockProcedure).run(); reset(mockProcedure); @@ -220,7 +222,7 @@ public class SnapshotManagerTest extends AbstractActorTest { assertFalse(capture); - verify(mockProcedure, never()).apply(null); + verify(mockProcedure, never()).run(); } @Test @@ -228,7 +230,7 @@ public class SnapshotManagerTest extends AbstractActorTest { doReturn(7L).when(mockReplicatedLog).getSnapshotIndex(); doReturn(1L).when(mockReplicatedLog).getSnapshotTerm(); - doReturn(ImmutableMap.builder().put("follower-1", "").build()).when(mockRaftActorContext).getPeerAddresses(); + doReturn(true).when(mockRaftActorContext).hasFollowers(); doReturn(8L).when(mockRaftActorContext).getLastApplied(); @@ -245,7 +247,7 @@ public class SnapshotManagerTest extends AbstractActorTest { snapshotManager.capture(lastLogEntry, -1); byte[] bytes = new byte[] {1,2,3,4,5,6,7,8,9,10}; - snapshotManager.persist(bytes, mockRaftActorBehavior, Runtime.getRuntime().totalMemory()); + snapshotManager.persist(bytes, Runtime.getRuntime().totalMemory()); ArgumentCaptor snapshotArgumentCaptor = ArgumentCaptor.forClass(Snapshot.class); verify(mockDataPersistenceProvider).saveSnapshot(snapshotArgumentCaptor.capture()); @@ -258,6 +260,8 @@ public class SnapshotManagerTest extends AbstractActorTest { assertEquals("getLastAppliedIndex", 8L, snapshot.getLastAppliedIndex()); assertArrayEquals("getState", bytes, snapshot.getState()); assertEquals("getUnAppliedEntries", Arrays.asList(lastLogEntry), snapshot.getUnAppliedEntries()); + assertEquals("electionTerm", mockElectionTerm.getCurrentTerm(), snapshot.getElectionTerm()); + assertEquals("electionVotedFor", mockElectionTerm.getVotedFor(), snapshot.getElectionVotedFor()); verify(mockReplicatedLog).snapshotPreCommit(7L, 1L); } @@ -276,7 +280,7 @@ public class SnapshotManagerTest extends AbstractActorTest { new MockRaftActorContext.MockPayload()), 9); byte[] bytes = new byte[] {1,2,3,4,5,6,7,8,9,10}; - snapshotManager.persist(bytes, mockRaftActorBehavior, Runtime.getRuntime().totalMemory()); + snapshotManager.persist(bytes, Runtime.getRuntime().totalMemory()); ArgumentCaptor snapshotArgumentCaptor = ArgumentCaptor.forClass(Snapshot.class); verify(mockDataPersistenceProvider).saveSnapshot(snapshotArgumentCaptor.capture()); @@ -303,7 +307,7 @@ public class SnapshotManagerTest extends AbstractActorTest { snapshotManager.capture(new MockRaftActorContext.MockReplicatedLogEntry(6,9, new MockRaftActorContext.MockPayload()), -1); - snapshotManager.persist(new byte[]{}, mockRaftActorBehavior, Runtime.getRuntime().totalMemory()); + snapshotManager.persist(new byte[]{}, Runtime.getRuntime().totalMemory()); verify(mockDataPersistenceProvider).saveSnapshot(any(Snapshot.class)); @@ -329,7 +333,7 @@ public class SnapshotManagerTest extends AbstractActorTest { snapshotManager.capture(new MockRaftActorContext.MockReplicatedLogEntry(6, 9, new MockRaftActorContext.MockPayload()), replicatedToAllIndex); - snapshotManager.persist(new byte[]{}, mockRaftActorBehavior, 2000000L); + snapshotManager.persist(new byte[]{}, 2000000L); verify(mockDataPersistenceProvider).saveSnapshot(any(Snapshot.class)); @@ -350,7 +354,7 @@ public class SnapshotManagerTest extends AbstractActorTest { byte[] bytes = new byte[] {1,2,3,4,5,6,7,8,9,10}; - snapshotManager.persist(bytes, mockRaftActorBehavior, Runtime.getRuntime().totalMemory()); + snapshotManager.persist(bytes, Runtime.getRuntime().totalMemory()); assertEquals(true, snapshotManager.isCapturing()); @@ -370,7 +374,7 @@ public class SnapshotManagerTest extends AbstractActorTest { @Test public void testCallingPersistWithoutCaptureWillDoNothing(){ - snapshotManager.persist(new byte[]{}, mockRaftActorBehavior, Runtime.getRuntime().totalMemory()); + snapshotManager.persist(new byte[]{}, Runtime.getRuntime().totalMemory()); verify(mockDataPersistenceProvider, never()).saveSnapshot(any(Snapshot.class)); @@ -386,9 +390,9 @@ public class SnapshotManagerTest extends AbstractActorTest { snapshotManager.captureToInstall(new MockRaftActorContext.MockReplicatedLogEntry(6, 9, new MockRaftActorContext.MockPayload()), -1, "follower-1"); - snapshotManager.persist(new byte[]{}, mockRaftActorBehavior, Runtime.getRuntime().totalMemory()); + snapshotManager.persist(new byte[]{}, Runtime.getRuntime().totalMemory()); - snapshotManager.persist(new byte[]{}, mockRaftActorBehavior, Runtime.getRuntime().totalMemory()); + snapshotManager.persist(new byte[]{}, Runtime.getRuntime().totalMemory()); verify(mockDataPersistenceProvider).saveSnapshot(any(Snapshot.class)); @@ -405,11 +409,11 @@ public class SnapshotManagerTest extends AbstractActorTest { snapshotManager.captureToInstall(new MockRaftActorContext.MockReplicatedLogEntry(6, 9, new MockRaftActorContext.MockPayload()), -1, "follower-1"); - snapshotManager.persist(new byte[]{}, mockRaftActorBehavior, Runtime.getRuntime().totalMemory()); + snapshotManager.persist(new byte[]{}, Runtime.getRuntime().totalMemory()); assertEquals(true, snapshotManager.isCapturing()); - snapshotManager.commit(100L, mockRaftActorBehavior); + snapshotManager.commit(100L, 1234L); assertEquals(false, snapshotManager.isCapturing()); @@ -421,9 +425,10 @@ public class SnapshotManagerTest extends AbstractActorTest { verify(mockDataPersistenceProvider).deleteSnapshots(criteriaCaptor.capture()); - assertEquals(90, criteriaCaptor.getValue().maxSequenceNr()); // sequenceNumber = 100 - // config snapShotBatchCount = 10 - // therefore maxSequenceNumber = 90 + assertEquals(100L, criteriaCaptor.getValue().maxSequenceNr()); + assertEquals(1233L, criteriaCaptor.getValue().maxTimestamp()); + + MessageCollectorActor.expectFirstMatching(actorRef, SnapshotComplete.class); } @Test @@ -432,7 +437,7 @@ public class SnapshotManagerTest extends AbstractActorTest { snapshotManager.captureToInstall(new MockRaftActorContext.MockReplicatedLogEntry(6, 9, new MockRaftActorContext.MockPayload()), -1, "follower-1"); - snapshotManager.commit(100L, mockRaftActorBehavior); + snapshotManager.commit(100L, 0); verify(mockReplicatedLog, never()).snapshotCommit(); @@ -444,7 +449,7 @@ public class SnapshotManagerTest extends AbstractActorTest { @Test public void testCommitBeforeCapture(){ - snapshotManager.commit(100L, mockRaftActorBehavior); + snapshotManager.commit(100L, 0); verify(mockReplicatedLog, never()).snapshotCommit(); @@ -462,11 +467,11 @@ public class SnapshotManagerTest extends AbstractActorTest { snapshotManager.captureToInstall(new MockRaftActorContext.MockReplicatedLogEntry(6, 9, new MockRaftActorContext.MockPayload()), -1, "follower-1"); - snapshotManager.persist(new byte[]{}, mockRaftActorBehavior, Runtime.getRuntime().totalMemory()); + snapshotManager.persist(new byte[]{}, Runtime.getRuntime().totalMemory()); - snapshotManager.commit(100L, mockRaftActorBehavior); + snapshotManager.commit(100L, 0); - snapshotManager.commit(100L, mockRaftActorBehavior); + snapshotManager.commit(100L, 0); verify(mockReplicatedLog, times(1)).snapshotCommit(); @@ -481,11 +486,13 @@ public class SnapshotManagerTest extends AbstractActorTest { snapshotManager.captureToInstall(new MockRaftActorContext.MockReplicatedLogEntry(6, 9, new MockRaftActorContext.MockPayload()), -1, "follower-1"); - snapshotManager.persist(new byte[]{}, mockRaftActorBehavior, Runtime.getRuntime().totalMemory()); + snapshotManager.persist(new byte[]{}, Runtime.getRuntime().totalMemory()); snapshotManager.rollback(); verify(mockReplicatedLog).snapshotRollback(); + + MessageCollectorActor.expectFirstMatching(actorRef, SnapshotComplete.class); } @@ -513,7 +520,7 @@ public class SnapshotManagerTest extends AbstractActorTest { snapshotManager.captureToInstall(new MockRaftActorContext.MockReplicatedLogEntry(6, 9, new MockRaftActorContext.MockPayload()), -1, "follower-1"); - snapshotManager.persist(new byte[]{}, mockRaftActorBehavior, Runtime.getRuntime().totalMemory()); + snapshotManager.persist(new byte[]{}, Runtime.getRuntime().totalMemory()); snapshotManager.rollback(); @@ -531,7 +538,7 @@ public class SnapshotManagerTest extends AbstractActorTest { doReturn(replicatedLogEntry).when((mockReplicatedLog)).get(10); doReturn(5L).when(replicatedLogEntry).getTerm(); - long retIndex = snapshotManager.trimLog(10, mockRaftActorBehavior); + long retIndex = snapshotManager.trimLog(10); assertEquals("return index", 10L, retIndex); verify(mockReplicatedLog).snapshotPreCommit(10, 5); @@ -549,7 +556,7 @@ public class SnapshotManagerTest extends AbstractActorTest { doReturn(replicatedLogEntry).when((mockReplicatedLog)).get(10); doReturn(5L).when(replicatedLogEntry).getTerm(); - long retIndex = snapshotManager.trimLog(10, mockRaftActorBehavior); + long retIndex = snapshotManager.trimLog(10); assertEquals("return index", -1L, retIndex); verify(mockReplicatedLog, never()).snapshotPreCommit(anyLong(), anyLong()); @@ -567,7 +574,7 @@ public class SnapshotManagerTest extends AbstractActorTest { doReturn(replicatedLogEntry).when((mockReplicatedLog)).get(10); doReturn(5L).when(replicatedLogEntry).getTerm(); - long retIndex = snapshotManager.trimLog(10, mockRaftActorBehavior); + long retIndex = snapshotManager.trimLog(10); assertEquals("return index", -1L, retIndex); verify(mockReplicatedLog, never()).snapshotPreCommit(anyLong(), anyLong()); @@ -582,7 +589,7 @@ public class SnapshotManagerTest extends AbstractActorTest { doReturn(false).when(mockReplicatedLog).isPresent(10); - long retIndex = snapshotManager.trimLog(10, mockRaftActorBehavior); + long retIndex = snapshotManager.trimLog(10); assertEquals("return index", -1L, retIndex); verify(mockReplicatedLog, never()).snapshotPreCommit(anyLong(), anyLong()); @@ -607,7 +614,7 @@ public class SnapshotManagerTest extends AbstractActorTest { doReturn(replicatedLogEntry).when((mockReplicatedLog)).get(10); doReturn(5L).when(replicatedLogEntry).getTerm(); - snapshotManager.trimLog(10, mockRaftActorBehavior); + snapshotManager.trimLog(10); verify(mockReplicatedLog, never()).snapshotPreCommit(anyLong(), anyLong()); verify(mockReplicatedLog, never()).snapshotCommit(); @@ -629,7 +636,7 @@ public class SnapshotManagerTest extends AbstractActorTest { doReturn(replicatedLogEntry).when((mockReplicatedLog)).get(10); doReturn(5L).when(replicatedLogEntry).getTerm(); - snapshotManager.trimLog(10, mockRaftActorBehavior); + snapshotManager.trimLog(10); verify(mockReplicatedLog, never()).snapshotPreCommit(10, 5); verify(mockReplicatedLog, never()).snapshotCommit();