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%2FSnapshotManagerTest.java;h=d94eb6b041a52631c5ca02684e0c24bc32b170e6;hb=55e018bfad0c70b773641142d6fbf009cd67fda4;hp=5a0d5aed741d0e9d1a943305fc24a5f94dae573a;hpb=59e84273be97b1115fb3fb0f06364b7491a40385;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 5a0d5aed74..d94eb6b041 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 @@ -7,6 +7,7 @@ import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyLong; import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; @@ -19,7 +20,6 @@ import akka.testkit.TestActorRef; import com.google.common.collect.ImmutableMap; import java.util.Arrays; import java.util.HashMap; -import java.util.List; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -69,6 +69,7 @@ public class SnapshotManagerTest extends AbstractActorTest { doReturn(10L).when(mockConfigParams).getSnapshotBatchCount(); doReturn(mockReplicatedLog).when(mockRaftActorContext).getReplicatedLog(); doReturn("123").when(mockRaftActorContext).getId(); + doReturn(mockDataPersistenceProvider).when(mockRaftActorContext).getPersistenceProvider(); doReturn("123").when(mockRaftActorBehavior).getLeaderId(); ElectionTerm mockElectionTerm = mock(ElectionTerm.class); @@ -81,6 +82,7 @@ public class SnapshotManagerTest extends AbstractActorTest { actorRef = factory.createTestActor(MessageCollectorActor.props(), factory.generateActorId("test-")); doReturn(actorRef).when(mockRaftActorContext).getActor(); + snapshotManager.setCreateSnapshotCallable(mockProcedure); } @After @@ -94,7 +96,7 @@ public class SnapshotManagerTest extends AbstractActorTest { } @Test - public void testCaptureToInstall(){ + public void testCaptureToInstall() throws Exception { // Force capturing toInstall = true snapshotManager.captureToInstall(new MockRaftActorContext.MockReplicatedLogEntry(1, 0, @@ -102,7 +104,9 @@ public class SnapshotManagerTest extends AbstractActorTest { assertEquals(true, snapshotManager.isCapturing()); - CaptureSnapshot captureSnapshot = MessageCollectorActor.expectFirstMatching(actorRef, CaptureSnapshot.class); + verify(mockProcedure).apply(null); + + CaptureSnapshot captureSnapshot = snapshotManager.getCaptureSnapshot(); // LastIndex and LastTerm are picked up from the lastLogEntry assertEquals(0L, captureSnapshot.getLastIndex()); @@ -119,7 +123,7 @@ public class SnapshotManagerTest extends AbstractActorTest { } @Test - public void testCapture(){ + public void testCapture() throws Exception { boolean capture = snapshotManager.capture(new MockRaftActorContext.MockReplicatedLogEntry(1,9, new MockRaftActorContext.MockPayload()), 9); @@ -127,7 +131,10 @@ public class SnapshotManagerTest extends AbstractActorTest { assertEquals(true, snapshotManager.isCapturing()); - CaptureSnapshot captureSnapshot = MessageCollectorActor.expectFirstMatching(actorRef, CaptureSnapshot.class); + verify(mockProcedure).apply(null); + + CaptureSnapshot captureSnapshot = snapshotManager.getCaptureSnapshot(); + // LastIndex and LastTerm are picked up from the lastLogEntry assertEquals(9L, captureSnapshot.getLastIndex()); assertEquals(1L, captureSnapshot.getLastTerm()); @@ -144,6 +151,20 @@ public class SnapshotManagerTest extends AbstractActorTest { } + @Test + public void testCaptureWithCreateProcedureError () throws Exception { + doThrow(new Exception("mock")).when(mockProcedure).apply(null); + + boolean capture = snapshotManager.capture(new MockRaftActorContext.MockReplicatedLogEntry(1,9, + new MockRaftActorContext.MockPayload()), 9); + + assertFalse(capture); + + assertEquals(false, snapshotManager.isCapturing()); + + verify(mockProcedure).apply(null); + } + @Test public void testIllegalCapture() throws Exception { boolean capture = snapshotManager.capture(new MockRaftActorContext.MockReplicatedLogEntry(1,9, @@ -151,9 +172,9 @@ public class SnapshotManagerTest extends AbstractActorTest { assertTrue(capture); - List allMatching = MessageCollectorActor.getAllMatching(actorRef, CaptureSnapshot.class); + verify(mockProcedure).apply(null); - assertEquals(1, allMatching.size()); + reset(mockProcedure); // This will not cause snapshot capture to start again capture = snapshotManager.capture(new MockRaftActorContext.MockReplicatedLogEntry(1,9, @@ -161,9 +182,7 @@ public class SnapshotManagerTest extends AbstractActorTest { assertFalse(capture); - allMatching = MessageCollectorActor.getAllMatching(actorRef, CaptureSnapshot.class); - - assertEquals(1, allMatching.size()); + verify(mockProcedure, never()).apply(null); } @Test @@ -187,11 +206,8 @@ public class SnapshotManagerTest extends AbstractActorTest { // when replicatedToAllIndex = -1 snapshotManager.capture(lastLogEntry, -1); - snapshotManager.create(mockProcedure); - byte[] bytes = new byte[] {1,2,3,4,5,6,7,8,9,10}; - snapshotManager.persist(mockDataPersistenceProvider, bytes, mockRaftActorBehavior - , Runtime.getRuntime().totalMemory()); + snapshotManager.persist(bytes, mockRaftActorBehavior, Runtime.getRuntime().totalMemory()); ArgumentCaptor snapshotArgumentCaptor = ArgumentCaptor.forClass(Snapshot.class); verify(mockDataPersistenceProvider).saveSnapshot(snapshotArgumentCaptor.capture()); @@ -208,60 +224,6 @@ public class SnapshotManagerTest extends AbstractActorTest { verify(mockReplicatedLog).snapshotPreCommit(7L, 1L); } - - @Test - public void testCreate() throws Exception { - // when replicatedToAllIndex = -1 - snapshotManager.capture(new MockRaftActorContext.MockReplicatedLogEntry(6,9, - new MockRaftActorContext.MockPayload()), -1); - - snapshotManager.create(mockProcedure); - - verify(mockProcedure).apply(null); - - assertEquals("isCapturing", true, snapshotManager.isCapturing()); - } - - @Test - public void testCallingCreateMultipleTimesCausesNoHarm() throws Exception { - // when replicatedToAllIndex = -1 - snapshotManager.capture(new MockRaftActorContext.MockReplicatedLogEntry(6,9, - new MockRaftActorContext.MockPayload()), -1); - - snapshotManager.create(mockProcedure); - - snapshotManager.create(mockProcedure); - - verify(mockProcedure, times(1)).apply(null); - } - - @Test - public void testCallingCreateBeforeCapture() throws Exception { - snapshotManager.create(mockProcedure); - - verify(mockProcedure, times(0)).apply(null); - } - - @Test - public void testCallingCreateAfterPersist() throws Exception { - // when replicatedToAllIndex = -1 - snapshotManager.capture(new MockRaftActorContext.MockReplicatedLogEntry(6,9, - new MockRaftActorContext.MockPayload()), -1); - - snapshotManager.create(mockProcedure); - - verify(mockProcedure, times(1)).apply(null); - - snapshotManager.persist(mockDataPersistenceProvider, new byte[]{}, mockRaftActorBehavior - , Runtime.getRuntime().totalMemory()); - - reset(mockProcedure); - - snapshotManager.create(mockProcedure); - - verify(mockProcedure, never()).apply(null); - } - @Test public void testPersistWhenReplicatedToAllIndexNotMinus(){ doReturn(45L).when(mockReplicatedLog).getSnapshotIndex(); @@ -275,11 +237,8 @@ public class SnapshotManagerTest extends AbstractActorTest { snapshotManager.capture(new MockRaftActorContext.MockReplicatedLogEntry(6,9, new MockRaftActorContext.MockPayload()), 9); - snapshotManager.create(mockProcedure); - byte[] bytes = new byte[] {1,2,3,4,5,6,7,8,9,10}; - snapshotManager.persist(mockDataPersistenceProvider, bytes, mockRaftActorBehavior - , Runtime.getRuntime().totalMemory()); + snapshotManager.persist(bytes, mockRaftActorBehavior, Runtime.getRuntime().totalMemory()); ArgumentCaptor snapshotArgumentCaptor = ArgumentCaptor.forClass(Snapshot.class); verify(mockDataPersistenceProvider).saveSnapshot(snapshotArgumentCaptor.capture()); @@ -307,10 +266,7 @@ public class SnapshotManagerTest extends AbstractActorTest { snapshotManager.capture(new MockRaftActorContext.MockReplicatedLogEntry(6,9, new MockRaftActorContext.MockPayload()), -1); - snapshotManager.create(mockProcedure); - - snapshotManager.persist(mockDataPersistenceProvider, new byte[]{}, mockRaftActorBehavior - , Runtime.getRuntime().totalMemory()); + snapshotManager.persist(new byte[]{}, mockRaftActorBehavior, Runtime.getRuntime().totalMemory()); verify(mockDataPersistenceProvider).saveSnapshot(any(Snapshot.class)); @@ -327,12 +283,9 @@ public class SnapshotManagerTest extends AbstractActorTest { assertTrue(capture); - snapshotManager.create(mockProcedure); - byte[] bytes = new byte[] {1,2,3,4,5,6,7,8,9,10}; - snapshotManager.persist(mockDataPersistenceProvider, bytes, mockRaftActorBehavior - , Runtime.getRuntime().totalMemory()); + snapshotManager.persist(bytes, mockRaftActorBehavior, Runtime.getRuntime().totalMemory()); verify(mockDataPersistenceProvider).saveSnapshot(any(Snapshot.class)); @@ -350,8 +303,7 @@ public class SnapshotManagerTest extends AbstractActorTest { @Test public void testCallingPersistWithoutCaptureWillDoNothing(){ - snapshotManager.persist(mockDataPersistenceProvider, new byte[]{}, mockRaftActorBehavior - , Runtime.getRuntime().totalMemory()); + snapshotManager.persist(new byte[]{}, mockRaftActorBehavior, Runtime.getRuntime().totalMemory()); verify(mockDataPersistenceProvider, never()).saveSnapshot(any(Snapshot.class)); @@ -367,13 +319,9 @@ public class SnapshotManagerTest extends AbstractActorTest { snapshotManager.captureToInstall(new MockRaftActorContext.MockReplicatedLogEntry(6, 9, new MockRaftActorContext.MockPayload()), -1, "follower-1"); - snapshotManager.create(mockProcedure); - - snapshotManager.persist(mockDataPersistenceProvider, new byte[]{}, mockRaftActorBehavior - , Runtime.getRuntime().totalMemory()); + snapshotManager.persist(new byte[]{}, mockRaftActorBehavior, Runtime.getRuntime().totalMemory()); - snapshotManager.persist(mockDataPersistenceProvider, new byte[]{}, mockRaftActorBehavior - , Runtime.getRuntime().totalMemory()); + snapshotManager.persist(new byte[]{}, mockRaftActorBehavior, Runtime.getRuntime().totalMemory()); verify(mockDataPersistenceProvider).saveSnapshot(any(Snapshot.class)); @@ -384,20 +332,19 @@ public class SnapshotManagerTest extends AbstractActorTest { @Test public void testCommit(){ + doReturn(50L).when(mockDataPersistenceProvider).getLastSequenceNumber(); + // when replicatedToAllIndex = -1 snapshotManager.captureToInstall(new MockRaftActorContext.MockReplicatedLogEntry(6, 9, new MockRaftActorContext.MockPayload()), -1, "follower-1"); - snapshotManager.create(mockProcedure); - - snapshotManager.persist(mockDataPersistenceProvider, new byte[]{}, mockRaftActorBehavior - , Runtime.getRuntime().totalMemory()); + snapshotManager.persist(new byte[]{}, mockRaftActorBehavior, Runtime.getRuntime().totalMemory()); - snapshotManager.commit(mockDataPersistenceProvider, 100L); + snapshotManager.commit(100L, mockRaftActorBehavior); verify(mockReplicatedLog).snapshotCommit(); - verify(mockDataPersistenceProvider).deleteMessages(100L); + verify(mockDataPersistenceProvider).deleteMessages(50L); ArgumentCaptor criteriaCaptor = ArgumentCaptor.forClass(SnapshotSelectionCriteria.class); @@ -414,7 +361,7 @@ public class SnapshotManagerTest extends AbstractActorTest { snapshotManager.captureToInstall(new MockRaftActorContext.MockReplicatedLogEntry(6, 9, new MockRaftActorContext.MockPayload()), -1, "follower-1"); - snapshotManager.commit(mockDataPersistenceProvider, 100L); + snapshotManager.commit(100L, mockRaftActorBehavior); verify(mockReplicatedLog, never()).snapshotCommit(); @@ -426,7 +373,7 @@ public class SnapshotManagerTest extends AbstractActorTest { @Test public void testCommitBeforeCapture(){ - snapshotManager.commit(mockDataPersistenceProvider, 100L); + snapshotManager.commit(100L, mockRaftActorBehavior); verify(mockReplicatedLog, never()).snapshotCommit(); @@ -438,22 +385,21 @@ public class SnapshotManagerTest extends AbstractActorTest { @Test public void testCallingCommitMultipleTimesCausesNoHarm(){ + doReturn(50L).when(mockDataPersistenceProvider).getLastSequenceNumber(); + // when replicatedToAllIndex = -1 snapshotManager.captureToInstall(new MockRaftActorContext.MockReplicatedLogEntry(6, 9, new MockRaftActorContext.MockPayload()), -1, "follower-1"); - snapshotManager.create(mockProcedure); - - snapshotManager.persist(mockDataPersistenceProvider, new byte[]{}, mockRaftActorBehavior - , Runtime.getRuntime().totalMemory()); + snapshotManager.persist(new byte[]{}, mockRaftActorBehavior, Runtime.getRuntime().totalMemory()); - snapshotManager.commit(mockDataPersistenceProvider, 100L); + snapshotManager.commit(100L, mockRaftActorBehavior); - snapshotManager.commit(mockDataPersistenceProvider, 100L); + snapshotManager.commit(100L, mockRaftActorBehavior); verify(mockReplicatedLog, times(1)).snapshotCommit(); - verify(mockDataPersistenceProvider, times(1)).deleteMessages(100L); + verify(mockDataPersistenceProvider, times(1)).deleteMessages(50L); verify(mockDataPersistenceProvider, times(1)).deleteSnapshots(any(SnapshotSelectionCriteria.class)); } @@ -464,10 +410,7 @@ public class SnapshotManagerTest extends AbstractActorTest { snapshotManager.captureToInstall(new MockRaftActorContext.MockReplicatedLogEntry(6, 9, new MockRaftActorContext.MockPayload()), -1, "follower-1"); - snapshotManager.create(mockProcedure); - - snapshotManager.persist(mockDataPersistenceProvider, new byte[]{}, mockRaftActorBehavior - , Runtime.getRuntime().totalMemory()); + snapshotManager.persist(new byte[]{}, mockRaftActorBehavior, Runtime.getRuntime().totalMemory()); snapshotManager.rollback(); @@ -499,10 +442,7 @@ public class SnapshotManagerTest extends AbstractActorTest { snapshotManager.captureToInstall(new MockRaftActorContext.MockReplicatedLogEntry(6, 9, new MockRaftActorContext.MockPayload()), -1, "follower-1"); - snapshotManager.create(mockProcedure); - - snapshotManager.persist(mockDataPersistenceProvider, new byte[]{}, mockRaftActorBehavior - , Runtime.getRuntime().totalMemory()); + snapshotManager.persist(new byte[]{}, mockRaftActorBehavior, Runtime.getRuntime().totalMemory()); snapshotManager.rollback();