Clean up AbstractReplicatedLogImplTest
[controller.git] / opendaylight / md-sal / sal-akka-raft / src / test / java / org / opendaylight / controller / cluster / raft / AbstractReplicatedLogImplTest.java
index d175289af56c0226a938ccae5cc3d37632d3d2ec..983b26da9c15353eb6a440418c938a3c3413fb18 100644 (file)
@@ -10,20 +10,21 @@ package org.opendaylight.controller.cluster.raft;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
-import akka.japi.Procedure;
+
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import org.junit.Assert;
+import java.util.function.Consumer;
 import org.junit.Before;
 import org.junit.Test;
 import org.opendaylight.controller.cluster.raft.MockRaftActorContext.MockPayload;
-import org.opendaylight.controller.cluster.raft.MockRaftActorContext.MockReplicatedLogEntry;
+import org.opendaylight.controller.cluster.raft.persisted.SimpleReplicatedLogEntry;
 
 /**
-*
+* Unit tests for AbstractReplicatedLogImplTest.
 */
 public class AbstractReplicatedLogImplTest {
 
@@ -33,10 +34,10 @@ public class AbstractReplicatedLogImplTest {
     public void setUp() {
         replicatedLogImpl = new MockAbstractReplicatedLogImpl();
         // create a set of initial entries in the in-memory log
-        replicatedLogImpl.append(new MockReplicatedLogEntry(1, 0, new MockPayload("A")));
-        replicatedLogImpl.append(new MockReplicatedLogEntry(1, 1, new MockPayload("B")));
-        replicatedLogImpl.append(new MockReplicatedLogEntry(1, 2, new MockPayload("C")));
-        replicatedLogImpl.append(new MockReplicatedLogEntry(2, 3, new MockPayload("D")));
+        replicatedLogImpl.append(new SimpleReplicatedLogEntry(0, 1, new MockPayload("A")));
+        replicatedLogImpl.append(new SimpleReplicatedLogEntry(1, 1, new MockPayload("B")));
+        replicatedLogImpl.append(new SimpleReplicatedLogEntry(2, 1, new MockPayload("C")));
+        replicatedLogImpl.append(new SimpleReplicatedLogEntry(3, 2, new MockPayload("D")));
 
     }
 
@@ -52,10 +53,10 @@ public class AbstractReplicatedLogImplTest {
         assertEquals("lastTerm", -1, replicatedLogImpl.lastTerm());
         assertEquals("isPresent", false, replicatedLogImpl.isPresent(0));
         assertEquals("isInSnapshot", false, replicatedLogImpl.isInSnapshot(0));
-        Assert.assertNull("get(0)", replicatedLogImpl.get(0));
-        Assert.assertNull("last", replicatedLogImpl.last());
+        assertNull("get(0)", replicatedLogImpl.get(0));
+        assertNull("last", replicatedLogImpl.last());
 
-        List<ReplicatedLogEntry> list = replicatedLogImpl.getFrom(0, 1);
+        List<ReplicatedLogEntry> list = replicatedLogImpl.getFrom(0, 1, ReplicatedLog.NO_MAX_SIZE);
         assertEquals("getFrom size", 0, list.size());
 
         assertEquals("removeFrom", -1, replicatedLogImpl.removeFrom(1));
@@ -104,10 +105,10 @@ public class AbstractReplicatedLogImplTest {
         assertTrue(replicatedLogImpl.isInSnapshot(2));
 
         // append few more entries
-        replicatedLogImpl.append(new MockReplicatedLogEntry(2, 4, new MockPayload("E")));
-        replicatedLogImpl.append(new MockReplicatedLogEntry(2, 5, new MockPayload("F")));
-        replicatedLogImpl.append(new MockReplicatedLogEntry(3, 6, new MockPayload("G")));
-        replicatedLogImpl.append(new MockReplicatedLogEntry(3, 7, new MockPayload("H")));
+        replicatedLogImpl.append(new SimpleReplicatedLogEntry(4, 2, new MockPayload("E")));
+        replicatedLogImpl.append(new SimpleReplicatedLogEntry(5, 2, new MockPayload("F")));
+        replicatedLogImpl.append(new SimpleReplicatedLogEntry(6, 3, new MockPayload("G")));
+        replicatedLogImpl.append(new SimpleReplicatedLogEntry(7, 3, new MockPayload("H")));
 
         // check their values as well
         assertEquals(5, replicatedLogImpl.size());
@@ -136,28 +137,50 @@ public class AbstractReplicatedLogImplTest {
     }
 
     @Test
-    public void testGetFromWithMax(){
-        List<ReplicatedLogEntry> from = replicatedLogImpl.getFrom(0, 1);
-        Assert.assertEquals(1, from.size());
-        Assert.assertEquals(1, from.get(0).getTerm());
-
-        from = replicatedLogImpl.getFrom(0, 20);
-        Assert.assertEquals(4, from.size());
-        Assert.assertEquals(2, from.get(3).getTerm());
-
-        from = replicatedLogImpl.getFrom(1, 2);
-        Assert.assertEquals(2, from.size());
-        Assert.assertEquals(1, from.get(1).getTerm());
-
+    public void testGetFromWithMax() {
+        List<ReplicatedLogEntry> from = replicatedLogImpl.getFrom(0, 1, ReplicatedLog.NO_MAX_SIZE);
+        assertEquals(1, from.size());
+        assertEquals("A", from.get(0).getData().toString());
+
+        from = replicatedLogImpl.getFrom(0, 20, ReplicatedLog.NO_MAX_SIZE);
+        assertEquals(4, from.size());
+        assertEquals("A", from.get(0).getData().toString());
+        assertEquals("D", from.get(3).getData().toString());
+
+        from = replicatedLogImpl.getFrom(1, 2, ReplicatedLog.NO_MAX_SIZE);
+        assertEquals(2, from.size());
+        assertEquals("B", from.get(0).getData().toString());
+        assertEquals("C", from.get(1).getData().toString());
+
+        from = replicatedLogImpl.getFrom(1, 3, 2);
+        assertEquals(2, from.size());
+        assertEquals("B", from.get(0).getData().toString());
+        assertEquals("C", from.get(1).getData().toString());
+
+        from = replicatedLogImpl.getFrom(1, 3, 3);
+        assertEquals(3, from.size());
+        assertEquals("B", from.get(0).getData().toString());
+        assertEquals("C", from.get(1).getData().toString());
+        assertEquals("D", from.get(2).getData().toString());
+
+        from = replicatedLogImpl.getFrom(1, 2, 3);
+        assertEquals(2, from.size());
+        assertEquals("B", from.get(0).getData().toString());
+        assertEquals("C", from.get(1).getData().toString());
+
+        replicatedLogImpl.append(new SimpleReplicatedLogEntry(4, 2, new MockPayload("12345")));
+        from = replicatedLogImpl.getFrom(4, 2, 2);
+        assertEquals(1, from.size());
+        assertEquals("12345", from.get(0).getData().toString());
     }
 
     @Test
     public void testSnapshotPreCommit() {
         //add 4 more entries
-        replicatedLogImpl.append(new MockReplicatedLogEntry(2, 4, new MockPayload("E")));
-        replicatedLogImpl.append(new MockReplicatedLogEntry(2, 5, new MockPayload("F")));
-        replicatedLogImpl.append(new MockReplicatedLogEntry(3, 6, new MockPayload("G")));
-        replicatedLogImpl.append(new MockReplicatedLogEntry(3, 7, new MockPayload("H")));
+        replicatedLogImpl.append(new SimpleReplicatedLogEntry(4, 2, new MockPayload("E")));
+        replicatedLogImpl.append(new SimpleReplicatedLogEntry(5, 2, new MockPayload("F")));
+        replicatedLogImpl.append(new SimpleReplicatedLogEntry(6, 3, new MockPayload("G")));
+        replicatedLogImpl.append(new SimpleReplicatedLogEntry(7, 3, new MockPayload("H")));
 
         //sending negative values should not cause any changes
         replicatedLogImpl.snapshotPreCommit(-1, -1);
@@ -201,10 +224,10 @@ public class AbstractReplicatedLogImplTest {
         assertEquals("lastIndex", 3, replicatedLogImpl.lastIndex());
         assertEquals("lastTerm", 2, replicatedLogImpl.lastTerm());
 
-        Assert.assertNull("get(0)", replicatedLogImpl.get(0));
-        Assert.assertNull("get(1)", replicatedLogImpl.get(1));
-        Assert.assertNotNull("get(2)", replicatedLogImpl.get(2));
-        Assert.assertNotNull("get(3)", replicatedLogImpl.get(3));
+        assertNull("get(0)", replicatedLogImpl.get(0));
+        assertNull("get(1)", replicatedLogImpl.get(1));
+        assertNotNull("get(2)", replicatedLogImpl.get(2));
+        assertNotNull("get(3)", replicatedLogImpl.get(3));
     }
 
     @Test
@@ -222,8 +245,8 @@ public class AbstractReplicatedLogImplTest {
         assertEquals("dataSize", 4, replicatedLogImpl.dataSize());
         assertEquals("getSnapshotIndex", -1, replicatedLogImpl.getSnapshotIndex());
         assertEquals("getSnapshotTerm", -1, replicatedLogImpl.getSnapshotTerm());
-        Assert.assertNotNull("get(0)", replicatedLogImpl.get(0));
-        Assert.assertNotNull("get(3)", replicatedLogImpl.get(3));
+        assertNotNull("get(0)", replicatedLogImpl.get(0));
+        assertNotNull("get(3)", replicatedLogImpl.get(3));
     }
 
     @Test
@@ -233,7 +256,7 @@ public class AbstractReplicatedLogImplTest {
         assertTrue(replicatedLogImpl.isPresent(2));
         assertTrue(replicatedLogImpl.isPresent(3));
 
-        replicatedLogImpl.append(new MockReplicatedLogEntry(2, 4, new MockPayload("D")));
+        replicatedLogImpl.append(new SimpleReplicatedLogEntry(4, 2, new MockPayload("D")));
         replicatedLogImpl.snapshotPreCommit(3, 2); //snapshot on 3
         replicatedLogImpl.snapshotCommit();
 
@@ -247,15 +270,15 @@ public class AbstractReplicatedLogImplTest {
         replicatedLogImpl.snapshotCommit();
         assertFalse(replicatedLogImpl.isPresent(4));
 
-        replicatedLogImpl.append(new MockReplicatedLogEntry(2, 5, new MockPayload("D")));
+        replicatedLogImpl.append(new SimpleReplicatedLogEntry(5, 2, new MockPayload("D")));
         assertTrue(replicatedLogImpl.isPresent(5));
     }
 
     @Test
     public void testRemoveFrom() {
 
-        replicatedLogImpl.append(new MockReplicatedLogEntry(2, 4, new MockPayload("E", 2)));
-        replicatedLogImpl.append(new MockReplicatedLogEntry(2, 5, new MockPayload("F", 3)));
+        replicatedLogImpl.append(new SimpleReplicatedLogEntry(4, 2, new MockPayload("E", 2)));
+        replicatedLogImpl.append(new SimpleReplicatedLogEntry(5, 2, new MockPayload("F", 3)));
 
         assertEquals("dataSize", 9, replicatedLogImpl.dataSize());
 
@@ -281,7 +304,7 @@ public class AbstractReplicatedLogImplTest {
 
         long lastIndex = 0;
         long lastTerm = 0;
-        for(int i = 0; i < numEntries; i++) {
+        for (int i = 0; i < numEntries; i++) {
             ReplicatedLogEntry entry = replicatedLogImpl.getAtPhysicalIndex(i);
             map.put(entry.getIndex(), entry.getData().toString());
             lastIndex = entry.getIndex();
@@ -294,17 +317,30 @@ public class AbstractReplicatedLogImplTest {
         return map;
 
     }
-    class MockAbstractReplicatedLogImpl extends AbstractReplicatedLogImpl {
+
+    static class MockAbstractReplicatedLogImpl extends AbstractReplicatedLogImpl {
+        @Override
+        public boolean removeFromAndPersist(final long index) {
+            return true;
+        }
+
         @Override
-        public void appendAndPersist(final ReplicatedLogEntry replicatedLogEntry) {
+        public boolean appendAndPersist(final ReplicatedLogEntry replicatedLogEntry,
+                final Consumer<ReplicatedLogEntry> callback, final boolean doAsync) {
+            if (callback != null) {
+                callback.accept(replicatedLogEntry);
+            }
+            return true;
         }
 
         @Override
-        public void removeFromAndPersist(final long index) {
+        public void captureSnapshotIfReady(final ReplicatedLogEntry replicatedLogEntry) {
+            // No-op
         }
 
         @Override
-        public void appendAndPersist(ReplicatedLogEntry replicatedLogEntry, Procedure<ReplicatedLogEntry> callback) {
+        public boolean shouldCaptureSnapshot(final long logIndex) {
+            return false;
         }
     }
 }