Test RaftActor using a simple program
[controller.git] / opendaylight / md-sal / sal-akka-raft / src / test / java / org / opendaylight / controller / cluster / raft / MockRaftActorContext.java
index 3b332e4ec7b1031f110059a8789b165ed11909e4..addf51a63cf3c3cb65baaed1d65da3a0c708c286 100644 (file)
@@ -12,9 +12,14 @@ import akka.actor.ActorRef;
 import akka.actor.ActorSelection;
 import akka.actor.ActorSystem;
 import akka.actor.Props;
+import akka.event.Logging;
+import akka.event.LoggingAdapter;
 
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 public class MockRaftActorContext implements RaftActorContext {
 
@@ -25,6 +30,7 @@ public class MockRaftActorContext implements RaftActorContext {
     private long lastApplied = 0;
     private final ElectionTerm electionTerm;
     private ReplicatedLog replicatedLog;
+    private Map<String, String> peerAddresses = new HashMap();
 
     public MockRaftActorContext(){
         electionTerm = null;
@@ -102,6 +108,22 @@ public class MockRaftActorContext implements RaftActorContext {
         return this.system;
     }
 
+    @Override public LoggingAdapter getLogger() {
+        return Logging.getLogger(system, this);
+    }
+
+    @Override public Map<String, String> getPeerAddresses() {
+        return peerAddresses;
+    }
+
+    @Override public String getPeerAddress(String peerId) {
+        return peerAddresses.get(peerId);
+    }
+
+    public void setPeerAddresses(Map<String, String> peerAddresses) {
+        this.peerAddresses = peerAddresses;
+    }
+
 
     public static class MockReplicatedLog implements ReplicatedLog {
         private ReplicatedLogEntry replicatedLogEntry = new MockReplicatedLogEntry(0,0, "");
@@ -115,12 +137,35 @@ public class MockRaftActorContext implements RaftActorContext {
             return last;
         }
 
+        @Override public long lastIndex() {
+            return last.getIndex();
+        }
+
+        @Override public long lastTerm() {
+            return last.getTerm();
+        }
+
         @Override public void removeFrom(long index) {
         }
 
         @Override public void append(ReplicatedLogEntry replicatedLogEntry) {
         }
 
+        @Override public void appendAndPersist(
+            ReplicatedLogEntry replicatedLogEntry) {
+        }
+
+        @Override public List<ReplicatedLogEntry> getFrom(long index) {
+            return Collections.EMPTY_LIST;
+        }
+
+        @Override public long size() {
+            if(replicatedLogEntry != null){
+                return 1;
+            }
+            return 0;
+        }
+
         public void setReplicatedLogEntry(
             ReplicatedLogEntry replicatedLogEntry) {
             this.replicatedLogEntry = replicatedLogEntry;
@@ -135,13 +180,35 @@ public class MockRaftActorContext implements RaftActorContext {
         private final List<ReplicatedLogEntry> log = new ArrayList<>(10000);
 
         @Override public ReplicatedLogEntry get(long index) {
+            if(index >= log.size() || index < 0){
+                return null;
+            }
             return log.get((int) index);
         }
 
         @Override public ReplicatedLogEntry last() {
+            if(log.size() == 0){
+                return null;
+            }
             return log.get(log.size()-1);
         }
 
+        @Override public long lastIndex() {
+            if(log.size() == 0){
+                return -1;
+            }
+
+            return last().getIndex();
+        }
+
+        @Override public long lastTerm() {
+            if(log.size() == 0){
+                return -1;
+            }
+
+            return last().getTerm();
+        }
+
         @Override public void removeFrom(long index) {
             for(int i=(int) index ; i < log.size() ; i++) {
                 log.remove(i);
@@ -151,6 +218,23 @@ public class MockRaftActorContext implements RaftActorContext {
         @Override public void append(ReplicatedLogEntry replicatedLogEntry) {
             log.add(replicatedLogEntry);
         }
+
+        @Override public void appendAndPersist(
+            ReplicatedLogEntry replicatedLogEntry) {
+            append(replicatedLogEntry);
+        }
+
+        @Override public List<ReplicatedLogEntry> getFrom(long index) {
+            List<ReplicatedLogEntry> entries = new ArrayList<>();
+            for(int i=(int) index ; i < log.size() ; i++) {
+                entries.add(get(i));
+            }
+            return entries;
+        }
+
+        @Override public long size() {
+            return log.size();
+        }
     }
 
     public static class MockReplicatedLogEntry implements ReplicatedLogEntry {