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%2FReplicatedLogImplTest.java;h=75c0d8980be9e414354deb21d4356c6bd193efce;hp=92e384e19a3b5e8a99c72d30546e36397192e097;hb=e1eca73a5ae2ffae8dd78c6fe5281cd2f45d5ef3;hpb=f9a9cd1ea40d2477ccb16b03c71a87595226595a diff --git a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/ReplicatedLogImplTest.java b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/ReplicatedLogImplTest.java index 92e384e19a..75c0d8980b 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/ReplicatedLogImplTest.java +++ b/opendaylight/md-sal/sal-akka-raft/src/test/java/org/opendaylight/controller/cluster/raft/ReplicatedLogImplTest.java @@ -8,14 +8,13 @@ package org.opendaylight.controller.cluster.raft; import static org.junit.Assert.assertEquals; -import static org.mockito.Matchers.eq; import static org.mockito.Matchers.same; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; + import akka.japi.Procedure; -import com.google.common.base.Supplier; import java.util.Collections; import org.hamcrest.BaseMatcher; import org.hamcrest.Description; @@ -31,8 +30,8 @@ import org.mockito.internal.matchers.Same; import org.opendaylight.controller.cluster.DataPersistenceProvider; import org.opendaylight.controller.cluster.raft.MockRaftActorContext.MockPayload; import org.opendaylight.controller.cluster.raft.MockRaftActorContext.MockReplicatedLogEntry; -import org.opendaylight.controller.cluster.raft.base.messages.DeleteEntries; import org.opendaylight.controller.cluster.raft.behaviors.RaftActorBehavior; +import org.opendaylight.controller.cluster.raft.persisted.DeleteEntries; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -50,9 +49,6 @@ public class ReplicatedLogImplTest { @Mock private RaftActorBehavior mockBehavior; - @Mock - private SnapshotManager mockSnapshotManager; - private RaftActorContext context; private final DefaultConfigParamsImpl configParams = new DefaultConfigParamsImpl(); @@ -62,12 +58,7 @@ public class ReplicatedLogImplTest { context = new RaftActorContextImpl(null, null, "test", new ElectionTermImpl(mockPersistence, "test", LOG), - -1, -1, Collections.emptyMap(), configParams, mockPersistence, LOG) { - @Override - public SnapshotManager getSnapshotManager() { - return mockSnapshotManager; - } - }; + -1, -1, Collections.emptyMap(), configParams, mockPersistence, LOG); } private void verifyPersist(Object message) throws Exception { @@ -85,27 +76,50 @@ public class ReplicatedLogImplTest { @SuppressWarnings("unchecked") @Test public void testAppendAndPersistExpectingNoCapture() throws Exception { - ReplicatedLog log = ReplicatedLogImpl.newInstance(context, mockPersistence, mockBehavior); + ReplicatedLog log = ReplicatedLogImpl.newInstance(context); - MockReplicatedLogEntry logEntry = new MockReplicatedLogEntry(1, 1, new MockPayload("1")); + MockReplicatedLogEntry logEntry1 = new MockReplicatedLogEntry(1, 1, new MockPayload("1")); - log.appendAndPersist(logEntry); + log.appendAndPersist(logEntry1); - verifyPersist(logEntry); + verifyPersist(logEntry1); assertEquals("size", 1, log.size()); reset(mockPersistence); + MockReplicatedLogEntry logEntry2 = new MockReplicatedLogEntry(1, 2, new MockPayload("2")); Procedure mockCallback = Mockito.mock(Procedure.class); + log.appendAndPersist(logEntry2, mockCallback); + + verifyPersist(logEntry2); + + verify(mockCallback).apply(same(logEntry2)); + + assertEquals("size", 2, log.size()); + } + + @SuppressWarnings("unchecked") + @Test + public void testAppendAndPersisWithDuplicateEntry() throws Exception { + ReplicatedLog log = ReplicatedLogImpl.newInstance(context); + + Procedure mockCallback = Mockito.mock(Procedure.class); + MockReplicatedLogEntry logEntry = new MockReplicatedLogEntry(1, 1, new MockPayload("1")); + log.appendAndPersist(logEntry, mockCallback); verifyPersist(logEntry); - verify(mockCallback).apply(same(logEntry)); - verifyNoMoreInteractions(mockSnapshotManager); + assertEquals("size", 1, log.size()); - assertEquals("size", 2, log.size()); + reset(mockPersistence, mockCallback); + + log.appendAndPersist(logEntry, mockCallback); + + verifyNoMoreInteractions(mockPersistence, mockCallback); + + assertEquals("size", 1, log.size()); } @Test @@ -114,21 +128,19 @@ public class ReplicatedLogImplTest { doReturn(1L).when(mockBehavior).getReplicatedToAllIndex(); - ReplicatedLog log = ReplicatedLogImpl.newInstance(context, mockPersistence, mockBehavior); + ReplicatedLog log = ReplicatedLogImpl.newInstance(context); - MockReplicatedLogEntry logEntry1 = new MockReplicatedLogEntry(1, 2, new MockPayload("2")); - MockReplicatedLogEntry logEntry2 = new MockReplicatedLogEntry(1, 3, new MockPayload("3")); + final MockReplicatedLogEntry logEntry1 = new MockReplicatedLogEntry(1, 2, new MockPayload("2")); + final MockReplicatedLogEntry logEntry2 = new MockReplicatedLogEntry(1, 3, new MockPayload("3")); log.appendAndPersist(logEntry1); verifyPersist(logEntry1); - verifyNoMoreInteractions(mockSnapshotManager); reset(mockPersistence); log.appendAndPersist(logEntry2); verifyPersist(logEntry2); - verify(mockSnapshotManager).capture(same(logEntry2), eq(1L)); assertEquals("size", 2, log.size()); } @@ -137,41 +149,30 @@ public class ReplicatedLogImplTest { public void testAppendAndPersistExpectingCaptureDueToDataSize() throws Exception { doReturn(1L).when(mockBehavior).getReplicatedToAllIndex(); - context.setTotalMemoryRetriever(new Supplier() { - @Override - public Long get() { - return 100L; - } - }); + context.setTotalMemoryRetriever(() -> 100); - ReplicatedLog log = ReplicatedLogImpl.newInstance(context, mockPersistence, mockBehavior); + ReplicatedLog log = ReplicatedLogImpl.newInstance(context); int dataSize = 600; MockReplicatedLogEntry logEntry = new MockReplicatedLogEntry(1, 2, new MockPayload("2", dataSize)); - doReturn(true).when(mockSnapshotManager).capture(same(logEntry), eq(1L)); - log.appendAndPersist(logEntry); verifyPersist(logEntry); - verify(mockSnapshotManager).capture(same(logEntry), eq(1L)); - - reset(mockPersistence, mockSnapshotManager); + reset(mockPersistence); logEntry = new MockReplicatedLogEntry(1, 3, new MockPayload("3", 5)); log.appendAndPersist(logEntry); verifyPersist(logEntry); - verifyNoMoreInteractions(mockSnapshotManager); - assertEquals("size", 2, log.size()); } @Test public void testRemoveFromAndPersist() throws Exception { - ReplicatedLog log = ReplicatedLogImpl.newInstance(context, mockPersistence, mockBehavior); + ReplicatedLog log = ReplicatedLogImpl.newInstance(context); log.append(new MockReplicatedLogEntry(1, 0, new MockPayload("0"))); log.append(new MockReplicatedLogEntry(1, 1, new MockPayload("1"))); @@ -191,11 +192,11 @@ public class ReplicatedLogImplTest { verifyNoMoreInteractions(mockPersistence); } - public Matcher match(final DeleteEntries actual){ + public Matcher match(final DeleteEntries actual) { return new BaseMatcher() { @Override - public boolean matches(Object o) { - DeleteEntries other = (DeleteEntries) o; + public boolean matches(Object obj) { + DeleteEntries other = (DeleteEntries) obj; return actual.getFromIndex() == other.getFromIndex(); }