Merge "Fix raw references to Promise"
[controller.git] / opendaylight / md-sal / sal-akka-raft / src / test / java / org / opendaylight / controller / cluster / raft / MockRaftActorContext.java
index e02994bb06bed6a400f18b532f06dce93a92d934..a1088aa7f2b0bfe7be22cfc4b8ece4616fd58db3 100644 (file)
@@ -14,11 +14,14 @@ import akka.actor.ActorSystem;
 import akka.actor.Props;
 import akka.event.Logging;
 import akka.event.LoggingAdapter;
+import com.google.common.base.Preconditions;
+import com.google.protobuf.GeneratedMessage;
+import org.opendaylight.controller.cluster.raft.protobuff.client.messages.Payload;
+import org.opendaylight.controller.protobuff.messages.cluster.raft.AppendEntriesMessages;
+import org.opendaylight.controller.protobuff.messages.cluster.raft.test.MockPayloadMessages;
 
-import java.util.ArrayList;
-import java.util.Collections;
+import java.io.Serializable;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 
 public class MockRaftActorContext implements RaftActorContext {
@@ -30,7 +33,8 @@ public class MockRaftActorContext implements RaftActorContext {
     private long lastApplied = 0;
     private final ElectionTerm electionTerm;
     private ReplicatedLog replicatedLog;
-    private Map<String, String> peerAddresses = new HashMap();
+    private Map<String, String> peerAddresses = new HashMap<>();
+    private ConfigParams configParams;
 
     public MockRaftActorContext(){
         electionTerm = null;
@@ -43,7 +47,37 @@ public class MockRaftActorContext implements RaftActorContext {
         this.system = system;
         this.actor = actor;
 
-        electionTerm = new ElectionTermImpl(id);
+        final String id1 = id;
+        electionTerm = new ElectionTerm() {
+            /**
+             * Identifier of the actor whose election term information this is
+             */
+            private final String id = id1;
+            private long currentTerm = 0;
+            private String votedFor = "";
+
+            public long getCurrentTerm() {
+                return currentTerm;
+            }
+
+            public String getVotedFor() {
+                return votedFor;
+            }
+
+            public void update(long currentTerm, String votedFor){
+                this.currentTerm = currentTerm;
+                this.votedFor = votedFor;
+
+                // TODO : Write to some persistent state
+            }
+
+            @Override public void updateAndPersist(long currentTerm,
+                String votedFor) {
+                update(currentTerm, votedFor);
+            }
+        };
+
+        configParams = new DefaultConfigParamsImpl();
 
         initReplicatedLog();
     }
@@ -51,7 +85,7 @@ public class MockRaftActorContext implements RaftActorContext {
 
     public void initReplicatedLog(){
         this.replicatedLog = new SimpleReplicatedLog();
-        this.replicatedLog.append(new MockReplicatedLogEntry(1, 1, ""));
+        this.replicatedLog.append(new MockReplicatedLogEntry(1, 1, new MockPayload("")));
     }
 
     @Override public ActorRef actorOf(Props props) {
@@ -126,116 +160,90 @@ public class MockRaftActorContext implements RaftActorContext {
         peerAddresses.remove(name);
     }
 
-    public void setPeerAddresses(Map<String, String> peerAddresses) {
-        this.peerAddresses = peerAddresses;
-    }
-
-
-    public static class SimpleReplicatedLog implements ReplicatedLog {
-        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 ActorSelection getPeerActorSelection(String peerId) {
+        String peerAddress = getPeerAddress(peerId);
+        if(peerAddress != null){
+            return actorSelection(peerAddress);
         }
+        return null;
+    }
 
-        @Override public long lastTerm() {
-            if(log.size() == 0){
-                return -1;
-            }
+    @Override public void setPeerAddress(String peerId, String peerAddress) {
+        Preconditions.checkState(peerAddresses.containsKey(peerId));
+        peerAddresses.put(peerId, peerAddress);
+    }
 
-            return last().getTerm();
-        }
+    public void setPeerAddresses(Map<String, String> peerAddresses) {
+        this.peerAddresses = peerAddresses;
+    }
 
-        @Override public void removeFrom(long index) {
-            if(index >= log.size() || index < 0){
-                return;
-            }
-            for(int i=(int) index ; i < log.size() ; i++) {
-                log.remove(i);
-            }
-        }
+    @Override
+    public ConfigParams getConfigParams() {
+        return configParams;
+    }
 
-        @Override public void append(ReplicatedLogEntry replicatedLogEntry) {
-            log.add(replicatedLogEntry);
-        }
+    public void setConfigParams(ConfigParams configParams) {
+        this.configParams = configParams;
+    }
 
+    public static class SimpleReplicatedLog extends AbstractReplicatedLogImpl {
         @Override public void appendAndPersist(
             ReplicatedLogEntry replicatedLogEntry) {
             append(replicatedLogEntry);
         }
 
-        @Override public List<ReplicatedLogEntry> getFrom(long index) {
-            if(index >= log.size() || index < 0){
-                return Collections.EMPTY_LIST;
-            }
-            List<ReplicatedLogEntry> entries = new ArrayList<>();
-            for(int i=(int) index ; i < log.size() ; i++) {
-                entries.add(get(i));
-            }
-            return entries;
+        @Override public void removeFromAndPersist(long index) {
+            removeFrom(index);
         }
+    }
 
-        @Override public long size() {
-            return log.size();
-        }
+    public static class MockPayload extends Payload implements Serializable {
+        private String value = "";
 
-        @Override public boolean isPresent(long index) {
-            if(index >= log.size() || index < 0){
-                return false;
-            }
+        public MockPayload(){
+
+        }
 
-            return true;
+        public MockPayload(String s) {
+            this.value = s;
         }
 
-        @Override public boolean isInSnapshot(long index) {
-            return false;
+        @Override public  Map<GeneratedMessage.GeneratedExtension, String> encode() {
+            Map<GeneratedMessage.GeneratedExtension, String> map = new HashMap<GeneratedMessage.GeneratedExtension, String>();
+            map.put(MockPayloadMessages.value, value);
+            return map;
         }
 
-        @Override public Object getSnapshot() {
-            return null;
+        @Override public Payload decode(
+            AppendEntriesMessages.AppendEntries.ReplicatedLogEntry.Payload payloadProtoBuff) {
+            String value = payloadProtoBuff.getExtension(MockPayloadMessages.value);
+            this.value = value;
+            return this;
         }
 
-        @Override public long getSnapshotIndex() {
-            return -1;
+        @Override public String getClientPayloadClassName() {
+            return MockPayload.class.getName();
         }
 
-        @Override public long getSnapshotTerm() {
-            return -1;
+        public String toString() {
+            return value;
         }
     }
 
-    public static class MockReplicatedLogEntry implements ReplicatedLogEntry {
+    public static class MockReplicatedLogEntry implements ReplicatedLogEntry, Serializable {
 
         private final long term;
         private final long index;
-        private final Object data;
+        private final Payload data;
 
-        public MockReplicatedLogEntry(long term, long index, Object data){
+        public MockReplicatedLogEntry(long term, long index, Payload data){
 
             this.term = term;
             this.index = index;
             this.data = data;
         }
 
-        @Override public Object getData() {
+        @Override public Payload getData() {
             return data;
         }
 
@@ -247,4 +255,24 @@ public class MockRaftActorContext implements RaftActorContext {
             return index;
         }
     }
+
+    public static class MockReplicatedLogBuilder {
+        private ReplicatedLog mockLog = new SimpleReplicatedLog();
+
+        public  MockReplicatedLogBuilder createEntries(int start, int end, int term) {
+            for (int i=start; i<end; i++) {
+                this.mockLog.append(new ReplicatedLogImplEntry(i, term, new MockRaftActorContext.MockPayload("foo" + i)));
+            }
+            return this;
+        }
+
+        public  MockReplicatedLogBuilder addEntry(int index, int term, MockPayload payload) {
+            this.mockLog.append(new ReplicatedLogImplEntry(index, term, payload));
+            return this;
+        }
+
+        public ReplicatedLog build() {
+            return this.mockLog;
+        }
+    }
 }