Bug 1569 - [DEV] Too small variable for OF-Port-Number
[controller.git] / opendaylight / md-sal / sal-akka-raft / src / test / java / org / opendaylight / controller / cluster / raft / MockRaftActorContext.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.controller.cluster.raft;
10
11 import akka.actor.ActorRef;
12 import akka.actor.ActorSelection;
13 import akka.actor.ActorSystem;
14 import akka.actor.Props;
15 import akka.event.Logging;
16 import akka.event.LoggingAdapter;
17 import com.google.protobuf.GeneratedMessage;
18 import org.opendaylight.controller.cluster.raft.protobuff.client.messages.Payload;
19 import org.opendaylight.controller.cluster.raft.protobuff.messages.AppendEntriesMessages;
20 import org.opendaylight.controller.cluster.raft.protobuff.messages.MockPayloadMessages;
21 import com.google.common.base.Preconditions;
22
23 import java.io.Serializable;
24 import java.util.ArrayList;
25 import java.util.Collections;
26 import java.util.HashMap;
27 import java.util.List;
28 import java.util.Map;
29
30 public class MockRaftActorContext implements RaftActorContext {
31
32     private String id;
33     private ActorSystem system;
34     private ActorRef actor;
35     private long index = 0;
36     private long lastApplied = 0;
37     private final ElectionTerm electionTerm;
38     private ReplicatedLog replicatedLog;
39     private Map<String, String> peerAddresses = new HashMap();
40
41     public MockRaftActorContext(){
42         electionTerm = null;
43
44         initReplicatedLog();
45     }
46
47     public MockRaftActorContext(String id, ActorSystem system, ActorRef actor){
48         this.id = id;
49         this.system = system;
50         this.actor = actor;
51
52         final String id1 = id;
53         electionTerm = new ElectionTerm() {
54             /**
55              * Identifier of the actor whose election term information this is
56              */
57             private final String id = id1;
58             private long currentTerm = 0;
59             private String votedFor = "";
60
61             public long getCurrentTerm() {
62                 return currentTerm;
63             }
64
65             public String getVotedFor() {
66                 return votedFor;
67             }
68
69             public void update(long currentTerm, String votedFor){
70                 this.currentTerm = currentTerm;
71                 this.votedFor = votedFor;
72
73                 // TODO : Write to some persistent state
74             }
75
76             @Override public void updateAndPersist(long currentTerm,
77                 String votedFor) {
78                 update(currentTerm, votedFor);
79             }
80         };
81
82         initReplicatedLog();
83     }
84
85
86     public void initReplicatedLog(){
87         this.replicatedLog = new SimpleReplicatedLog();
88         this.replicatedLog.append(new MockReplicatedLogEntry(1, 1, new MockPayload("")));
89     }
90
91     @Override public ActorRef actorOf(Props props) {
92         return system.actorOf(props);
93     }
94
95     @Override public ActorSelection actorSelection(String path) {
96         return system.actorSelection(path);
97     }
98
99     @Override public String getId() {
100         return id;
101     }
102
103     @Override public ActorRef getActor() {
104         return actor;
105     }
106
107     @Override public ElectionTerm getTermInformation() {
108         return electionTerm;
109     }
110
111     public void setIndex(long index){
112         this.index = index;
113     }
114
115     @Override public long getCommitIndex() {
116         return index;
117     }
118
119     @Override public void setCommitIndex(long commitIndex) {
120         this.index = commitIndex;
121     }
122
123     @Override public void setLastApplied(long lastApplied){
124         this.lastApplied = lastApplied;
125     }
126
127     @Override public long getLastApplied() {
128         return lastApplied;
129     }
130
131     public void setReplicatedLog(ReplicatedLog replicatedLog) {
132         this.replicatedLog = replicatedLog;
133     }
134
135     @Override public ReplicatedLog getReplicatedLog() {
136         return replicatedLog;
137     }
138
139     @Override public ActorSystem getActorSystem() {
140         return this.system;
141     }
142
143     @Override public LoggingAdapter getLogger() {
144         return Logging.getLogger(system, this);
145     }
146
147     @Override public Map<String, String> getPeerAddresses() {
148         return peerAddresses;
149     }
150
151     @Override public String getPeerAddress(String peerId) {
152         return peerAddresses.get(peerId);
153     }
154
155     @Override public void addToPeers(String name, String address) {
156         peerAddresses.put(name, address);
157     }
158
159     @Override public void removePeer(String name) {
160         peerAddresses.remove(name);
161     }
162
163     @Override public ActorSelection getPeerActorSelection(String peerId) {
164         String peerAddress = getPeerAddress(peerId);
165         if(peerAddress != null){
166             return actorSelection(peerAddress);
167         }
168         return null;
169     }
170
171     @Override public void setPeerAddress(String peerId, String peerAddress) {
172         Preconditions.checkState(peerAddresses.containsKey(peerId));
173         peerAddresses.put(peerId, peerAddress);
174     }
175
176     public void setPeerAddresses(Map<String, String> peerAddresses) {
177         this.peerAddresses = peerAddresses;
178     }
179
180     @Override
181     public ConfigParams getConfigParams() {
182         return new DefaultConfigParamsImpl();
183     }
184
185     public static class SimpleReplicatedLog implements ReplicatedLog {
186         private final List<ReplicatedLogEntry> log = new ArrayList<>();
187
188         @Override public ReplicatedLogEntry get(long index) {
189             if(index >= log.size() || index < 0){
190                 return null;
191             }
192             return log.get((int) index);
193         }
194
195         @Override public ReplicatedLogEntry last() {
196             if(log.size() == 0){
197                 return null;
198             }
199             return log.get(log.size()-1);
200         }
201
202         @Override public long lastIndex() {
203             if(log.size() == 0){
204                 return -1;
205             }
206
207             return last().getIndex();
208         }
209
210         @Override public long lastTerm() {
211             if(log.size() == 0){
212                 return -1;
213             }
214
215             return last().getTerm();
216         }
217
218         @Override public void removeFrom(long index) {
219             if(index >= log.size() || index < 0){
220                 return;
221             }
222
223             log.subList((int) index, log.size()).clear();
224             //log.remove((int) index);
225         }
226
227         @Override public void removeFromAndPersist(long index) {
228             removeFrom(index);
229         }
230
231         @Override public void append(ReplicatedLogEntry replicatedLogEntry) {
232             log.add(replicatedLogEntry);
233         }
234
235         @Override public void appendAndPersist(
236             ReplicatedLogEntry replicatedLogEntry) {
237             append(replicatedLogEntry);
238         }
239
240         @Override public List<ReplicatedLogEntry> getFrom(long index) {
241             if(index >= log.size() || index < 0){
242                 return Collections.EMPTY_LIST;
243             }
244             List<ReplicatedLogEntry> entries = new ArrayList<>();
245             for(int i=(int) index ; i < log.size() ; i++) {
246                 entries.add(get(i));
247             }
248             return entries;
249         }
250
251         @Override public List<ReplicatedLogEntry> getFrom(long index, int max) {
252             if(index >= log.size() || index < 0){
253                 return Collections.EMPTY_LIST;
254             }
255             List<ReplicatedLogEntry> entries = new ArrayList<>();
256             int maxIndex = (int) index + max;
257             if(maxIndex > log.size()){
258                 maxIndex = log.size();
259             }
260
261             for(int i=(int) index ; i < maxIndex ; i++) {
262                 entries.add(get(i));
263             }
264             return entries;
265
266         }
267
268         @Override public long size() {
269             return log.size();
270         }
271
272         @Override public boolean isPresent(long index) {
273             if(index >= log.size() || index < 0){
274                 return false;
275             }
276
277             return true;
278         }
279
280         @Override public boolean isInSnapshot(long index) {
281             return false;
282         }
283
284         @Override public Object getSnapshot() {
285             return null;
286         }
287
288         @Override public long getSnapshotIndex() {
289             return -1;
290         }
291
292         @Override public long getSnapshotTerm() {
293             return -1;
294         }
295     }
296
297     public static class MockPayload extends Payload implements Serializable {
298         private String value = "";
299
300         public MockPayload(String s) {
301             this.value = s;
302         }
303
304         @Override public  Map<GeneratedMessage.GeneratedExtension, String> encode() {
305             Map<GeneratedMessage.GeneratedExtension, String> map = new HashMap<GeneratedMessage.GeneratedExtension, String>();
306             map.put(MockPayloadMessages.value, value);
307             return map;
308         }
309
310         @Override public Payload decode(
311             AppendEntriesMessages.AppendEntries.ReplicatedLogEntry.Payload payloadProtoBuff) {
312             String value = payloadProtoBuff.getExtension(MockPayloadMessages.value);
313             this.value = value;
314             return this;
315         }
316
317         @Override public String getClientPayloadClassName() {
318             return MockPayload.class.getName();
319         }
320
321         public String toString() {
322             return value;
323         }
324     }
325
326     public static class MockReplicatedLogEntry implements ReplicatedLogEntry, Serializable {
327
328         private final long term;
329         private final long index;
330         private final Payload data;
331
332         public MockReplicatedLogEntry(long term, long index, Payload data){
333
334             this.term = term;
335             this.index = index;
336             this.data = data;
337         }
338
339         @Override public Payload getData() {
340             return data;
341         }
342
343         @Override public long getTerm() {
344             return term;
345         }
346
347         @Override public long getIndex() {
348             return index;
349         }
350     }
351 }