blob: 03418c8a759c25261dea337bc4aa433651142fd8 [file] [log] [blame]
Naoki Shiotac88d9562013-06-18 15:21:56 -07001package net.onrc.onos.ofcontroller.core.internal;
2
3import java.util.ArrayList;
4import java.util.List;
5
Pankaj Berdebbd38612013-06-22 05:59:12 -07006import org.codehaus.jackson.annotate.JsonIgnore;
Naoki Shiotac88d9562013-06-18 15:21:56 -07007import org.easymock.EasyMock;
8import org.openflow.util.HexString;
9import org.slf4j.Logger;
10import org.slf4j.LoggerFactory;
11
12import com.tinkerpop.blueprints.Vertex;
Pankaj Berdebbd38612013-06-22 05:59:12 -070013import com.tinkerpop.frames.Property;
Naoki Shiotac88d9562013-06-18 15:21:56 -070014import com.tinkerpop.frames.annotations.gremlin.GremlinParam;
15
Pankaj Berde38646d62013-06-21 11:34:04 -070016import net.onrc.onos.graph.GraphDBConnection;
17import net.onrc.onos.graph.GraphDBOperation;
18import net.onrc.onos.graph.IDBConnection;
Naoki Shiotac88d9562013-06-18 15:21:56 -070019import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IDeviceObject;
20import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IFlowEntry;
21import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IFlowPath;
Jonathan Hart26bfe5c2013-11-04 12:19:51 -080022import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IIpv4Address;
Naoki Shiotac88d9562013-06-18 15:21:56 -070023import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IPortObject;
24import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.ISwitchObject;
25import net.onrc.onos.ofcontroller.util.FlowEntryId;
26import net.onrc.onos.ofcontroller.util.FlowId;
Naoki Shiotac88d9562013-06-18 15:21:56 -070027
28/**
29 * Mock class of GraphDBOperation which provides additional setter to construct a graph for test.
30 * This object simply caches parameters set up by override interfaces and reflect them when commit().
31 * *ForTest() methods are exempt from cache, parameters through those methods are reflected soon.
32 * @author Naoki Shiota
33 *
34 */
35public class TestableGraphDBOperation extends GraphDBOperation {
Yuta HIGUCHI6ac8d182013-10-22 15:24:56 -070036 protected final static Logger log = LoggerFactory.getLogger(TestableGraphDBOperation.class);
Naoki Shiotac88d9562013-06-18 15:21:56 -070037
38 protected List<TestSwitchObject> switches;
39 protected List<TestPortObject> ports;
40 protected List<TestDeviceObject> devices;
41 protected List<TestFlowPath> paths;
42 protected List<TestFlowEntry> entries;
43
44 protected List<TestSwitchObject> switchesToAdd;
45 protected List<TestPortObject> portsToAdd;
46 protected List<TestDeviceObject> devicesToAdd;
47 protected List<TestFlowPath> pathsToAdd;
48 protected List<TestFlowEntry> entriesToAdd;
49
50 protected List<TestSwitchObject> switchesToRemove;
51 protected List<TestPortObject> portsToRemove;
52 protected List<TestDeviceObject> devicesToRemove;
53 protected List<TestFlowPath> pathsToRemove;
54 protected List<TestFlowEntry> entriesToRemove;
55
56 // Testable implementations of INetMapTopologyObject interfaces
57
58 public static class TestSwitchObject implements ISwitchObject {
59 private String state,type,dpid;
60 private List<IPortObject> ports;
61 private List<IDeviceObject> devices;
62 private List<IFlowEntry> entries;
63
64 private String stateToUpdate, typeToUpdate, dpidToUpdate;
65 private List<IPortObject> portsToAdd;
66 private List<IPortObject> portsToRemove;
67
68 public TestSwitchObject() {
69 type = "switch";
70
71 ports = new ArrayList<IPortObject>();
72 portsToAdd = new ArrayList<IPortObject>();
73 portsToRemove = new ArrayList<IPortObject>();
74 devices = new ArrayList<IDeviceObject>();
75 entries = new ArrayList<IFlowEntry>();
76
77 clearUncommitedData();
78 }
79
80 public void commit() {
81 for(IPortObject port : portsToAdd) {
82 ports.add(port);
83 }
84 for(IPortObject port : portsToRemove) {
85 ports.remove(port);
86 }
87 if(stateToUpdate != null) { state = stateToUpdate; }
88 if(typeToUpdate != null) { type = typeToUpdate; }
89 if(dpidToUpdate != null) { dpid = dpidToUpdate; }
90
91 clearUncommitedData();
92 }
93
94 public void rollback() {
95 clearUncommitedData();
96 }
97
98 public void clearUncommitedData() {
99 portsToAdd.clear();
100 portsToRemove.clear();
101 stateToUpdate = typeToUpdate = dpidToUpdate = null;
102 }
103
104 public void setStateForTest(String state) { this.state = state; }
105 public void setTypeForTest(String type) { this.type = type; }
106 public void setDpidForTest(String dpid) { this.dpid = dpid; }
107 public void addPortForTest(TestPortObject port) { ports.add(port); }
108 public void addDeviceForTest(TestDeviceObject dev) { devices.add(dev); }
109 public void addEntryForTest(TestFlowEntry entry) { entries.add(entry); }
110
111 @Override
112 public String getState() { return state; }
113
114 @Override
115 public void setState(String state) { this.stateToUpdate = state; }
116
117 @Override
118 public String getType() { return type ; }
119
120 @Override
121 public void setType(String type) { this.typeToUpdate = type; }
122
123 // Not support for test
124 @Override
125 public Vertex asVertex() { return null; }
126
127 @Override
128 public String getDPID() { return dpid; }
129
130 @Override
131 public void setDPID(String dpid) { this.dpidToUpdate = dpid; }
132
133 @Override
134 public Iterable<IPortObject> getPorts() { return ports; }
135
136 @Override
137 public IPortObject getPort(@GremlinParam("port_num") short port_num) {
138 for(IPortObject port : ports) {
139 if(port.getNumber() == port_num) {
140 return port;
141 }
142 }
143 return null;
144 }
145
146 @Override
147 public void addPort(IPortObject port) { portsToAdd.add(port); }
148
149 @Override
150 public void removePort(IPortObject port) { portsToRemove.add(port); }
151
152 @Override
153 public Iterable<IDeviceObject> getDevices() { return devices; }
154
155 @Override
156 public Iterable<IFlowEntry> getFlowEntries() { return entries; }
157 }
158
159 public static class TestPortObject implements IPortObject {
160 private String state,type,desc;
161 private Short number;
162 private Integer port_state;
163 private ISwitchObject sw;
164
165 private List<IPortObject> linkedPorts;
Pavlin Radoslavov613eedc2013-11-02 16:08:25 -0700166 private List<IPortObject> reverseLinkedPorts;
Naoki Shiotac88d9562013-06-18 15:21:56 -0700167 private List<IDeviceObject> devices;
168 private List<IFlowEntry> inflows,outflows;
169
170 private String stateToUpdate,typeToUpdate,descToUpdate;
171 private Short numberToUpdate;
172 private Integer port_stateToUpdate;
173
174 private List<IPortObject> linkedPortsToAdd;
175 private List<IPortObject> linkedPortsToRemove;
176 private List<IDeviceObject> devicesToAdd;
177 private List<IDeviceObject> devicesToRemove;
178
179
180 public TestPortObject() {
181 type = "port";
182
183 linkedPorts = new ArrayList<IPortObject>();
Pavlin Radoslavov613eedc2013-11-02 16:08:25 -0700184 reverseLinkedPorts = new ArrayList<IPortObject>();
Naoki Shiotac88d9562013-06-18 15:21:56 -0700185 linkedPortsToAdd = new ArrayList<IPortObject>();
186 linkedPortsToRemove = new ArrayList<IPortObject>();
187 devices = new ArrayList<IDeviceObject>();
188 devicesToAdd = new ArrayList<IDeviceObject>();
189 devicesToRemove = new ArrayList<IDeviceObject>();
190 inflows = new ArrayList<IFlowEntry>();
191 outflows = new ArrayList<IFlowEntry>();
192
193 clearUncommitedData();
194 }
195
196 public void commit() {
197 for(IPortObject port : linkedPortsToAdd) { linkedPorts.add(port); }
198 for(IPortObject port : linkedPortsToRemove) { linkedPorts.remove(port); }
199 for(IDeviceObject dev : devicesToAdd) { devices.add(dev); }
200 for(IDeviceObject dev : devicesToRemove) { devices.remove(dev); }
201
202 if(stateToUpdate != null) { state = stateToUpdate; }
203 if(typeToUpdate != null) { type = typeToUpdate; }
204 if(descToUpdate != null) { desc = descToUpdate; }
205 if(numberToUpdate != null) { number = numberToUpdate; }
206 if(port_stateToUpdate != null) { port_state = port_stateToUpdate; }
207
208 clearUncommitedData();
209 }
210
211 public void rollback() {
212 clearUncommitedData();
213 }
214
215 public void clearUncommitedData() {
216 linkedPortsToAdd.clear();
217 linkedPortsToRemove.clear();
218 devicesToAdd.clear();
219 devicesToRemove.clear();
220 stateToUpdate = typeToUpdate = descToUpdate = null;
221 port_stateToUpdate = null;
222 numberToUpdate = null;
223 }
224
225 // Setter methods for test
226 public void setStateForTest(String state) { this.state = state; }
227 public void setTypeForTest(String type) { this.type = type; }
228 public void setDescForTest(String desc) { this.desc = desc; }
229 public void setNumberForTest(Short number) { this.number = number; }
230 public void setPortStateForTest(Integer state) { this.port_state = state; }
231 public void setSwitchForTest(ISwitchObject sw) { this.sw = sw; }
232 public void addLinkedPortForTest(TestPortObject port) { this.linkedPorts.add(port); }
233 public void addInflowForTest(TestFlowEntry entry) { inflows.add(entry); }
234 public void addOutflowForTest(TestFlowEntry entry) { outflows.add(entry); }
235
236 // Override methods for mock IPortObject
237 @Override
238 public String getState() { return state; }
239
240 @Override
241 public void setState(String state) { this.stateToUpdate = state; }
242
243 @Override
244 public String getType() { return type; }
245
246 @Override
247 public void setType(String type) { this.typeToUpdate = type; }
248
249 // not support for test
250 @Override
251 public Vertex asVertex() {
252 return null;
253 }
254
255 @Override
256 public Short getNumber() { return number; }
257
258 @Override
259 public void setNumber(Short n) { this.numberToUpdate = n; }
260
261 @Override
262 public String getDesc() { return desc; }
263
264 @Override
265 public void setDesc(String s) { this.descToUpdate = s; }
266
267 @Override
268 public Integer getPortState() { return port_state; }
269
270 @Override
271 public void setPortState(Integer s) { this.port_stateToUpdate = s; }
272
273 @Override
274 public ISwitchObject getSwitch() { return sw; }
275
276 @Override
277 public Iterable<IDeviceObject> getDevices() { return devices; }
278
279 @Override
280 public void setDevice(IDeviceObject device) { devicesToAdd.add(device); }
281
282 @Override
283 public void removeDevice(IDeviceObject device) { devicesToRemove.add(device); }
284
285 @Override
286 public Iterable<IFlowEntry> getInFlowEntries() { return inflows; }
287
288 @Override
289 public Iterable<IFlowEntry> getOutFlowEntries() { return outflows; }
290
291 @Override
292 public Iterable<IPortObject> getLinkedPorts() { return linkedPorts; }
293
294 @Override
Pavlin Radoslavov613eedc2013-11-02 16:08:25 -0700295 public Iterable<IPortObject> getReverseLinkedPorts() { return reverseLinkedPorts; }
296
297 @Override
Naoki Shiotac88d9562013-06-18 15:21:56 -0700298 public void removeLink(IPortObject dest_port) { linkedPortsToRemove.add(dest_port); }
299
300 @Override
301 public void setLinkPort(IPortObject dest_port) { linkedPortsToAdd.add(dest_port); }
Pankaj Berdebbd38612013-06-22 05:59:12 -0700302
303 @Override
304 @JsonIgnore
305 @Property("port_id")
306 public void setPortId(String id) {
307 // TODO Auto-generated method stub
308
309 }
310
311 @Override
312 @JsonIgnore
313 @Property("port_id")
314 public String getPortId() {
315 // TODO Auto-generated method stub
316 return null;
317 }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700318 }
319
Jonathan Hart26bfe5c2013-11-04 12:19:51 -0800320 /*
321 * Note by Jono, 11/4/2013
322 * I changed the interface of IDeviceObject but I didn't spend the
323 * time to update this class, because I can't see where this is used.
324 * I think this whole file is a candidate for deletion if it is not
325 * used anywhere - the graphDB objects are tested elsewhere by the
326 * tests in net.onrc.onos.ofcontroller.core.*
327 */
Naoki Shiotac88d9562013-06-18 15:21:56 -0700328 public static class TestDeviceObject implements IDeviceObject {
329 private String state,type,mac,ipaddr;
330 private List<IPortObject> ports;
331 private List<ISwitchObject> switches;
332
333 private String stateToUpdate,typeToUpdate,macToUpdate,ipaddrToUpdate;
334 private List<IPortObject> portsToAdd;
335 private List<IPortObject> portsToRemove;
336
337 public TestDeviceObject() {
338 type = "device";
339
340 ports = new ArrayList<IPortObject>();
341 portsToAdd = new ArrayList<IPortObject>();
342 portsToRemove = new ArrayList<IPortObject>();
343 switches = new ArrayList<ISwitchObject>();
344
345 clearUncommitedData();
346 }
347
348 public void commit() {
349 for(IPortObject port : portsToAdd) {
350 ports.add(port);
351 }
352 for(IPortObject port : portsToRemove) {
353 ports.remove(port);
354 }
355
356 if(stateToUpdate != null) { state = stateToUpdate; }
357 if(typeToUpdate != null) { type = typeToUpdate; }
358 if(macToUpdate != null) { mac = macToUpdate; }
359 if(ipaddrToUpdate != null) { ipaddr = ipaddrToUpdate; }
360
361 clearUncommitedData();
362 }
363
364 public void rollback() {
365 clearUncommitedData();
366 }
367
368 public void clearUncommitedData() {
369 ports.clear();
370 portsToAdd.clear();
371 portsToRemove.clear();
372
373 stateToUpdate = typeToUpdate = macToUpdate = ipaddrToUpdate = null;
374 }
375
376 // Setter methods for test
377 public void setStateForTest(String state) { this.state = state; }
378 public void setTypeForTest(String type) { this.type = type; }
379 public void setMacForTest(String mac) { this.mac = mac; }
380 public void setIpaddrForTest(String ipaddr) { this.ipaddr = ipaddr; }
381 public void addSwitchForTest(ISwitchObject sw) { switches.add(sw); }
382 public void addPortForTest(IPortObject port) { ports.add(port); }
383
384
385 // Override methods
386 @Override
387 public String getState() { return state; }
388
389 @Override
390 public void setState(String state) { stateToUpdate = state; }
391
392 @Override
393 public String getType() { return type; }
394
395 @Override
396 public void setType(String type) { typeToUpdate = type; }
397
398 @Override
399 public Vertex asVertex() {
400 // TODO Auto-generated method stub
401 return null;
402 }
403
404 @Override
405 public String getMACAddress() { return mac; }
406
407 @Override
408 public void setMACAddress(String macaddr) { macToUpdate = macaddr; }
409
Jonathan Hart26bfe5c2013-11-04 12:19:51 -0800410 //@Override
411 //public String getIPAddress() { return ipaddr; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700412
Jonathan Hart26bfe5c2013-11-04 12:19:51 -0800413 //@Override
414 //public void setIPAddress(String ipaddr) { ipaddrToUpdate = ipaddr; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700415
416 @Override
417 public Iterable<IPortObject> getAttachedPorts() {
418 return ports; }
419
420 @Override
421 public void setHostPort(IPortObject port) { portsToAdd.add(port); }
422
423 @Override
424 public void removeHostPort(IPortObject port) { portsToRemove.add(port); }
425
426 @Override
427 public Iterable<ISwitchObject> getSwitch() { return switches; }
Jonathan Hart26bfe5c2013-11-04 12:19:51 -0800428
429 @Override
430 public Iterable<IIpv4Address> getIpv4Addresses() {
431 // TODO Auto-generated method stub
432 return null;
433 }
434
435 @Override
436 public IIpv4Address getIpv4Address(int ipv4Address) {
437 // TODO Auto-generated method stub
438 return null;
439 }
440
441 @Override
442 public void addIpv4Address(IIpv4Address ipv4Address) {
443 // TODO Auto-generated method stub
444
445 }
446
447 @Override
448 public void removeIpv4Address(IIpv4Address ipv4Address) {
449 // TODO Auto-generated method stub
450
451 }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700452 }
453
454 public static class TestFlowPath implements IFlowPath {
455 private String state,type,flowId,installerId,srcSw,dstSw;
Pavlin Radoslavovd28cf7c2013-10-26 11:27:43 -0700456 private String flowPathType;
Pavlin Radoslavov7d4a40e2013-10-27 23:39:40 -0700457 private String flowPathUserState;
Pavlin Radoslavov204b2862013-07-12 14:15:36 -0700458 private Long flowPathFlags;
Pavlin Radoslavov5139c0b2013-12-09 18:04:53 -0800459 private Integer idleTimeout;
460 private Integer hardTimeout;
Pavlin Radoslavov7d4a40e2013-10-27 23:39:40 -0700461 private String dataPathSummary;
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700462 private Short srcPort,dstPort;
463 private String matchSrcMac,matchDstMac;
464 private Short matchEthernetFrameType;
465 private Short matchVlanId;
466 private Byte matchVlanPriority;
467 private String matchSrcIpaddr,matchDstIpaddr;
468 private Byte matchIpProto, matchIpToS;
469 private Short matchSrcTcpUdpPort, matchDstTcpUdpPort;
Pavlin Radoslavov1bc2c472013-07-17 18:11:37 -0700470 private String actions;
Naoki Shiotac88d9562013-06-18 15:21:56 -0700471
472 private List<IFlowEntry> entries;
473 private List<ISwitchObject> switches;
474
475 private String stateToUpdate,typeToUpdate,flowIdToUpdate,installerIdToUpdate,srcSwToUpdate,dstSwToUpdate;
Pavlin Radoslavovd28cf7c2013-10-26 11:27:43 -0700476 private String flowPathTypeToUpdate;
Pavlin Radoslavov7d4a40e2013-10-27 23:39:40 -0700477 private String flowPathUserStateToUpdate;
Pavlin Radoslavov204b2862013-07-12 14:15:36 -0700478 private Long flowPathFlagsToUpdate;
Pavlin Radoslavov5139c0b2013-12-09 18:04:53 -0800479 private Integer idleTimeoutToUpdate;
480 private Integer hardTimeoutToUpdate;
Pavlin Radoslavov7d4a40e2013-10-27 23:39:40 -0700481 private String dataPathSummaryToUpdate;
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700482 private Short srcPortToUpdate,dstPortToUpdate;
483 private String matchSrcMacToUpdate,matchDstMacToUpdate;
484 private Short matchEthernetFrameTypeToUpdate;
485 private Short matchVlanIdToUpdate;
486 private Byte matchVlanPriorityToUpdate;
487 private String matchSrcIpaddrToUpdate,matchDstIpaddrToUpdate;
488 private Byte matchIpProtoToUpdate, matchIpToSToUpdate;
489 private Short matchSrcTcpUdpPortToUpdate, matchDstTcpUdpPortToUpdate;
Pavlin Radoslavov1bc2c472013-07-17 18:11:37 -0700490 private String actionsToUpdate;
Naoki Shiotac88d9562013-06-18 15:21:56 -0700491
492 private List<IFlowEntry> flowsToAdd;
493 private List<IFlowEntry> flowsToRemove;
494
495 public TestFlowPath() {
496 type = "flow";
497
498 entries = new ArrayList<IFlowEntry>();
499 flowsToAdd = new ArrayList<IFlowEntry>();
500 flowsToRemove = new ArrayList<IFlowEntry>();
501
502 switches = new ArrayList<ISwitchObject>();
503
504 clear();
505 }
506
507 public void commit() {
508 for(IFlowEntry flow : flowsToAdd) {
509 entries.add(flow);
510 }
511 for(IFlowEntry flow : flowsToRemove) {
512 entries.remove(flow);
513 }
514 if(stateToUpdate != null) { state = stateToUpdate; }
515 if(typeToUpdate != null) { type = typeToUpdate; }
516 if(flowIdToUpdate != null) { flowId = flowIdToUpdate; }
517 if(installerIdToUpdate != null) { installerId = installerIdToUpdate; }
Pavlin Radoslavovd28cf7c2013-10-26 11:27:43 -0700518 if(flowPathTypeToUpdate != null) { flowPathType = flowPathTypeToUpdate; }
Pavlin Radoslavov7d4a40e2013-10-27 23:39:40 -0700519 if(flowPathUserStateToUpdate != null) { flowPathUserState = flowPathUserStateToUpdate; }
Pavlin Radoslavov204b2862013-07-12 14:15:36 -0700520 if(flowPathFlagsToUpdate != null) { flowPathFlags = flowPathFlagsToUpdate; }
Pavlin Radoslavov5139c0b2013-12-09 18:04:53 -0800521 if(idleTimeoutToUpdate != null) { idleTimeout = idleTimeoutToUpdate; }
522 if(hardTimeoutToUpdate != null) { hardTimeout = hardTimeoutToUpdate; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700523 if(srcSwToUpdate != null) { srcSw = srcSwToUpdate; }
524 if(dstSwToUpdate != null) { dstSw = dstSwToUpdate; }
525 if(dataPathSummaryToUpdate != null) { dataPathSummary = dataPathSummaryToUpdate; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700526 if(srcPortToUpdate != null) { srcPort = srcPortToUpdate; }
527 if(dstPortToUpdate != null) { dstPort = dstPortToUpdate; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700528 if(matchSrcMacToUpdate != null) { matchSrcMac = matchSrcMacToUpdate; }
529 if(matchDstMacToUpdate != null) { matchDstMac = matchDstMacToUpdate; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700530 if(matchEthernetFrameTypeToUpdate != null) { matchEthernetFrameType = matchEthernetFrameTypeToUpdate; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700531 if(matchVlanIdToUpdate != null) { matchVlanId = matchVlanIdToUpdate; }
532 if(matchVlanPriorityToUpdate != null) { matchVlanPriority = matchVlanPriorityToUpdate; }
533 if(matchSrcIpaddrToUpdate != null) { matchSrcIpaddr = matchSrcIpaddrToUpdate; }
534 if(matchDstIpaddrToUpdate != null) { matchDstIpaddr = matchDstIpaddrToUpdate; }
535 if(matchIpProtoToUpdate != null) { matchIpProto = matchIpProtoToUpdate; }
536 if(matchIpToSToUpdate != null) { matchIpToS = matchIpToSToUpdate; }
537 if(matchSrcTcpUdpPortToUpdate != null) { matchSrcTcpUdpPort = matchSrcTcpUdpPortToUpdate; }
538 if(matchDstTcpUdpPortToUpdate != null) { matchDstTcpUdpPort = matchDstTcpUdpPortToUpdate; }
Pavlin Radoslavov1bc2c472013-07-17 18:11:37 -0700539 if(actionsToUpdate != null) { actions = actionsToUpdate; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700540 }
541
542 public void rollback() {
543 clear();
544 }
545
546 public void clear() {
547 flowsToAdd.clear();
548 flowsToRemove.clear();
549
550 stateToUpdate = typeToUpdate = flowIdToUpdate = installerIdToUpdate = null;
Pavlin Radoslavovd28cf7c2013-10-26 11:27:43 -0700551 flowPathTypeToUpdate = null;
Pavlin Radoslavov7d4a40e2013-10-27 23:39:40 -0700552 flowPathUserStateToUpdate = null;
Pavlin Radoslavov204b2862013-07-12 14:15:36 -0700553 flowPathFlagsToUpdate = null;
Pavlin Radoslavov5139c0b2013-12-09 18:04:53 -0800554 idleTimeoutToUpdate = null;
555 hardTimeoutToUpdate = null;
Pavlin Radoslavov7d4a40e2013-10-27 23:39:40 -0700556 srcSwToUpdate = dstSwToUpdate = dataPathSummaryToUpdate = null;
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700557 srcPortToUpdate = dstPortToUpdate = null;
558 matchSrcMacToUpdate = matchDstMacToUpdate = null;
559 matchEthernetFrameTypeToUpdate = null;
560 matchVlanIdToUpdate = null;
561 matchVlanPriorityToUpdate = null;
562 matchSrcIpaddrToUpdate = matchDstIpaddrToUpdate = null;
563 matchIpProtoToUpdate = matchIpToSToUpdate = null;
564 matchSrcTcpUdpPortToUpdate = matchDstTcpUdpPortToUpdate = null;
Pavlin Radoslavov1bc2c472013-07-17 18:11:37 -0700565 actionsToUpdate = null;
Naoki Shiotac88d9562013-06-18 15:21:56 -0700566 }
567
568 // Setter methods for test
569 public void setStateForTest(String state) { this.state = state; }
570 public void setTypeForTest(String type) { this.type = type; }
571 public void setFlowIdForTest(String flowId) { this.flowId = flowId; }
572 public void setInstallerIdForTest(String installerId) { this.installerId = installerId; }
Pavlin Radoslavovd28cf7c2013-10-26 11:27:43 -0700573 public void setFlowPathTypeForTest(String flowPathType) { this.flowPathType = flowPathType; }
Pavlin Radoslavov7d4a40e2013-10-27 23:39:40 -0700574 public void setFlowPathUserStateForTest(String flowPathUserState) { this.flowPathUserState = flowPathUserState; }
Pavlin Radoslavov204b2862013-07-12 14:15:36 -0700575 public void setFlowPathFlagsForTest(Long flowPathFlags) { this.flowPathFlags = flowPathFlags; }
Pavlin Radoslavov5139c0b2013-12-09 18:04:53 -0800576 public void setIdleTimeoutForTest(Integer idleTimeout) { this.idleTimeout = idleTimeout; }
577 public void setHardTimeoutForTest(Integer hardTimeout) { this.hardTimeout = hardTimeout; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700578 public void setSrcSwForTest(String srcSw) { this.srcSw = srcSw; }
579 public void setDstSwForTest(String dstSw) { this.dstSw = dstSw; }
580 public void setDataPathSummaryForTest(String dataPathSummary) { this.dataPathSummary = dataPathSummary; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700581 public void setSrcPortForTest(Short srcPort) { this.srcPort = srcPort; }
582 public void setDstPortForTest(Short dstPort) { this.dstPort = dstPort; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700583 public void setMatchSrcMacForTest(String matchSrcMac) { this.matchSrcMac = matchSrcMac; }
584 public void setMatchDstMacForTest(String matchDstMac) { this.matchDstMac = matchDstMac; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700585 public void setMatchEthernetFrameTypeForTest(Short matchEthernetFrameType) { this.matchEthernetFrameType = matchEthernetFrameType; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700586 public void setMatchVlanIdForTest(Short matchVlanId) { this.matchVlanId = matchVlanId; }
587 public void setMatchVlanPriorityForTest(Byte matchVlanPriority) { this.matchVlanPriority = matchVlanPriority; }
588 public void setMatchSrcIpaddrForTest(String matchSrcIpaddr) { this.matchSrcIpaddr = matchSrcIpaddr; }
589 public void setMatchDstIpaddrForTest(String matchDstIpaddr) { this.matchDstIpaddr = matchDstIpaddr; }
590 public void setMatchIpProtoForTest(Byte matchIpProto) { this.matchIpProto = matchIpProto; }
591 public void setMatchIpToSForTest(Byte matchIpToS) { this.matchIpToS = matchIpToS; }
592 public void setMatchSrcTcpUdpPortForTest(Short matchSrcTcpUdpPort) { this.matchSrcTcpUdpPort = matchSrcTcpUdpPort; }
593 public void setMatchDstTcpUdpPortForTest(Short matchDstTcpUdpPort) { this.matchDstTcpUdpPort = matchDstTcpUdpPort; }
Pavlin Radoslavov1bc2c472013-07-17 18:11:37 -0700594 public void setActionsForTest(String actions) { this.actions = actions; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700595 public void addFlowEntryForTest(IFlowEntry entry) { entries.add(entry); }
596 public void addSwitchForTest(ISwitchObject sw) { switches.add(sw); }
597
598 @Override
599 public String getState() { return state; }
600
601 @Override
602 public void setState(String state) { stateToUpdate = state; }
603
604 @Override
605 public String getType() { return type; }
606
607 @Override
608 public void setType(String type) { typeToUpdate = type; }
609
610 @Override
611 public Vertex asVertex() {
612 // TODO Auto-generated method stub
613 return null;
614 }
615
616 @Override
617 public String getFlowId() { return flowId; }
618
619 @Override
620 public void setFlowId(String flowId) { flowIdToUpdate = flowId; }
621
622 @Override
623 public String getInstallerId() { return installerId; }
624
625 @Override
626 public void setInstallerId(String installerId) { installerIdToUpdate = installerId; }
627
628 @Override
Pavlin Radoslavovd28cf7c2013-10-26 11:27:43 -0700629 public String getFlowPathType() { return flowPathType; }
630
631 @Override
632 public void setFlowPathType(String flowPathType) { flowPathTypeToUpdate = flowPathType; }
633
634 @Override
Pavlin Radoslavov7d4a40e2013-10-27 23:39:40 -0700635 public String getFlowPathUserState() { return flowPathUserState; }
636
637 @Override
638 public void setFlowPathUserState(String flowPathUserState) { flowPathUserStateToUpdate = flowPathUserState; }
639
640 @Override
Pavlin Radoslavov204b2862013-07-12 14:15:36 -0700641 public Long getFlowPathFlags() { return flowPathFlags; }
642
643 @Override
644 public void setFlowPathFlags(Long flowPathFlags) { flowPathFlagsToUpdate = flowPathFlags; }
645
646 @Override
Pavlin Radoslavov5139c0b2013-12-09 18:04:53 -0800647 public Integer getIdleTimeout() { return idleTimeout; }
648
649 @Override
650 public void setIdleTimeout(Integer idleTimeout) { idleTimeoutToUpdate = idleTimeout; }
651
652 @Override
653 public Integer getHardTimeout() { return hardTimeout; }
654
655 @Override
656 public void setHardTimeout(Integer hardTimeout) { hardTimeoutToUpdate = hardTimeout; }
657
658 @Override
Naoki Shiotac88d9562013-06-18 15:21:56 -0700659 public String getSrcSwitch() { return srcSw; }
660
661 @Override
662 public void setSrcSwitch(String srcSwitch) { srcSwToUpdate = srcSwitch; }
663
664 @Override
665 public Short getSrcPort() { return srcPort; }
666
667 @Override
668 public void setSrcPort(Short srcPort) { srcPortToUpdate = srcPort; }
669
670 @Override
671 public String getDstSwitch() { return dstSw; }
672
673 @Override
674 public void setDstSwitch(String dstSwitch) { dstSwToUpdate = dstSwitch; }
675
676 @Override
677 public Short getDstPort() { return dstPort; }
678
679 @Override
680 public void setDstPort(Short dstPort) { dstPortToUpdate = dstPort; }
681
682 @Override
683 public String getDataPathSummary() { return dataPathSummary; }
684
685 @Override
686 public void setDataPathSummary(String dataPathSummary) { dataPathSummaryToUpdate = dataPathSummary; }
687
688 @Override
689 public Iterable<IFlowEntry> getFlowEntries() { return entries; }
690
691 @Override
692 public void addFlowEntry(IFlowEntry flowEntry) {
693 if(! entries.contains(flowEntry)) {
694 flowsToAdd.add(flowEntry);
695 }
696 }
697
698 @Override
699 public void removeFlowEntry(IFlowEntry flowEntry) {
700 if(entries.contains(flowEntry)) {
701 flowsToAdd.add(flowEntry);
702 }
703 }
704
705 @Override
Naoki Shiotac88d9562013-06-18 15:21:56 -0700706 public String getMatchSrcMac() { return matchSrcMac; }
707
708 @Override
709 public void setMatchSrcMac(String matchSrcMac) { matchSrcMacToUpdate = matchSrcMac; }
710
711 @Override
712 public String getMatchDstMac() { return matchDstMac; }
713
714 @Override
715 public void setMatchDstMac(String matchDstMac) { matchDstMacToUpdate = matchDstMac; }
716
717 @Override
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700718 public Short getMatchEthernetFrameType() { return matchEthernetFrameType; }
719
720 @Override
721 public void setMatchEthernetFrameType(Short matchEthernetFrameType) {
722 matchEthernetFrameTypeToUpdate = matchEthernetFrameType; }
723
724 @Override
725 public Short getMatchVlanId() { return matchVlanId; }
726
727 @Override
728 public void setMatchVlanId(Short matchVlanId) {
729 matchVlanIdToUpdate = matchVlanId; }
730
731 @Override
732 public Byte getMatchVlanPriority() { return matchVlanPriority; }
733
734 @Override
735 public void setMatchVlanPriority(Byte matchVlanPriority) {
736 matchVlanPriorityToUpdate = matchVlanPriority; }
737
738 @Override
Naoki Shiotac88d9562013-06-18 15:21:56 -0700739 public String getMatchSrcIPv4Net() { return matchSrcIpaddr; }
740
741 @Override
742 public void setMatchSrcIPv4Net(String matchSrcIPv4Net) {
743 matchSrcIpaddrToUpdate = matchSrcIPv4Net; }
744
745 @Override
746 public String getMatchDstIPv4Net() { return matchDstIpaddr; }
747
748 @Override
749 public void setMatchDstIPv4Net(String matchDstIPv4Net) {
750 matchDstIpaddrToUpdate = matchDstIPv4Net; }
751
752 @Override
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700753 public Byte getMatchIpProto() { return matchIpProto; }
754
755 @Override
756 public void setMatchIpProto(Byte matchIpProto) {
757 matchIpProtoToUpdate = matchIpProto; }
758
759 @Override
760 public Byte getMatchIpToS() { return matchIpToS; }
761
762 @Override
763 public void setMatchIpToS(Byte matchIpToS) {
764 matchIpToSToUpdate = matchIpToS; }
765
766 @Override
767 public Short getMatchSrcTcpUdpPort() { return matchSrcTcpUdpPort; }
768
769 @Override
770 public void setMatchSrcTcpUdpPort(Short matchSrcTcpUdpPort) {
771 matchSrcTcpUdpPortToUpdate = matchSrcTcpUdpPort; }
772
773 @Override
774 public Short getMatchDstTcpUdpPort() { return matchDstTcpUdpPort; }
775
776 @Override
777 public void setMatchDstTcpUdpPort(Short matchDstTcpUdpPort) {
778 matchDstTcpUdpPortToUpdate = matchDstTcpUdpPort; }
779
780 @Override
Pavlin Radoslavov1bc2c472013-07-17 18:11:37 -0700781 public String getActions() { return actions; }
782
783 @Override
784 public void setActions(String actions) {
785 actionsToUpdate = actions; }
786
787 @Override
Naoki Shiotac88d9562013-06-18 15:21:56 -0700788 public Iterable<ISwitchObject> getSwitches() { return switches; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700789 }
790
791 public static class TestFlowEntry implements IFlowEntry {
792 private String state,type,entryId,dpid,userState,switchState,errorStateType,errorStateCode;
Pavlin Radoslavov5139c0b2013-12-09 18:04:53 -0800793 private Integer idleTimeout;
794 private Integer hardTimeout;
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700795 private Short matchInPort;
796 private String matchSrcMac,matchDstMac;
797 private Short matchEtherFrameType;
798 private Short matchVlanId;
799 private Byte matchVlanPriority;
800 private String matchSrcIpaddr,matchDstIpaddr;
801 private Byte matchIpProto, matchIpToS;
802 private Short matchSrcTcpUdpPort, matchDstTcpUdpPort;
Pavlin Radoslavovc1bafd12013-07-12 17:00:35 -0700803 private Short actionOutputPort;
Pavlin Radoslavov1bc2c472013-07-17 18:11:37 -0700804 private String actions;
Naoki Shiotac88d9562013-06-18 15:21:56 -0700805
806 private IFlowPath flowPath;
807 private ISwitchObject sw;
808 private IPortObject inport,outport;
809
810 private String stateToUpdate,typeToUpdate,entryIdToUpdate,dpidToUpdate,
811 userStateToUpdate,switchStateToUpdate,errorStateTypeToUpdate,errorStateCodeToUpdate;
Pavlin Radoslavov5139c0b2013-12-09 18:04:53 -0800812 private Integer idleTimeoutToUpdate;
813 private Integer hardTimeoutToUpdate;
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700814 private Short matchInPortToUpdate;
815 private String matchSrcMacToUpdate,matchDstMacToUpdate;
816 private Short matchEtherFrameTypeToUpdate;
817 private Short matchVlanIdToUpdate;
818 private Byte matchVlanPriorityToUpdate;
819 private String matchSrcIpaddrToUpdate,matchDstIpaddrToUpdate;
820 private Byte matchIpProtoToUpdate, matchIpToSToUpdate;
821 private Short matchSrcTcpUdpPortToUpdate, matchDstTcpUdpPortToUpdate;
Pavlin Radoslavovc1bafd12013-07-12 17:00:35 -0700822 private Short actionOutputPortToUpdate;
Pavlin Radoslavov1bc2c472013-07-17 18:11:37 -0700823 private String actionsToUpdate;
Naoki Shiotac88d9562013-06-18 15:21:56 -0700824
825 private IFlowPath flowPathToUpdate;
826 private ISwitchObject swToUpdate;
827 private IPortObject inportToUpdate,outportToUpdate;
828
829 public TestFlowEntry() {
830 type = "flow_entry";
831
832 clearUncommitedData();
833 }
834
835 public void commit() {
836 if(stateToUpdate != null) { state = stateToUpdate; }
837 if(typeToUpdate != null) { type = typeToUpdate; }
838 if(entryIdToUpdate != null) { entryId = entryIdToUpdate; }
Pavlin Radoslavov5139c0b2013-12-09 18:04:53 -0800839 if(idleTimeoutToUpdate != null) { idleTimeout = idleTimeoutToUpdate; }
840 if(hardTimeoutToUpdate != null) { hardTimeout = hardTimeoutToUpdate; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700841 if(dpidToUpdate != null) { dpid = dpidToUpdate; }
842 if(userStateToUpdate != null) { userState = userStateToUpdate; }
843 if(switchStateToUpdate != null) { switchState = switchStateToUpdate; }
844 if(errorStateTypeToUpdate != null) { errorStateType = errorStateTypeToUpdate; }
845 if(errorStateCodeToUpdate != null) { errorStateCode = errorStateCodeToUpdate; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700846 if(matchInPortToUpdate != null) { matchInPort = matchInPortToUpdate; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700847 if(matchSrcMacToUpdate != null) { matchSrcMac = matchSrcMacToUpdate; }
848 if(matchDstMacToUpdate != null) { matchDstMac = matchDstMacToUpdate; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700849 if(matchEtherFrameTypeToUpdate != null) { matchEtherFrameType = matchEtherFrameTypeToUpdate; }
850 if(matchVlanIdToUpdate != null) { matchVlanId = matchVlanIdToUpdate; }
851 if(matchVlanPriorityToUpdate != null) { matchVlanPriority = matchVlanPriorityToUpdate; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700852 if(matchSrcIpaddrToUpdate != null) { matchSrcIpaddr = matchSrcIpaddrToUpdate; }
853 if(matchDstIpaddrToUpdate != null) { matchDstIpaddr = matchDstIpaddrToUpdate; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700854 if(matchIpProtoToUpdate != null) { matchIpProto = matchIpProtoToUpdate; }
855 if(matchIpToSToUpdate != null) { matchIpToS = matchIpToSToUpdate; }
856 if(matchSrcTcpUdpPortToUpdate != null) { matchSrcTcpUdpPort = matchSrcTcpUdpPortToUpdate; }
857 if(matchDstTcpUdpPortToUpdate != null) { matchDstTcpUdpPort = matchDstTcpUdpPortToUpdate; }
Pavlin Radoslavovc1bafd12013-07-12 17:00:35 -0700858 if(actionOutputPortToUpdate != null) { actionOutputPort = actionOutputPortToUpdate; }
Pavlin Radoslavov1bc2c472013-07-17 18:11:37 -0700859 if(actionsToUpdate != null) { actions = actionsToUpdate; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700860
861 if(flowPathToUpdate != null) { flowPath = flowPathToUpdate; }
862 if(swToUpdate != null) { sw = swToUpdate; }
863 if(inportToUpdate != null) { inport = inportToUpdate; }
864 if(outportToUpdate != null) { outport = outportToUpdate; }
865
866 clearUncommitedData();
867 }
868
869 public void rollback() {
870 clearUncommitedData();
871 }
872
873 public void clearUncommitedData() {
874 stateToUpdate = typeToUpdate = entryIdToUpdate = dpidToUpdate = null;
Pavlin Radoslavov5139c0b2013-12-09 18:04:53 -0800875 idleTimeoutToUpdate = hardTimeoutToUpdate = null;
Naoki Shiotac88d9562013-06-18 15:21:56 -0700876 userStateToUpdate = switchStateToUpdate = errorStateTypeToUpdate = errorStateCodeToUpdate = null;
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700877 matchInPortToUpdate = null;
878 matchSrcMacToUpdate = matchDstMacToUpdate = null;
879 matchEtherFrameTypeToUpdate = null;
880 matchVlanIdToUpdate = null;
881 matchVlanPriorityToUpdate = null;
882 matchSrcIpaddrToUpdate = matchDstIpaddrToUpdate = null;
883 matchIpProtoToUpdate = matchIpToSToUpdate = null;
884 matchSrcTcpUdpPortToUpdate = matchDstTcpUdpPortToUpdate = null;
Pavlin Radoslavovc1bafd12013-07-12 17:00:35 -0700885 actionOutputPortToUpdate = null;
Pavlin Radoslavov1bc2c472013-07-17 18:11:37 -0700886 actionsToUpdate = null;
Naoki Shiotac88d9562013-06-18 15:21:56 -0700887 flowPathToUpdate = null;
888 swToUpdate = null;
889 inportToUpdate = outportToUpdate = null;
890 }
891
892 // Setter methods for test
893 public void setStateForTest(String state) { this.state = state; }
894 public void setTypeForTest(String type) { this.type = type; }
895 public void setEntryIdForTest(String entryId) { this.entryId = entryId; }
Pavlin Radoslavov5139c0b2013-12-09 18:04:53 -0800896 public void setIdleTimeoutForTest(Integer idleTimeout) { this.idleTimeout = idleTimeout; }
897 public void setHardTimeoutForTest(Integer hardTimeout) { this.hardTimeout = hardTimeout; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700898 public void setDpidForTest(String dpid) { this.dpid = dpid; }
899 public void setUserStateForTest(String userState) { this.userState = userState; }
900 public void setSwitchStateForTest(String switchState) { this.switchState = switchState; }
901 public void setErrorStateTypeForTest(String errorStateType) { this.errorStateType = errorStateType; }
902 public void setErrorStateCodeForTest(String errorStateCode) { this.errorStateCode = errorStateCode; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700903 public void setMatchInPortForTest(Short matchInPort) { this.matchInPort = matchInPort; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700904 public void setMatchSrcMacForTest(String matchSrcMac) { this.matchSrcMac = matchSrcMac; }
905 public void setMatchDstMacForTest(String matchDstMac) { this.matchDstMac = matchDstMac; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700906 public void setMatchEtherFrameTypeForTest(Short matchEtherFrameType) { this.matchEtherFrameType = matchEtherFrameType; }
907 public void setMatchVlanIdForTest(Short matchVlanId) { this.matchVlanId = matchVlanId; }
908 public void setMatchVlanPriorityForTest(Byte matchVlanPriority) { this.matchVlanPriority = matchVlanPriority; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700909 public void setMatchSrcIpaddrForTest(String matchSrcIpaddr) { this.matchSrcIpaddr = matchSrcIpaddr; }
910 public void setMatchDstIpaddrForTest(String matchDstIpaddr) { this.matchDstIpaddr = matchDstIpaddr; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700911 public void setMatchIpProtoForTest(Byte matchIpProto) { this.matchIpProto = matchIpProto; }
912 public void setMatchIpToSForTest(Byte matchIpToS) { this.matchIpToS = matchIpToS; }
913 public void setMatchSrcTcpUdpPortForTest(Short matchSrcTcpUdpPort) { this.matchSrcTcpUdpPort = matchSrcTcpUdpPort; }
914 public void setMatchDstTcpUdpPortForTest(Short matchDstTcpUdpPort) { this.matchDstTcpUdpPort = matchDstTcpUdpPort; }
Pavlin Radoslavovc1bafd12013-07-12 17:00:35 -0700915 public void setActionOutputPortForTest(Short actionOutputPort) { this.actionOutputPort = actionOutputPort; }
Pavlin Radoslavov1bc2c472013-07-17 18:11:37 -0700916 public void setActionsForTest(String actions) { this.actions = actions; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700917 public void setFlowPathForTest(IFlowPath flowPath) { this.flowPath = flowPath; }
918 public void setSwitchForTest(ISwitchObject sw) { this.sw = sw; }
919 public void setInportForTest(IPortObject inport) { this.inport = inport; }
920 public void setOutportForTest(IPortObject outport) { this.outport = outport; }
921
922 @Override
923 public String getState() { return state; }
924
925 @Override
926 public void setState(String state) { stateToUpdate = state; }
927
928 @Override
929 public String getType() { return type; }
930
931 @Override
932 public void setType(String type) { typeToUpdate = type; }
933
934 @Override
935 public Vertex asVertex() {
936 // TODO Auto-generated method stub
937 return null;
938 }
939
940 @Override
941 public String getFlowEntryId() { return entryId; }
942
943 @Override
944 public void setFlowEntryId(String flowEntryId) { entryIdToUpdate = flowEntryId; }
Pavlin Radoslavov5139c0b2013-12-09 18:04:53 -0800945
946 @Override
947 public Integer getIdleTimeout() { return idleTimeout; }
948
949 @Override
950 public void setIdleTimeout(Integer idleTimeout) { idleTimeoutToUpdate = idleTimeout; }
951
952 @Override
953 public Integer getHardTimeout() { return hardTimeout; }
954
955 @Override
956 public void setHardTimeout(Integer hardTimeout) { hardTimeoutToUpdate = hardTimeout; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700957
958 @Override
959 public String getSwitchDpid() { return dpid; }
960
961 @Override
962 public void setSwitchDpid(String switchDpid) { dpidToUpdate = switchDpid; }
963
964 @Override
965 public String getUserState() { return userState; }
966
967 @Override
968 public void setUserState(String userState) { userStateToUpdate = userState; }
969
970 @Override
971 public String getSwitchState() { return switchState; }
972
973 @Override
974 public void setSwitchState(String switchState) { switchStateToUpdate = switchState; }
975
976 @Override
977 public String getErrorStateType() { return errorStateType; }
978
979 @Override
980 public void setErrorStateType(String errorStateType) { errorStateTypeToUpdate = errorStateType; }
981
982 @Override
983 public String getErrorStateCode() { return errorStateCode; }
984
985 @Override
986 public void setErrorStateCode(String errorStateCode) { errorStateCodeToUpdate = errorStateCode; }
987
988 @Override
989 public Short getMatchInPort() { return matchInPort; }
990
991 @Override
992 public void setMatchInPort(Short matchInPort) { matchInPortToUpdate = matchInPort; }
993
994 @Override
Naoki Shiotac88d9562013-06-18 15:21:56 -0700995 public String getMatchSrcMac() { return matchSrcMac; }
996
997 @Override
998 public void setMatchSrcMac(String matchSrcMac) { matchSrcMacToUpdate = matchSrcMac; }
999
1000 @Override
1001 public String getMatchDstMac() { return matchDstMac; }
1002
1003 @Override
1004 public void setMatchDstMac(String matchDstMac) { matchDstMacToUpdate = matchDstMac; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -07001005
1006 @Override
1007 public Short getMatchEthernetFrameType() {return matchEtherFrameType; }
Naoki Shiotac88d9562013-06-18 15:21:56 -07001008
1009 @Override
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -07001010 public void setMatchEthernetFrameType(Short matchEthernetFrameType) { matchEtherFrameTypeToUpdate = matchEthernetFrameType; }
1011
1012 @Override
1013 public Short getMatchVlanId() {return matchVlanId; }
1014
1015 @Override
Yuta HIGUCHI5208f1a2013-10-14 10:04:16 -07001016 public void setMatchVlanId(Short matchVlanId) { matchVlanIdToUpdate = matchVlanId; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -07001017
1018 @Override
1019 public Byte getMatchVlanPriority() {return matchVlanPriority; }
1020
1021 @Override
Yuta HIGUCHI5208f1a2013-10-14 10:04:16 -07001022 public void setMatchVlanPriority(Byte matchVlanPriority) { matchVlanPriorityToUpdate = matchVlanPriority; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -07001023
1024 @Override
Naoki Shiotac88d9562013-06-18 15:21:56 -07001025 public String getMatchSrcIPv4Net() { return matchSrcIpaddr; }
1026
1027 @Override
1028 public void setMatchSrcIPv4Net(String matchSrcIPv4Net) { matchSrcIpaddrToUpdate = matchSrcIPv4Net; }
1029
1030 @Override
1031 public String getMatchDstIPv4Net() { return matchDstIpaddr; }
1032
1033 @Override
1034 public void setMatchDstIPv4Net(String matchDstIPv4Net) { matchDstIpaddrToUpdate = matchDstIPv4Net; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -07001035
1036 @Override
1037 public Byte getMatchIpProto() {return matchIpProto; }
1038
1039 @Override
Yuta HIGUCHI5208f1a2013-10-14 10:04:16 -07001040 public void setMatchIpProto(Byte matchIpProto) { matchIpProtoToUpdate = matchIpProto; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -07001041
1042 @Override
1043 public Byte getMatchIpToS() {return matchIpToS; }
1044
1045 @Override
Yuta HIGUCHI5208f1a2013-10-14 10:04:16 -07001046 public void setMatchIpToS(Byte matchIpToS) { matchIpToSToUpdate = matchIpToS; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -07001047
1048 @Override
1049 public Short getMatchSrcTcpUdpPort() {return matchSrcTcpUdpPort; }
1050
1051 @Override
1052 public void setMatchSrcTcpUdpPort(Short matchSrcTcpUdpPort) { matchSrcTcpUdpPortToUpdate = matchSrcTcpUdpPort; }
1053
1054 @Override
1055 public Short getMatchDstTcpUdpPort() {return matchDstTcpUdpPort; }
1056
1057 @Override
1058 public void setMatchDstTcpUdpPort(Short matchDstTcpUdpPort) { matchDstTcpUdpPortToUpdate = matchDstTcpUdpPort; }
Naoki Shiotac88d9562013-06-18 15:21:56 -07001059
1060 @Override
Pavlin Radoslavovc1bafd12013-07-12 17:00:35 -07001061 public Short getActionOutputPort() { return actionOutputPort; }
Naoki Shiotac88d9562013-06-18 15:21:56 -07001062
1063 @Override
Pavlin Radoslavovc1bafd12013-07-12 17:00:35 -07001064 public void setActionOutputPort(Short actionOutputPort) { actionOutputPortToUpdate = actionOutputPort; }
Pavlin Radoslavov1bc2c472013-07-17 18:11:37 -07001065
1066 @Override
1067 public String getActions() { return actions; }
1068
1069 @Override
1070 public void setActions(String actions) { actionsToUpdate = actions; }
Naoki Shiotac88d9562013-06-18 15:21:56 -07001071
1072 @Override
1073 public IFlowPath getFlow() { return flowPath; }
1074
1075 @Override
1076 public void setFlow(IFlowPath flow) { flowPathToUpdate = flow; }
1077
1078 @Override
1079 public ISwitchObject getSwitch() { return sw; }
1080
1081 @Override
1082 public void setSwitch(ISwitchObject sw) { swToUpdate = sw; }
1083
1084 @Override
1085 public IPortObject getInPort() { return inport; }
1086
1087 @Override
1088 public void setInPort(IPortObject port) { inportToUpdate = port; }
1089
1090 @Override
1091 public IPortObject getOutPort() { return outport; }
1092
1093 @Override
1094 public void setOutPort(IPortObject port) { outportToUpdate = port; }
1095 }
1096
1097
1098 public TestableGraphDBOperation() {
1099 super(EasyMock.createNiceMock(GraphDBConnection.class));
1100
1101 switches = new ArrayList<TestSwitchObject>();
1102 ports = new ArrayList<TestPortObject>();
1103 devices = new ArrayList<TestDeviceObject>();
1104 paths = new ArrayList<TestFlowPath>();
1105 entries = new ArrayList<TestFlowEntry>();
1106
1107 switchesToAdd = new ArrayList<TestSwitchObject>();
1108 portsToAdd = new ArrayList<TestPortObject>();
1109 devicesToAdd = new ArrayList<TestDeviceObject>();
1110 pathsToAdd = new ArrayList<TestFlowPath>();
1111 entriesToAdd = new ArrayList<TestFlowEntry>();
1112
1113 switchesToRemove = new ArrayList<TestSwitchObject>();
1114 portsToRemove = new ArrayList<TestPortObject>();
1115 devicesToRemove = new ArrayList<TestDeviceObject>();
1116 pathsToRemove = new ArrayList<TestFlowPath>();
1117 entriesToRemove = new ArrayList<TestFlowEntry>();
1118
1119 clearUncommitedData();
1120 }
1121
1122 private void clearUncommitedData() {
1123 for(TestFlowEntry flow : entries) {
1124 flow.clearUncommitedData();
1125 }
1126 for(TestFlowEntry flow : entriesToAdd) {
1127 flow.clearUncommitedData();
1128 }
1129
1130 for(TestDeviceObject dev : devices) {
1131 dev.clearUncommitedData();
1132 }
1133 for(TestDeviceObject dev : devicesToAdd) {
1134 dev.clearUncommitedData();
1135 }
1136
1137 for(TestSwitchObject sw : switches) {
1138 sw.clearUncommitedData();
1139 }
1140 for(TestSwitchObject sw : switchesToAdd) {
1141 sw.clearUncommitedData();
1142 }
1143
1144 for(TestPortObject port : ports) {
1145 port.clearUncommitedData();
1146 }
1147 for(TestPortObject port : portsToAdd) {
1148 port.clearUncommitedData();
1149 }
1150
1151 entriesToAdd.clear();
1152 entriesToRemove.clear();
1153 devicesToAdd.clear();
1154 devicesToRemove.clear();
1155 switchesToAdd.clear();
1156 switchesToRemove.clear();
1157 portsToAdd.clear();
1158 portsToRemove.clear();
1159 }
1160
1161
1162 // this.*ForTest() methods below are supposed to be used for creation of test topology.
1163 /**
1164 * Create new empty TestSwitchObject.
1165 * @return New TestSwitchObject
1166 */
1167 public TestSwitchObject createNewSwitchForTest() {
1168 TestSwitchObject sw = new TestSwitchObject();
1169 switches.add(sw);
1170 return sw;
1171 }
1172
1173 /**
1174 * Create new TestSwitchObject with specific DPID.
1175 * @param dpid DPID to be set
1176 * @return New TestSwitchObject
1177 */
1178 public TestSwitchObject createNewSwitchForTest(String dpid) {
1179 for(TestSwitchObject sw_loop : switches) {
1180 if(sw_loop.getDPID().equals(dpid)) {
1181 // Already created
1182 log.error("switch already exists : " + dpid);
1183 return sw_loop;
1184 }
1185 }
1186
1187 TestSwitchObject sw = new TestSwitchObject();
1188
1189 sw.setDpidForTest(dpid);
1190 switches.add(sw);
1191
1192 return sw;
1193 }
1194
1195 /**
1196 * Create new empty TestPortObject.
1197 * @return New TestPortObject
1198 */
1199 public TestPortObject createNewPortForTest() {
1200 TestPortObject port = new TestPortObject();
1201 ports.add(port);
1202 return port;
1203 }
1204
1205 /**
1206 * Create new TestPortObject with specific DPID and port number.
1207 * @param dpid DPID to be set
1208 * @param number Port number to be set
1209 * @return New TestPortObject
1210 */
1211 public TestPortObject createNewPortForTest(String dpid, Short number) {
1212 TestSwitchObject sw = null;
1213
1214 for(TestSwitchObject sw_loop : switches) {
1215 if(sw_loop.getDPID().equals(dpid)) {
1216 sw = sw_loop;
1217 }
1218 }
1219
1220 if(sw != null) {
1221 TestPortObject port = new TestPortObject();
1222 port.setNumberForTest(number);
1223 port.setSwitchForTest(sw);
1224 sw.addPortForTest(port);
1225
1226 ports.add(port);
1227
1228 return port;
1229 } else {
1230 return null;
1231 }
1232 }
1233
1234 /**
1235 * Link a TestPortObject to other TestPortObject.
1236 * @param src TestPortObjecgt of source port.
1237 * @param dst TestPortObjecgt of destination port.
1238 */
1239 public void setLinkBetweenPortsForTest(TestPortObject src, TestPortObject dst) {
1240 src.addLinkedPortForTest(dst);
1241 }
1242
1243 /**
1244 * Create new empty TestDeviceObject.
1245 * @return New TestDeviceObject
1246 */
1247 public TestDeviceObject createNewDeviceForTest() {
1248 TestDeviceObject dev = new TestDeviceObject();
1249
1250 return dev;
1251 }
1252
1253 /**
1254 * Create new empty TestFlowPathObject.
1255 * @return New TestFlowPathObject
1256 */
1257 public TestFlowPath createNewFlowPathForTest() {
1258 TestFlowPath path = new TestFlowPath();
1259 paths.add(path);
1260 return path;
1261 }
1262
1263 /**
1264 * Create new empty TestFlowEntryObject.
1265 * @return New TestFlowEntryObject
1266 */
1267 public TestFlowEntry createNewFlowEntryForTest() {
1268 TestFlowEntry entry = new TestFlowEntry();
1269 entries.add(entry);
1270 return entry;
1271 }
1272
1273
1274 public boolean hasLinkBetween(String srcSw_str, Short srcNumber, String dstSw_str, Short dstNumber) {
1275 IPortObject srcPort = null, dstPort = null;
1276 long srcSw = HexString.toLong(srcSw_str);
1277 long dstSw = HexString.toLong(dstSw_str);
1278
1279 for(TestSwitchObject sw : switches) {
1280 long swLong = HexString.toLong(sw.getDPID());
1281 if(swLong == srcSw) {
1282 for(IPortObject port : sw.getPorts()) {
1283 if(port.getNumber().equals(srcNumber)) {
1284 srcPort = port;
1285 }
1286 }
1287 } else if(swLong == dstSw) {
1288 for(IPortObject port : sw.getPorts()) {
1289 if(port.getNumber().equals(dstNumber)) {
1290 dstPort = port;
1291 }
1292 }
1293 }
1294 }
1295
1296 if(srcPort != null && dstPort != null) {
1297 for(IPortObject port : srcPort.getLinkedPorts()) {
1298 if(port.equals(dstPort)) {
1299 return true;
1300 }
1301 }
1302 }
1303
1304 return false;
1305 }
1306
1307 // Overriding methods below are to mock GraphDBOperation class.
1308 @Override
1309 public ISwitchObject newSwitch(String dpid) {
1310 TestSwitchObject sw = new TestSwitchObject();
1311 sw.setDPID(dpid);
1312 switchesToAdd.add(sw);
1313
1314 return sw;
1315 }
1316
1317 @Override
1318 public ISwitchObject searchSwitch(String dpid_str) {
1319 Long dpid = HexString.toLong(dpid_str);
1320
1321 for(ISwitchObject sw : switches) {
1322 if(HexString.toLong(sw.getDPID()) == dpid) {
1323 return sw;
1324 }
1325 }
1326 return null;
1327 }
1328
1329 @Override
1330 public ISwitchObject searchActiveSwitch(String dpid_str) {
1331 Long dpid = HexString.toLong(dpid_str);
1332
1333 for(ISwitchObject sw : switches) {
1334 if(HexString.toLong(sw.getDPID()) == dpid && sw.getState().equals("ACTIVE")) {
1335 return sw;
1336 }
1337 }
1338 return null;
1339 }
1340
1341 @Override
1342 public Iterable<ISwitchObject> getActiveSwitches() {
1343 List<ISwitchObject> list = new ArrayList<ISwitchObject>();
1344
1345 for(ISwitchObject sw : switches) {
1346 if(sw.getState() != null && sw.getState().equals("ACTIVE")) {
1347 list.add(sw);
1348 }
1349 }
1350 return list.isEmpty() ? null : list;
1351 }
1352
1353 @Override
1354 public Iterable<ISwitchObject> getAllSwitches() {
1355 List<ISwitchObject> list = new ArrayList<ISwitchObject>();
1356
1357 for(ISwitchObject sw : switches) {
1358 list.add(sw);
1359 }
1360
1361 return list.isEmpty() ? null : list;
1362 }
1363
1364 @Override
1365 public Iterable<ISwitchObject> getInactiveSwitches() {
1366 List<ISwitchObject> list = new ArrayList<ISwitchObject>();
1367
1368 for(ISwitchObject sw : switches) {
1369 if(! sw.getState().equals("ACTIVE")) {
1370 list.add(sw);
1371 }
1372 }
1373 return list.isEmpty() ? null : list;
1374 }
1375
1376 @Override
1377 public Iterable<IFlowEntry> getAllSwitchNotUpdatedFlowEntries() {
1378 List<IFlowEntry> list = new ArrayList<IFlowEntry>();
1379
1380 for(TestFlowEntry entry : entries) {
1381 if(entry.getSwitchState().equals("FE_SWITCH_NOT_UPDATED")) {
1382 list.add(entry);
1383 }
1384 }
1385 return list;
1386 }
1387
1388 @Override
1389 public void removeSwitch(ISwitchObject sw) {
1390 if(switches.contains(sw)) {
1391 switchesToRemove.add((TestSwitchObject)sw);
1392 }
1393 }
1394
1395 @Override
1396 public IPortObject newPort(Short portNumber) {
1397 TestPortObject port = new TestPortObject();
1398 port.setNumber(portNumber);
1399
1400 return port;
1401 }
1402
1403 public IPortObject newPort(Long dpid, Short portNumber) {
1404 TestPortObject port = null;
1405 TestSwitchObject sw = (TestSwitchObject)searchSwitch(HexString.toHexString(dpid));
1406
1407 if(sw != null) {
1408 port = (TestPortObject)newPort(portNumber);
1409 portsToAdd.add(port);
1410 sw.addPort(port);
1411 }
1412
1413 return port;
1414 }
1415
1416 @Override
Pankaj Berdebbd38612013-06-22 05:59:12 -07001417 public IPortObject searchPort(String dpid_str, Short number) {
Naoki Shiotac88d9562013-06-18 15:21:56 -07001418 long dpid = HexString.toLong(dpid_str);
1419
1420 for(TestSwitchObject sw : switches) {
1421 if(HexString.toLong(sw.getDPID()) == dpid) {
1422 for(IPortObject port : sw.getPorts()) {
1423 if(port.getNumber().equals(number)) {
1424 return port;
1425 }
1426 }
1427 }
1428 }
1429 return null;
1430 }
1431
1432 @Override
1433 public void removePort(IPortObject port) {
1434 for(TestSwitchObject sw : switches) {
1435 for(IPortObject pt : sw.getPorts()) {
1436 if(pt.equals(port)) {
1437 sw.removePort(port);
1438 }
1439 }
1440 }
1441 portsToRemove.add((TestPortObject)port);
1442 }
1443
1444 @Override
1445 public IDeviceObject newDevice() {
1446 TestDeviceObject dev = new TestDeviceObject();
1447 devicesToAdd.add(dev);
1448
1449 return dev;
1450 }
1451
1452 @Override
1453 public IDeviceObject searchDevice(String macAddr) {
1454 for(IDeviceObject dev : devices) {
1455 if(dev.getMACAddress().equals(macAddr)) {
1456 return dev;
1457 }
1458 }
1459 return null;
1460 }
1461
1462 @Override
1463 public Iterable<IDeviceObject> getDevices() {
1464 List<IDeviceObject> list = new ArrayList<IDeviceObject>();
1465
1466 for(TestDeviceObject dev : devices) {
1467 list.add(dev);
1468 }
1469
1470 return list;
1471 }
1472
1473 @Override
1474 public void removeDevice(IDeviceObject dev) {
1475 if(devices.contains((TestDeviceObject)dev)) {
1476 devicesToRemove.add((TestDeviceObject)dev);
1477 }
1478 }
1479
1480 @Override
1481 public IFlowPath newFlowPath() {
1482 TestFlowPath path = new TestFlowPath();
1483 pathsToAdd.add(path);
1484
1485 return path;
1486 }
1487
1488 @Override
1489 public IFlowPath searchFlowPath(FlowId flowId) {
1490 for(IFlowPath path : paths) {
1491 if(path.getFlowId().equals(flowId)) {
1492 return path;
1493 }
1494 }
1495 return null;
1496 }
1497
1498 @Override
1499 public IFlowPath getFlowPathByFlowEntry(IFlowEntry flowEntry) {
1500 for(IFlowPath path : paths) {
1501 for(IFlowEntry entry : path.getFlowEntries()) {
1502 if(entry.equals(flowEntry)) {
1503 return path;
1504 }
1505 }
1506
1507 }
1508 return null;
1509 }
1510
1511 @Override
1512 public Iterable<IFlowPath> getAllFlowPaths() {
1513 List<IFlowPath> list = new ArrayList<IFlowPath>();
1514
1515 for(IFlowPath path : paths) {
1516 list.add(path);
1517 }
1518
1519 return list;
1520 }
1521
1522 @Override
1523 public void removeFlowPath(IFlowPath flowPath) {
1524 if(paths.contains((TestFlowPath)flowPath)) {
1525 pathsToRemove.add((TestFlowPath)flowPath);
1526 }
1527 }
1528
1529 @Override
1530 public IFlowEntry newFlowEntry() {
1531 TestFlowEntry entry = new TestFlowEntry();
1532 entriesToAdd.add(entry);
1533 return entry;
1534 }
1535
1536 @Override
1537 public IFlowEntry searchFlowEntry(FlowEntryId flowEntryId) {
1538 for(TestFlowEntry entry : entries) {
1539 // TODO check if this matching works
1540 if(entry.getFlowEntryId().equals(flowEntryId)) {
1541 return entry;
1542 }
1543 }
1544 return null;
1545 }
1546
1547 @Override
1548 public Iterable<IFlowEntry> getAllFlowEntries() {
1549 List<IFlowEntry> list = new ArrayList<IFlowEntry>();
1550
1551 for(TestFlowEntry entry : entries) {
1552 list.add(entry);
1553 }
1554
1555 return list;
1556 }
1557
1558 @Override
1559 public void removeFlowEntry(IFlowEntry flowEntry) {
1560 if(entries.contains((TestFlowEntry)flowEntry)) {
1561 entriesToRemove.add((TestFlowEntry)flowEntry);
1562 }
1563 }
1564
1565 @Override
1566 public IDBConnection getDBConnection() {
1567 return super.getDBConnection();
1568 }
1569
1570 @Override
1571 public void commit() {
1572 for(TestSwitchObject sw : switchesToAdd) {
1573 switches.add(sw);
1574 }
1575 for(TestSwitchObject sw : switchesToRemove) {
1576 sw.commit();
1577 switches.remove(sw);
1578 }
1579 for(TestSwitchObject sw : switches) {
1580 sw.commit();
1581 }
1582
1583 for(TestPortObject port : portsToAdd) {
1584 ports.add(port);
1585 }
1586 for(TestPortObject port : portsToRemove) {
1587 port.commit();
1588 ports.remove(port);
1589 }
1590 for(TestPortObject port : ports) {
1591 port.commit();
1592 }
1593
1594 for(TestDeviceObject dev : devicesToAdd) {
1595 devices.add(dev);
1596 }
1597 for(TestDeviceObject dev : devicesToRemove) {
1598 dev.commit();
1599 devices.remove(dev);
1600 }
1601 for(TestDeviceObject dev : devices) {
1602 dev.commit();
1603 }
1604
1605 clearUncommitedData();
1606 }
1607
1608 @Override
1609 public void rollback() {
1610 clearUncommitedData();
1611 }
1612
1613 @Override
1614 public void close() {
1615 // TODO Auto-generated method stub
1616
1617 }
1618}