blob: dfe6ccf876d807c428713413c193b7900cbeb2a1 [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;
22import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IPortObject;
23import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.ISwitchObject;
24import net.onrc.onos.ofcontroller.util.FlowEntryId;
25import net.onrc.onos.ofcontroller.util.FlowId;
Naoki Shiotac88d9562013-06-18 15:21:56 -070026
27/**
28 * Mock class of GraphDBOperation which provides additional setter to construct a graph for test.
29 * This object simply caches parameters set up by override interfaces and reflect them when commit().
30 * *ForTest() methods are exempt from cache, parameters through those methods are reflected soon.
31 * @author Naoki Shiota
32 *
33 */
34public class TestableGraphDBOperation extends GraphDBOperation {
Yuta HIGUCHI6ac8d182013-10-22 15:24:56 -070035 protected final static Logger log = LoggerFactory.getLogger(TestableGraphDBOperation.class);
Naoki Shiotac88d9562013-06-18 15:21:56 -070036
37 protected List<TestSwitchObject> switches;
38 protected List<TestPortObject> ports;
39 protected List<TestDeviceObject> devices;
40 protected List<TestFlowPath> paths;
41 protected List<TestFlowEntry> entries;
42
43 protected List<TestSwitchObject> switchesToAdd;
44 protected List<TestPortObject> portsToAdd;
45 protected List<TestDeviceObject> devicesToAdd;
46 protected List<TestFlowPath> pathsToAdd;
47 protected List<TestFlowEntry> entriesToAdd;
48
49 protected List<TestSwitchObject> switchesToRemove;
50 protected List<TestPortObject> portsToRemove;
51 protected List<TestDeviceObject> devicesToRemove;
52 protected List<TestFlowPath> pathsToRemove;
53 protected List<TestFlowEntry> entriesToRemove;
54
55 // Testable implementations of INetMapTopologyObject interfaces
56
57 public static class TestSwitchObject implements ISwitchObject {
58 private String state,type,dpid;
59 private List<IPortObject> ports;
60 private List<IDeviceObject> devices;
61 private List<IFlowEntry> entries;
62
63 private String stateToUpdate, typeToUpdate, dpidToUpdate;
64 private List<IPortObject> portsToAdd;
65 private List<IPortObject> portsToRemove;
66
67 public TestSwitchObject() {
68 type = "switch";
69
70 ports = new ArrayList<IPortObject>();
71 portsToAdd = new ArrayList<IPortObject>();
72 portsToRemove = new ArrayList<IPortObject>();
73 devices = new ArrayList<IDeviceObject>();
74 entries = new ArrayList<IFlowEntry>();
75
76 clearUncommitedData();
77 }
78
79 public void commit() {
80 for(IPortObject port : portsToAdd) {
81 ports.add(port);
82 }
83 for(IPortObject port : portsToRemove) {
84 ports.remove(port);
85 }
86 if(stateToUpdate != null) { state = stateToUpdate; }
87 if(typeToUpdate != null) { type = typeToUpdate; }
88 if(dpidToUpdate != null) { dpid = dpidToUpdate; }
89
90 clearUncommitedData();
91 }
92
93 public void rollback() {
94 clearUncommitedData();
95 }
96
97 public void clearUncommitedData() {
98 portsToAdd.clear();
99 portsToRemove.clear();
100 stateToUpdate = typeToUpdate = dpidToUpdate = null;
101 }
102
103 public void setStateForTest(String state) { this.state = state; }
104 public void setTypeForTest(String type) { this.type = type; }
105 public void setDpidForTest(String dpid) { this.dpid = dpid; }
106 public void addPortForTest(TestPortObject port) { ports.add(port); }
107 public void addDeviceForTest(TestDeviceObject dev) { devices.add(dev); }
108 public void addEntryForTest(TestFlowEntry entry) { entries.add(entry); }
109
110 @Override
111 public String getState() { return state; }
112
113 @Override
114 public void setState(String state) { this.stateToUpdate = state; }
115
116 @Override
117 public String getType() { return type ; }
118
119 @Override
120 public void setType(String type) { this.typeToUpdate = type; }
121
122 // Not support for test
123 @Override
124 public Vertex asVertex() { return null; }
125
126 @Override
127 public String getDPID() { return dpid; }
128
129 @Override
130 public void setDPID(String dpid) { this.dpidToUpdate = dpid; }
131
132 @Override
133 public Iterable<IPortObject> getPorts() { return ports; }
134
135 @Override
136 public IPortObject getPort(@GremlinParam("port_num") short port_num) {
137 for(IPortObject port : ports) {
138 if(port.getNumber() == port_num) {
139 return port;
140 }
141 }
142 return null;
143 }
144
145 @Override
146 public void addPort(IPortObject port) { portsToAdd.add(port); }
147
148 @Override
149 public void removePort(IPortObject port) { portsToRemove.add(port); }
150
151 @Override
152 public Iterable<IDeviceObject> getDevices() { return devices; }
153
154 @Override
155 public Iterable<IFlowEntry> getFlowEntries() { return entries; }
156 }
157
158 public static class TestPortObject implements IPortObject {
159 private String state,type,desc;
160 private Short number;
161 private Integer port_state;
162 private ISwitchObject sw;
163
164 private List<IPortObject> linkedPorts;
165 private List<IDeviceObject> devices;
166 private List<IFlowEntry> inflows,outflows;
167
168 private String stateToUpdate,typeToUpdate,descToUpdate;
169 private Short numberToUpdate;
170 private Integer port_stateToUpdate;
171
172 private List<IPortObject> linkedPortsToAdd;
173 private List<IPortObject> linkedPortsToRemove;
174 private List<IDeviceObject> devicesToAdd;
175 private List<IDeviceObject> devicesToRemove;
176
177
178 public TestPortObject() {
179 type = "port";
180
181 linkedPorts = new ArrayList<IPortObject>();
182 linkedPortsToAdd = new ArrayList<IPortObject>();
183 linkedPortsToRemove = new ArrayList<IPortObject>();
184 devices = new ArrayList<IDeviceObject>();
185 devicesToAdd = new ArrayList<IDeviceObject>();
186 devicesToRemove = new ArrayList<IDeviceObject>();
187 inflows = new ArrayList<IFlowEntry>();
188 outflows = new ArrayList<IFlowEntry>();
189
190 clearUncommitedData();
191 }
192
193 public void commit() {
194 for(IPortObject port : linkedPortsToAdd) { linkedPorts.add(port); }
195 for(IPortObject port : linkedPortsToRemove) { linkedPorts.remove(port); }
196 for(IDeviceObject dev : devicesToAdd) { devices.add(dev); }
197 for(IDeviceObject dev : devicesToRemove) { devices.remove(dev); }
198
199 if(stateToUpdate != null) { state = stateToUpdate; }
200 if(typeToUpdate != null) { type = typeToUpdate; }
201 if(descToUpdate != null) { desc = descToUpdate; }
202 if(numberToUpdate != null) { number = numberToUpdate; }
203 if(port_stateToUpdate != null) { port_state = port_stateToUpdate; }
204
205 clearUncommitedData();
206 }
207
208 public void rollback() {
209 clearUncommitedData();
210 }
211
212 public void clearUncommitedData() {
213 linkedPortsToAdd.clear();
214 linkedPortsToRemove.clear();
215 devicesToAdd.clear();
216 devicesToRemove.clear();
217 stateToUpdate = typeToUpdate = descToUpdate = null;
218 port_stateToUpdate = null;
219 numberToUpdate = null;
220 }
221
222 // Setter methods for test
223 public void setStateForTest(String state) { this.state = state; }
224 public void setTypeForTest(String type) { this.type = type; }
225 public void setDescForTest(String desc) { this.desc = desc; }
226 public void setNumberForTest(Short number) { this.number = number; }
227 public void setPortStateForTest(Integer state) { this.port_state = state; }
228 public void setSwitchForTest(ISwitchObject sw) { this.sw = sw; }
229 public void addLinkedPortForTest(TestPortObject port) { this.linkedPorts.add(port); }
230 public void addInflowForTest(TestFlowEntry entry) { inflows.add(entry); }
231 public void addOutflowForTest(TestFlowEntry entry) { outflows.add(entry); }
232
233 // Override methods for mock IPortObject
234 @Override
235 public String getState() { return state; }
236
237 @Override
238 public void setState(String state) { this.stateToUpdate = state; }
239
240 @Override
241 public String getType() { return type; }
242
243 @Override
244 public void setType(String type) { this.typeToUpdate = type; }
245
246 // not support for test
247 @Override
248 public Vertex asVertex() {
249 return null;
250 }
251
252 @Override
253 public Short getNumber() { return number; }
254
255 @Override
256 public void setNumber(Short n) { this.numberToUpdate = n; }
257
258 @Override
259 public String getDesc() { return desc; }
260
261 @Override
262 public void setDesc(String s) { this.descToUpdate = s; }
263
264 @Override
265 public Integer getPortState() { return port_state; }
266
267 @Override
268 public void setPortState(Integer s) { this.port_stateToUpdate = s; }
269
270 @Override
271 public ISwitchObject getSwitch() { return sw; }
272
273 @Override
274 public Iterable<IDeviceObject> getDevices() { return devices; }
275
276 @Override
277 public void setDevice(IDeviceObject device) { devicesToAdd.add(device); }
278
279 @Override
280 public void removeDevice(IDeviceObject device) { devicesToRemove.add(device); }
281
282 @Override
283 public Iterable<IFlowEntry> getInFlowEntries() { return inflows; }
284
285 @Override
286 public Iterable<IFlowEntry> getOutFlowEntries() { return outflows; }
287
288 @Override
289 public Iterable<IPortObject> getLinkedPorts() { return linkedPorts; }
290
291 @Override
292 public void removeLink(IPortObject dest_port) { linkedPortsToRemove.add(dest_port); }
293
294 @Override
295 public void setLinkPort(IPortObject dest_port) { linkedPortsToAdd.add(dest_port); }
Pankaj Berdebbd38612013-06-22 05:59:12 -0700296
297 @Override
298 @JsonIgnore
299 @Property("port_id")
300 public void setPortId(String id) {
301 // TODO Auto-generated method stub
302
303 }
304
305 @Override
306 @JsonIgnore
307 @Property("port_id")
308 public String getPortId() {
309 // TODO Auto-generated method stub
310 return null;
311 }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700312 }
313
314 public static class TestDeviceObject implements IDeviceObject {
315 private String state,type,mac,ipaddr;
316 private List<IPortObject> ports;
317 private List<ISwitchObject> switches;
318
319 private String stateToUpdate,typeToUpdate,macToUpdate,ipaddrToUpdate;
320 private List<IPortObject> portsToAdd;
321 private List<IPortObject> portsToRemove;
322
323 public TestDeviceObject() {
324 type = "device";
325
326 ports = new ArrayList<IPortObject>();
327 portsToAdd = new ArrayList<IPortObject>();
328 portsToRemove = new ArrayList<IPortObject>();
329 switches = new ArrayList<ISwitchObject>();
330
331 clearUncommitedData();
332 }
333
334 public void commit() {
335 for(IPortObject port : portsToAdd) {
336 ports.add(port);
337 }
338 for(IPortObject port : portsToRemove) {
339 ports.remove(port);
340 }
341
342 if(stateToUpdate != null) { state = stateToUpdate; }
343 if(typeToUpdate != null) { type = typeToUpdate; }
344 if(macToUpdate != null) { mac = macToUpdate; }
345 if(ipaddrToUpdate != null) { ipaddr = ipaddrToUpdate; }
346
347 clearUncommitedData();
348 }
349
350 public void rollback() {
351 clearUncommitedData();
352 }
353
354 public void clearUncommitedData() {
355 ports.clear();
356 portsToAdd.clear();
357 portsToRemove.clear();
358
359 stateToUpdate = typeToUpdate = macToUpdate = ipaddrToUpdate = null;
360 }
361
362 // Setter methods for test
363 public void setStateForTest(String state) { this.state = state; }
364 public void setTypeForTest(String type) { this.type = type; }
365 public void setMacForTest(String mac) { this.mac = mac; }
366 public void setIpaddrForTest(String ipaddr) { this.ipaddr = ipaddr; }
367 public void addSwitchForTest(ISwitchObject sw) { switches.add(sw); }
368 public void addPortForTest(IPortObject port) { ports.add(port); }
369
370
371 // Override methods
372 @Override
373 public String getState() { return state; }
374
375 @Override
376 public void setState(String state) { stateToUpdate = state; }
377
378 @Override
379 public String getType() { return type; }
380
381 @Override
382 public void setType(String type) { typeToUpdate = type; }
383
384 @Override
385 public Vertex asVertex() {
386 // TODO Auto-generated method stub
387 return null;
388 }
389
390 @Override
391 public String getMACAddress() { return mac; }
392
393 @Override
394 public void setMACAddress(String macaddr) { macToUpdate = macaddr; }
395
396 @Override
397 public String getIPAddress() { return ipaddr; }
398
399 @Override
400 public void setIPAddress(String ipaddr) { ipaddrToUpdate = ipaddr; }
401
402 @Override
403 public Iterable<IPortObject> getAttachedPorts() {
404 return ports; }
405
406 @Override
407 public void setHostPort(IPortObject port) { portsToAdd.add(port); }
408
409 @Override
410 public void removeHostPort(IPortObject port) { portsToRemove.add(port); }
411
412 @Override
413 public Iterable<ISwitchObject> getSwitch() { return switches; }
414 }
415
416 public static class TestFlowPath implements IFlowPath {
417 private String state,type,flowId,installerId,srcSw,dstSw;
Pavlin Radoslavovd28cf7c2013-10-26 11:27:43 -0700418 private String flowPathType;
Pavlin Radoslavov7d4a40e2013-10-27 23:39:40 -0700419 private String flowPathUserState;
Pavlin Radoslavov204b2862013-07-12 14:15:36 -0700420 private Long flowPathFlags;
Pavlin Radoslavov7d4a40e2013-10-27 23:39:40 -0700421 private String dataPathSummary;
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700422 private Short srcPort,dstPort;
423 private String matchSrcMac,matchDstMac;
424 private Short matchEthernetFrameType;
425 private Short matchVlanId;
426 private Byte matchVlanPriority;
427 private String matchSrcIpaddr,matchDstIpaddr;
428 private Byte matchIpProto, matchIpToS;
429 private Short matchSrcTcpUdpPort, matchDstTcpUdpPort;
Pavlin Radoslavov1bc2c472013-07-17 18:11:37 -0700430 private String actions;
Naoki Shiotac88d9562013-06-18 15:21:56 -0700431
432 private List<IFlowEntry> entries;
433 private List<ISwitchObject> switches;
434
435 private String stateToUpdate,typeToUpdate,flowIdToUpdate,installerIdToUpdate,srcSwToUpdate,dstSwToUpdate;
Pavlin Radoslavovd28cf7c2013-10-26 11:27:43 -0700436 private String flowPathTypeToUpdate;
Pavlin Radoslavov7d4a40e2013-10-27 23:39:40 -0700437 private String flowPathUserStateToUpdate;
Pavlin Radoslavov204b2862013-07-12 14:15:36 -0700438 private Long flowPathFlagsToUpdate;
Pavlin Radoslavov7d4a40e2013-10-27 23:39:40 -0700439 private String dataPathSummaryToUpdate;
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700440 private Short srcPortToUpdate,dstPortToUpdate;
441 private String matchSrcMacToUpdate,matchDstMacToUpdate;
442 private Short matchEthernetFrameTypeToUpdate;
443 private Short matchVlanIdToUpdate;
444 private Byte matchVlanPriorityToUpdate;
445 private String matchSrcIpaddrToUpdate,matchDstIpaddrToUpdate;
446 private Byte matchIpProtoToUpdate, matchIpToSToUpdate;
447 private Short matchSrcTcpUdpPortToUpdate, matchDstTcpUdpPortToUpdate;
Pavlin Radoslavov1bc2c472013-07-17 18:11:37 -0700448 private String actionsToUpdate;
Naoki Shiotac88d9562013-06-18 15:21:56 -0700449
450 private List<IFlowEntry> flowsToAdd;
451 private List<IFlowEntry> flowsToRemove;
452
453 public TestFlowPath() {
454 type = "flow";
455
456 entries = new ArrayList<IFlowEntry>();
457 flowsToAdd = new ArrayList<IFlowEntry>();
458 flowsToRemove = new ArrayList<IFlowEntry>();
459
460 switches = new ArrayList<ISwitchObject>();
461
462 clear();
463 }
464
465 public void commit() {
466 for(IFlowEntry flow : flowsToAdd) {
467 entries.add(flow);
468 }
469 for(IFlowEntry flow : flowsToRemove) {
470 entries.remove(flow);
471 }
472 if(stateToUpdate != null) { state = stateToUpdate; }
473 if(typeToUpdate != null) { type = typeToUpdate; }
474 if(flowIdToUpdate != null) { flowId = flowIdToUpdate; }
475 if(installerIdToUpdate != null) { installerId = installerIdToUpdate; }
Pavlin Radoslavovd28cf7c2013-10-26 11:27:43 -0700476 if(flowPathTypeToUpdate != null) { flowPathType = flowPathTypeToUpdate; }
Pavlin Radoslavov7d4a40e2013-10-27 23:39:40 -0700477 if(flowPathUserStateToUpdate != null) { flowPathUserState = flowPathUserStateToUpdate; }
Pavlin Radoslavov204b2862013-07-12 14:15:36 -0700478 if(flowPathFlagsToUpdate != null) { flowPathFlags = flowPathFlagsToUpdate; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700479 if(srcSwToUpdate != null) { srcSw = srcSwToUpdate; }
480 if(dstSwToUpdate != null) { dstSw = dstSwToUpdate; }
481 if(dataPathSummaryToUpdate != null) { dataPathSummary = dataPathSummaryToUpdate; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700482 if(srcPortToUpdate != null) { srcPort = srcPortToUpdate; }
483 if(dstPortToUpdate != null) { dstPort = dstPortToUpdate; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700484 if(matchSrcMacToUpdate != null) { matchSrcMac = matchSrcMacToUpdate; }
485 if(matchDstMacToUpdate != null) { matchDstMac = matchDstMacToUpdate; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700486 if(matchEthernetFrameTypeToUpdate != null) { matchEthernetFrameType = matchEthernetFrameTypeToUpdate; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700487 if(matchVlanIdToUpdate != null) { matchVlanId = matchVlanIdToUpdate; }
488 if(matchVlanPriorityToUpdate != null) { matchVlanPriority = matchVlanPriorityToUpdate; }
489 if(matchSrcIpaddrToUpdate != null) { matchSrcIpaddr = matchSrcIpaddrToUpdate; }
490 if(matchDstIpaddrToUpdate != null) { matchDstIpaddr = matchDstIpaddrToUpdate; }
491 if(matchIpProtoToUpdate != null) { matchIpProto = matchIpProtoToUpdate; }
492 if(matchIpToSToUpdate != null) { matchIpToS = matchIpToSToUpdate; }
493 if(matchSrcTcpUdpPortToUpdate != null) { matchSrcTcpUdpPort = matchSrcTcpUdpPortToUpdate; }
494 if(matchDstTcpUdpPortToUpdate != null) { matchDstTcpUdpPort = matchDstTcpUdpPortToUpdate; }
Pavlin Radoslavov1bc2c472013-07-17 18:11:37 -0700495 if(actionsToUpdate != null) { actions = actionsToUpdate; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700496 }
497
498 public void rollback() {
499 clear();
500 }
501
502 public void clear() {
503 flowsToAdd.clear();
504 flowsToRemove.clear();
505
506 stateToUpdate = typeToUpdate = flowIdToUpdate = installerIdToUpdate = null;
Pavlin Radoslavovd28cf7c2013-10-26 11:27:43 -0700507 flowPathTypeToUpdate = null;
Pavlin Radoslavov7d4a40e2013-10-27 23:39:40 -0700508 flowPathUserStateToUpdate = null;
Pavlin Radoslavov204b2862013-07-12 14:15:36 -0700509 flowPathFlagsToUpdate = null;
Pavlin Radoslavov7d4a40e2013-10-27 23:39:40 -0700510 srcSwToUpdate = dstSwToUpdate = dataPathSummaryToUpdate = null;
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700511 srcPortToUpdate = dstPortToUpdate = null;
512 matchSrcMacToUpdate = matchDstMacToUpdate = null;
513 matchEthernetFrameTypeToUpdate = null;
514 matchVlanIdToUpdate = null;
515 matchVlanPriorityToUpdate = null;
516 matchSrcIpaddrToUpdate = matchDstIpaddrToUpdate = null;
517 matchIpProtoToUpdate = matchIpToSToUpdate = null;
518 matchSrcTcpUdpPortToUpdate = matchDstTcpUdpPortToUpdate = null;
Pavlin Radoslavov1bc2c472013-07-17 18:11:37 -0700519 actionsToUpdate = null;
Naoki Shiotac88d9562013-06-18 15:21:56 -0700520 }
521
522 // Setter methods for test
523 public void setStateForTest(String state) { this.state = state; }
524 public void setTypeForTest(String type) { this.type = type; }
525 public void setFlowIdForTest(String flowId) { this.flowId = flowId; }
526 public void setInstallerIdForTest(String installerId) { this.installerId = installerId; }
Pavlin Radoslavovd28cf7c2013-10-26 11:27:43 -0700527 public void setFlowPathTypeForTest(String flowPathType) { this.flowPathType = flowPathType; }
Pavlin Radoslavov7d4a40e2013-10-27 23:39:40 -0700528 public void setFlowPathUserStateForTest(String flowPathUserState) { this.flowPathUserState = flowPathUserState; }
Pavlin Radoslavov204b2862013-07-12 14:15:36 -0700529 public void setFlowPathFlagsForTest(Long flowPathFlags) { this.flowPathFlags = flowPathFlags; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700530 public void setSrcSwForTest(String srcSw) { this.srcSw = srcSw; }
531 public void setDstSwForTest(String dstSw) { this.dstSw = dstSw; }
532 public void setDataPathSummaryForTest(String dataPathSummary) { this.dataPathSummary = dataPathSummary; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700533 public void setSrcPortForTest(Short srcPort) { this.srcPort = srcPort; }
534 public void setDstPortForTest(Short dstPort) { this.dstPort = dstPort; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700535 public void setMatchSrcMacForTest(String matchSrcMac) { this.matchSrcMac = matchSrcMac; }
536 public void setMatchDstMacForTest(String matchDstMac) { this.matchDstMac = matchDstMac; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700537 public void setMatchEthernetFrameTypeForTest(Short matchEthernetFrameType) { this.matchEthernetFrameType = matchEthernetFrameType; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700538 public void setMatchVlanIdForTest(Short matchVlanId) { this.matchVlanId = matchVlanId; }
539 public void setMatchVlanPriorityForTest(Byte matchVlanPriority) { this.matchVlanPriority = matchVlanPriority; }
540 public void setMatchSrcIpaddrForTest(String matchSrcIpaddr) { this.matchSrcIpaddr = matchSrcIpaddr; }
541 public void setMatchDstIpaddrForTest(String matchDstIpaddr) { this.matchDstIpaddr = matchDstIpaddr; }
542 public void setMatchIpProtoForTest(Byte matchIpProto) { this.matchIpProto = matchIpProto; }
543 public void setMatchIpToSForTest(Byte matchIpToS) { this.matchIpToS = matchIpToS; }
544 public void setMatchSrcTcpUdpPortForTest(Short matchSrcTcpUdpPort) { this.matchSrcTcpUdpPort = matchSrcTcpUdpPort; }
545 public void setMatchDstTcpUdpPortForTest(Short matchDstTcpUdpPort) { this.matchDstTcpUdpPort = matchDstTcpUdpPort; }
Pavlin Radoslavov1bc2c472013-07-17 18:11:37 -0700546 public void setActionsForTest(String actions) { this.actions = actions; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700547 public void addFlowEntryForTest(IFlowEntry entry) { entries.add(entry); }
548 public void addSwitchForTest(ISwitchObject sw) { switches.add(sw); }
549
550 @Override
551 public String getState() { return state; }
552
553 @Override
554 public void setState(String state) { stateToUpdate = state; }
555
556 @Override
557 public String getType() { return type; }
558
559 @Override
560 public void setType(String type) { typeToUpdate = type; }
561
562 @Override
563 public Vertex asVertex() {
564 // TODO Auto-generated method stub
565 return null;
566 }
567
568 @Override
569 public String getFlowId() { return flowId; }
570
571 @Override
572 public void setFlowId(String flowId) { flowIdToUpdate = flowId; }
573
574 @Override
575 public String getInstallerId() { return installerId; }
576
577 @Override
578 public void setInstallerId(String installerId) { installerIdToUpdate = installerId; }
579
580 @Override
Pavlin Radoslavovd28cf7c2013-10-26 11:27:43 -0700581 public String getFlowPathType() { return flowPathType; }
582
583 @Override
584 public void setFlowPathType(String flowPathType) { flowPathTypeToUpdate = flowPathType; }
585
586 @Override
Pavlin Radoslavov7d4a40e2013-10-27 23:39:40 -0700587 public String getFlowPathUserState() { return flowPathUserState; }
588
589 @Override
590 public void setFlowPathUserState(String flowPathUserState) { flowPathUserStateToUpdate = flowPathUserState; }
591
592 @Override
Pavlin Radoslavov204b2862013-07-12 14:15:36 -0700593 public Long getFlowPathFlags() { return flowPathFlags; }
594
595 @Override
596 public void setFlowPathFlags(Long flowPathFlags) { flowPathFlagsToUpdate = flowPathFlags; }
597
598 @Override
Naoki Shiotac88d9562013-06-18 15:21:56 -0700599 public String getSrcSwitch() { return srcSw; }
600
601 @Override
602 public void setSrcSwitch(String srcSwitch) { srcSwToUpdate = srcSwitch; }
603
604 @Override
605 public Short getSrcPort() { return srcPort; }
606
607 @Override
608 public void setSrcPort(Short srcPort) { srcPortToUpdate = srcPort; }
609
610 @Override
611 public String getDstSwitch() { return dstSw; }
612
613 @Override
614 public void setDstSwitch(String dstSwitch) { dstSwToUpdate = dstSwitch; }
615
616 @Override
617 public Short getDstPort() { return dstPort; }
618
619 @Override
620 public void setDstPort(Short dstPort) { dstPortToUpdate = dstPort; }
621
622 @Override
623 public String getDataPathSummary() { return dataPathSummary; }
624
625 @Override
626 public void setDataPathSummary(String dataPathSummary) { dataPathSummaryToUpdate = dataPathSummary; }
627
628 @Override
629 public Iterable<IFlowEntry> getFlowEntries() { return entries; }
630
631 @Override
632 public void addFlowEntry(IFlowEntry flowEntry) {
633 if(! entries.contains(flowEntry)) {
634 flowsToAdd.add(flowEntry);
635 }
636 }
637
638 @Override
639 public void removeFlowEntry(IFlowEntry flowEntry) {
640 if(entries.contains(flowEntry)) {
641 flowsToAdd.add(flowEntry);
642 }
643 }
644
645 @Override
Naoki Shiotac88d9562013-06-18 15:21:56 -0700646 public String getMatchSrcMac() { return matchSrcMac; }
647
648 @Override
649 public void setMatchSrcMac(String matchSrcMac) { matchSrcMacToUpdate = matchSrcMac; }
650
651 @Override
652 public String getMatchDstMac() { return matchDstMac; }
653
654 @Override
655 public void setMatchDstMac(String matchDstMac) { matchDstMacToUpdate = matchDstMac; }
656
657 @Override
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700658 public Short getMatchEthernetFrameType() { return matchEthernetFrameType; }
659
660 @Override
661 public void setMatchEthernetFrameType(Short matchEthernetFrameType) {
662 matchEthernetFrameTypeToUpdate = matchEthernetFrameType; }
663
664 @Override
665 public Short getMatchVlanId() { return matchVlanId; }
666
667 @Override
668 public void setMatchVlanId(Short matchVlanId) {
669 matchVlanIdToUpdate = matchVlanId; }
670
671 @Override
672 public Byte getMatchVlanPriority() { return matchVlanPriority; }
673
674 @Override
675 public void setMatchVlanPriority(Byte matchVlanPriority) {
676 matchVlanPriorityToUpdate = matchVlanPriority; }
677
678 @Override
Naoki Shiotac88d9562013-06-18 15:21:56 -0700679 public String getMatchSrcIPv4Net() { return matchSrcIpaddr; }
680
681 @Override
682 public void setMatchSrcIPv4Net(String matchSrcIPv4Net) {
683 matchSrcIpaddrToUpdate = matchSrcIPv4Net; }
684
685 @Override
686 public String getMatchDstIPv4Net() { return matchDstIpaddr; }
687
688 @Override
689 public void setMatchDstIPv4Net(String matchDstIPv4Net) {
690 matchDstIpaddrToUpdate = matchDstIPv4Net; }
691
692 @Override
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700693 public Byte getMatchIpProto() { return matchIpProto; }
694
695 @Override
696 public void setMatchIpProto(Byte matchIpProto) {
697 matchIpProtoToUpdate = matchIpProto; }
698
699 @Override
700 public Byte getMatchIpToS() { return matchIpToS; }
701
702 @Override
703 public void setMatchIpToS(Byte matchIpToS) {
704 matchIpToSToUpdate = matchIpToS; }
705
706 @Override
707 public Short getMatchSrcTcpUdpPort() { return matchSrcTcpUdpPort; }
708
709 @Override
710 public void setMatchSrcTcpUdpPort(Short matchSrcTcpUdpPort) {
711 matchSrcTcpUdpPortToUpdate = matchSrcTcpUdpPort; }
712
713 @Override
714 public Short getMatchDstTcpUdpPort() { return matchDstTcpUdpPort; }
715
716 @Override
717 public void setMatchDstTcpUdpPort(Short matchDstTcpUdpPort) {
718 matchDstTcpUdpPortToUpdate = matchDstTcpUdpPort; }
719
720 @Override
Pavlin Radoslavov1bc2c472013-07-17 18:11:37 -0700721 public String getActions() { return actions; }
722
723 @Override
724 public void setActions(String actions) {
725 actionsToUpdate = actions; }
726
727 @Override
Naoki Shiotac88d9562013-06-18 15:21:56 -0700728 public Iterable<ISwitchObject> getSwitches() { return switches; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700729 }
730
731 public static class TestFlowEntry implements IFlowEntry {
732 private String state,type,entryId,dpid,userState,switchState,errorStateType,errorStateCode;
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700733 private Short matchInPort;
734 private String matchSrcMac,matchDstMac;
735 private Short matchEtherFrameType;
736 private Short matchVlanId;
737 private Byte matchVlanPriority;
738 private String matchSrcIpaddr,matchDstIpaddr;
739 private Byte matchIpProto, matchIpToS;
740 private Short matchSrcTcpUdpPort, matchDstTcpUdpPort;
Pavlin Radoslavovc1bafd12013-07-12 17:00:35 -0700741 private Short actionOutputPort;
Pavlin Radoslavov1bc2c472013-07-17 18:11:37 -0700742 private String actions;
Naoki Shiotac88d9562013-06-18 15:21:56 -0700743
744 private IFlowPath flowPath;
745 private ISwitchObject sw;
746 private IPortObject inport,outport;
747
748 private String stateToUpdate,typeToUpdate,entryIdToUpdate,dpidToUpdate,
749 userStateToUpdate,switchStateToUpdate,errorStateTypeToUpdate,errorStateCodeToUpdate;
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700750 private Short matchInPortToUpdate;
751 private String matchSrcMacToUpdate,matchDstMacToUpdate;
752 private Short matchEtherFrameTypeToUpdate;
753 private Short matchVlanIdToUpdate;
754 private Byte matchVlanPriorityToUpdate;
755 private String matchSrcIpaddrToUpdate,matchDstIpaddrToUpdate;
756 private Byte matchIpProtoToUpdate, matchIpToSToUpdate;
757 private Short matchSrcTcpUdpPortToUpdate, matchDstTcpUdpPortToUpdate;
Pavlin Radoslavovc1bafd12013-07-12 17:00:35 -0700758 private Short actionOutputPortToUpdate;
Pavlin Radoslavov1bc2c472013-07-17 18:11:37 -0700759 private String actionsToUpdate;
Naoki Shiotac88d9562013-06-18 15:21:56 -0700760
761 private IFlowPath flowPathToUpdate;
762 private ISwitchObject swToUpdate;
763 private IPortObject inportToUpdate,outportToUpdate;
764
765 public TestFlowEntry() {
766 type = "flow_entry";
767
768 clearUncommitedData();
769 }
770
771 public void commit() {
772 if(stateToUpdate != null) { state = stateToUpdate; }
773 if(typeToUpdate != null) { type = typeToUpdate; }
774 if(entryIdToUpdate != null) { entryId = entryIdToUpdate; }
775 if(dpidToUpdate != null) { dpid = dpidToUpdate; }
776 if(userStateToUpdate != null) { userState = userStateToUpdate; }
777 if(switchStateToUpdate != null) { switchState = switchStateToUpdate; }
778 if(errorStateTypeToUpdate != null) { errorStateType = errorStateTypeToUpdate; }
779 if(errorStateCodeToUpdate != null) { errorStateCode = errorStateCodeToUpdate; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700780 if(matchInPortToUpdate != null) { matchInPort = matchInPortToUpdate; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700781 if(matchSrcMacToUpdate != null) { matchSrcMac = matchSrcMacToUpdate; }
782 if(matchDstMacToUpdate != null) { matchDstMac = matchDstMacToUpdate; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700783 if(matchEtherFrameTypeToUpdate != null) { matchEtherFrameType = matchEtherFrameTypeToUpdate; }
784 if(matchVlanIdToUpdate != null) { matchVlanId = matchVlanIdToUpdate; }
785 if(matchVlanPriorityToUpdate != null) { matchVlanPriority = matchVlanPriorityToUpdate; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700786 if(matchSrcIpaddrToUpdate != null) { matchSrcIpaddr = matchSrcIpaddrToUpdate; }
787 if(matchDstIpaddrToUpdate != null) { matchDstIpaddr = matchDstIpaddrToUpdate; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700788 if(matchIpProtoToUpdate != null) { matchIpProto = matchIpProtoToUpdate; }
789 if(matchIpToSToUpdate != null) { matchIpToS = matchIpToSToUpdate; }
790 if(matchSrcTcpUdpPortToUpdate != null) { matchSrcTcpUdpPort = matchSrcTcpUdpPortToUpdate; }
791 if(matchDstTcpUdpPortToUpdate != null) { matchDstTcpUdpPort = matchDstTcpUdpPortToUpdate; }
Pavlin Radoslavovc1bafd12013-07-12 17:00:35 -0700792 if(actionOutputPortToUpdate != null) { actionOutputPort = actionOutputPortToUpdate; }
Pavlin Radoslavov1bc2c472013-07-17 18:11:37 -0700793 if(actionsToUpdate != null) { actions = actionsToUpdate; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700794
795 if(flowPathToUpdate != null) { flowPath = flowPathToUpdate; }
796 if(swToUpdate != null) { sw = swToUpdate; }
797 if(inportToUpdate != null) { inport = inportToUpdate; }
798 if(outportToUpdate != null) { outport = outportToUpdate; }
799
800 clearUncommitedData();
801 }
802
803 public void rollback() {
804 clearUncommitedData();
805 }
806
807 public void clearUncommitedData() {
808 stateToUpdate = typeToUpdate = entryIdToUpdate = dpidToUpdate = null;
809 userStateToUpdate = switchStateToUpdate = errorStateTypeToUpdate = errorStateCodeToUpdate = null;
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700810 matchInPortToUpdate = null;
811 matchSrcMacToUpdate = matchDstMacToUpdate = null;
812 matchEtherFrameTypeToUpdate = null;
813 matchVlanIdToUpdate = null;
814 matchVlanPriorityToUpdate = null;
815 matchSrcIpaddrToUpdate = matchDstIpaddrToUpdate = null;
816 matchIpProtoToUpdate = matchIpToSToUpdate = null;
817 matchSrcTcpUdpPortToUpdate = matchDstTcpUdpPortToUpdate = null;
Pavlin Radoslavovc1bafd12013-07-12 17:00:35 -0700818 actionOutputPortToUpdate = null;
Pavlin Radoslavov1bc2c472013-07-17 18:11:37 -0700819 actionsToUpdate = null;
Naoki Shiotac88d9562013-06-18 15:21:56 -0700820 flowPathToUpdate = null;
821 swToUpdate = null;
822 inportToUpdate = outportToUpdate = null;
823 }
824
825 // Setter methods for test
826 public void setStateForTest(String state) { this.state = state; }
827 public void setTypeForTest(String type) { this.type = type; }
828 public void setEntryIdForTest(String entryId) { this.entryId = entryId; }
829 public void setDpidForTest(String dpid) { this.dpid = dpid; }
830 public void setUserStateForTest(String userState) { this.userState = userState; }
831 public void setSwitchStateForTest(String switchState) { this.switchState = switchState; }
832 public void setErrorStateTypeForTest(String errorStateType) { this.errorStateType = errorStateType; }
833 public void setErrorStateCodeForTest(String errorStateCode) { this.errorStateCode = errorStateCode; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700834 public void setMatchInPortForTest(Short matchInPort) { this.matchInPort = matchInPort; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700835 public void setMatchSrcMacForTest(String matchSrcMac) { this.matchSrcMac = matchSrcMac; }
836 public void setMatchDstMacForTest(String matchDstMac) { this.matchDstMac = matchDstMac; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700837 public void setMatchEtherFrameTypeForTest(Short matchEtherFrameType) { this.matchEtherFrameType = matchEtherFrameType; }
838 public void setMatchVlanIdForTest(Short matchVlanId) { this.matchVlanId = matchVlanId; }
839 public void setMatchVlanPriorityForTest(Byte matchVlanPriority) { this.matchVlanPriority = matchVlanPriority; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700840 public void setMatchSrcIpaddrForTest(String matchSrcIpaddr) { this.matchSrcIpaddr = matchSrcIpaddr; }
841 public void setMatchDstIpaddrForTest(String matchDstIpaddr) { this.matchDstIpaddr = matchDstIpaddr; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700842 public void setMatchIpProtoForTest(Byte matchIpProto) { this.matchIpProto = matchIpProto; }
843 public void setMatchIpToSForTest(Byte matchIpToS) { this.matchIpToS = matchIpToS; }
844 public void setMatchSrcTcpUdpPortForTest(Short matchSrcTcpUdpPort) { this.matchSrcTcpUdpPort = matchSrcTcpUdpPort; }
845 public void setMatchDstTcpUdpPortForTest(Short matchDstTcpUdpPort) { this.matchDstTcpUdpPort = matchDstTcpUdpPort; }
Pavlin Radoslavovc1bafd12013-07-12 17:00:35 -0700846 public void setActionOutputPortForTest(Short actionOutputPort) { this.actionOutputPort = actionOutputPort; }
Pavlin Radoslavov1bc2c472013-07-17 18:11:37 -0700847 public void setActionsForTest(String actions) { this.actions = actions; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700848 public void setFlowPathForTest(IFlowPath flowPath) { this.flowPath = flowPath; }
849 public void setSwitchForTest(ISwitchObject sw) { this.sw = sw; }
850 public void setInportForTest(IPortObject inport) { this.inport = inport; }
851 public void setOutportForTest(IPortObject outport) { this.outport = outport; }
852
853 @Override
854 public String getState() { return state; }
855
856 @Override
857 public void setState(String state) { stateToUpdate = state; }
858
859 @Override
860 public String getType() { return type; }
861
862 @Override
863 public void setType(String type) { typeToUpdate = type; }
864
865 @Override
866 public Vertex asVertex() {
867 // TODO Auto-generated method stub
868 return null;
869 }
870
871 @Override
872 public String getFlowEntryId() { return entryId; }
873
874 @Override
875 public void setFlowEntryId(String flowEntryId) { entryIdToUpdate = flowEntryId; }
876
877 @Override
878 public String getSwitchDpid() { return dpid; }
879
880 @Override
881 public void setSwitchDpid(String switchDpid) { dpidToUpdate = switchDpid; }
882
883 @Override
884 public String getUserState() { return userState; }
885
886 @Override
887 public void setUserState(String userState) { userStateToUpdate = userState; }
888
889 @Override
890 public String getSwitchState() { return switchState; }
891
892 @Override
893 public void setSwitchState(String switchState) { switchStateToUpdate = switchState; }
894
895 @Override
896 public String getErrorStateType() { return errorStateType; }
897
898 @Override
899 public void setErrorStateType(String errorStateType) { errorStateTypeToUpdate = errorStateType; }
900
901 @Override
902 public String getErrorStateCode() { return errorStateCode; }
903
904 @Override
905 public void setErrorStateCode(String errorStateCode) { errorStateCodeToUpdate = errorStateCode; }
906
907 @Override
908 public Short getMatchInPort() { return matchInPort; }
909
910 @Override
911 public void setMatchInPort(Short matchInPort) { matchInPortToUpdate = matchInPort; }
912
913 @Override
Naoki Shiotac88d9562013-06-18 15:21:56 -0700914 public String getMatchSrcMac() { return matchSrcMac; }
915
916 @Override
917 public void setMatchSrcMac(String matchSrcMac) { matchSrcMacToUpdate = matchSrcMac; }
918
919 @Override
920 public String getMatchDstMac() { return matchDstMac; }
921
922 @Override
923 public void setMatchDstMac(String matchDstMac) { matchDstMacToUpdate = matchDstMac; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700924
925 @Override
926 public Short getMatchEthernetFrameType() {return matchEtherFrameType; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700927
928 @Override
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700929 public void setMatchEthernetFrameType(Short matchEthernetFrameType) { matchEtherFrameTypeToUpdate = matchEthernetFrameType; }
930
931 @Override
932 public Short getMatchVlanId() {return matchVlanId; }
933
934 @Override
Yuta HIGUCHI5208f1a2013-10-14 10:04:16 -0700935 public void setMatchVlanId(Short matchVlanId) { matchVlanIdToUpdate = matchVlanId; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700936
937 @Override
938 public Byte getMatchVlanPriority() {return matchVlanPriority; }
939
940 @Override
Yuta HIGUCHI5208f1a2013-10-14 10:04:16 -0700941 public void setMatchVlanPriority(Byte matchVlanPriority) { matchVlanPriorityToUpdate = matchVlanPriority; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700942
943 @Override
Naoki Shiotac88d9562013-06-18 15:21:56 -0700944 public String getMatchSrcIPv4Net() { return matchSrcIpaddr; }
945
946 @Override
947 public void setMatchSrcIPv4Net(String matchSrcIPv4Net) { matchSrcIpaddrToUpdate = matchSrcIPv4Net; }
948
949 @Override
950 public String getMatchDstIPv4Net() { return matchDstIpaddr; }
951
952 @Override
953 public void setMatchDstIPv4Net(String matchDstIPv4Net) { matchDstIpaddrToUpdate = matchDstIPv4Net; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700954
955 @Override
956 public Byte getMatchIpProto() {return matchIpProto; }
957
958 @Override
Yuta HIGUCHI5208f1a2013-10-14 10:04:16 -0700959 public void setMatchIpProto(Byte matchIpProto) { matchIpProtoToUpdate = matchIpProto; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700960
961 @Override
962 public Byte getMatchIpToS() {return matchIpToS; }
963
964 @Override
Yuta HIGUCHI5208f1a2013-10-14 10:04:16 -0700965 public void setMatchIpToS(Byte matchIpToS) { matchIpToSToUpdate = matchIpToS; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700966
967 @Override
968 public Short getMatchSrcTcpUdpPort() {return matchSrcTcpUdpPort; }
969
970 @Override
971 public void setMatchSrcTcpUdpPort(Short matchSrcTcpUdpPort) { matchSrcTcpUdpPortToUpdate = matchSrcTcpUdpPort; }
972
973 @Override
974 public Short getMatchDstTcpUdpPort() {return matchDstTcpUdpPort; }
975
976 @Override
977 public void setMatchDstTcpUdpPort(Short matchDstTcpUdpPort) { matchDstTcpUdpPortToUpdate = matchDstTcpUdpPort; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700978
979 @Override
Pavlin Radoslavovc1bafd12013-07-12 17:00:35 -0700980 public Short getActionOutputPort() { return actionOutputPort; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700981
982 @Override
Pavlin Radoslavovc1bafd12013-07-12 17:00:35 -0700983 public void setActionOutputPort(Short actionOutputPort) { actionOutputPortToUpdate = actionOutputPort; }
Pavlin Radoslavov1bc2c472013-07-17 18:11:37 -0700984
985 @Override
986 public String getActions() { return actions; }
987
988 @Override
989 public void setActions(String actions) { actionsToUpdate = actions; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700990
991 @Override
992 public IFlowPath getFlow() { return flowPath; }
993
994 @Override
995 public void setFlow(IFlowPath flow) { flowPathToUpdate = flow; }
996
997 @Override
998 public ISwitchObject getSwitch() { return sw; }
999
1000 @Override
1001 public void setSwitch(ISwitchObject sw) { swToUpdate = sw; }
1002
1003 @Override
1004 public IPortObject getInPort() { return inport; }
1005
1006 @Override
1007 public void setInPort(IPortObject port) { inportToUpdate = port; }
1008
1009 @Override
1010 public IPortObject getOutPort() { return outport; }
1011
1012 @Override
1013 public void setOutPort(IPortObject port) { outportToUpdate = port; }
1014 }
1015
1016
1017 public TestableGraphDBOperation() {
1018 super(EasyMock.createNiceMock(GraphDBConnection.class));
1019
1020 switches = new ArrayList<TestSwitchObject>();
1021 ports = new ArrayList<TestPortObject>();
1022 devices = new ArrayList<TestDeviceObject>();
1023 paths = new ArrayList<TestFlowPath>();
1024 entries = new ArrayList<TestFlowEntry>();
1025
1026 switchesToAdd = new ArrayList<TestSwitchObject>();
1027 portsToAdd = new ArrayList<TestPortObject>();
1028 devicesToAdd = new ArrayList<TestDeviceObject>();
1029 pathsToAdd = new ArrayList<TestFlowPath>();
1030 entriesToAdd = new ArrayList<TestFlowEntry>();
1031
1032 switchesToRemove = new ArrayList<TestSwitchObject>();
1033 portsToRemove = new ArrayList<TestPortObject>();
1034 devicesToRemove = new ArrayList<TestDeviceObject>();
1035 pathsToRemove = new ArrayList<TestFlowPath>();
1036 entriesToRemove = new ArrayList<TestFlowEntry>();
1037
1038 clearUncommitedData();
1039 }
1040
1041 private void clearUncommitedData() {
1042 for(TestFlowEntry flow : entries) {
1043 flow.clearUncommitedData();
1044 }
1045 for(TestFlowEntry flow : entriesToAdd) {
1046 flow.clearUncommitedData();
1047 }
1048
1049 for(TestDeviceObject dev : devices) {
1050 dev.clearUncommitedData();
1051 }
1052 for(TestDeviceObject dev : devicesToAdd) {
1053 dev.clearUncommitedData();
1054 }
1055
1056 for(TestSwitchObject sw : switches) {
1057 sw.clearUncommitedData();
1058 }
1059 for(TestSwitchObject sw : switchesToAdd) {
1060 sw.clearUncommitedData();
1061 }
1062
1063 for(TestPortObject port : ports) {
1064 port.clearUncommitedData();
1065 }
1066 for(TestPortObject port : portsToAdd) {
1067 port.clearUncommitedData();
1068 }
1069
1070 entriesToAdd.clear();
1071 entriesToRemove.clear();
1072 devicesToAdd.clear();
1073 devicesToRemove.clear();
1074 switchesToAdd.clear();
1075 switchesToRemove.clear();
1076 portsToAdd.clear();
1077 portsToRemove.clear();
1078 }
1079
1080
1081 // this.*ForTest() methods below are supposed to be used for creation of test topology.
1082 /**
1083 * Create new empty TestSwitchObject.
1084 * @return New TestSwitchObject
1085 */
1086 public TestSwitchObject createNewSwitchForTest() {
1087 TestSwitchObject sw = new TestSwitchObject();
1088 switches.add(sw);
1089 return sw;
1090 }
1091
1092 /**
1093 * Create new TestSwitchObject with specific DPID.
1094 * @param dpid DPID to be set
1095 * @return New TestSwitchObject
1096 */
1097 public TestSwitchObject createNewSwitchForTest(String dpid) {
1098 for(TestSwitchObject sw_loop : switches) {
1099 if(sw_loop.getDPID().equals(dpid)) {
1100 // Already created
1101 log.error("switch already exists : " + dpid);
1102 return sw_loop;
1103 }
1104 }
1105
1106 TestSwitchObject sw = new TestSwitchObject();
1107
1108 sw.setDpidForTest(dpid);
1109 switches.add(sw);
1110
1111 return sw;
1112 }
1113
1114 /**
1115 * Create new empty TestPortObject.
1116 * @return New TestPortObject
1117 */
1118 public TestPortObject createNewPortForTest() {
1119 TestPortObject port = new TestPortObject();
1120 ports.add(port);
1121 return port;
1122 }
1123
1124 /**
1125 * Create new TestPortObject with specific DPID and port number.
1126 * @param dpid DPID to be set
1127 * @param number Port number to be set
1128 * @return New TestPortObject
1129 */
1130 public TestPortObject createNewPortForTest(String dpid, Short number) {
1131 TestSwitchObject sw = null;
1132
1133 for(TestSwitchObject sw_loop : switches) {
1134 if(sw_loop.getDPID().equals(dpid)) {
1135 sw = sw_loop;
1136 }
1137 }
1138
1139 if(sw != null) {
1140 TestPortObject port = new TestPortObject();
1141 port.setNumberForTest(number);
1142 port.setSwitchForTest(sw);
1143 sw.addPortForTest(port);
1144
1145 ports.add(port);
1146
1147 return port;
1148 } else {
1149 return null;
1150 }
1151 }
1152
1153 /**
1154 * Link a TestPortObject to other TestPortObject.
1155 * @param src TestPortObjecgt of source port.
1156 * @param dst TestPortObjecgt of destination port.
1157 */
1158 public void setLinkBetweenPortsForTest(TestPortObject src, TestPortObject dst) {
1159 src.addLinkedPortForTest(dst);
1160 }
1161
1162 /**
1163 * Create new empty TestDeviceObject.
1164 * @return New TestDeviceObject
1165 */
1166 public TestDeviceObject createNewDeviceForTest() {
1167 TestDeviceObject dev = new TestDeviceObject();
1168
1169 return dev;
1170 }
1171
1172 /**
1173 * Create new empty TestFlowPathObject.
1174 * @return New TestFlowPathObject
1175 */
1176 public TestFlowPath createNewFlowPathForTest() {
1177 TestFlowPath path = new TestFlowPath();
1178 paths.add(path);
1179 return path;
1180 }
1181
1182 /**
1183 * Create new empty TestFlowEntryObject.
1184 * @return New TestFlowEntryObject
1185 */
1186 public TestFlowEntry createNewFlowEntryForTest() {
1187 TestFlowEntry entry = new TestFlowEntry();
1188 entries.add(entry);
1189 return entry;
1190 }
1191
1192
1193 public boolean hasLinkBetween(String srcSw_str, Short srcNumber, String dstSw_str, Short dstNumber) {
1194 IPortObject srcPort = null, dstPort = null;
1195 long srcSw = HexString.toLong(srcSw_str);
1196 long dstSw = HexString.toLong(dstSw_str);
1197
1198 for(TestSwitchObject sw : switches) {
1199 long swLong = HexString.toLong(sw.getDPID());
1200 if(swLong == srcSw) {
1201 for(IPortObject port : sw.getPorts()) {
1202 if(port.getNumber().equals(srcNumber)) {
1203 srcPort = port;
1204 }
1205 }
1206 } else if(swLong == dstSw) {
1207 for(IPortObject port : sw.getPorts()) {
1208 if(port.getNumber().equals(dstNumber)) {
1209 dstPort = port;
1210 }
1211 }
1212 }
1213 }
1214
1215 if(srcPort != null && dstPort != null) {
1216 for(IPortObject port : srcPort.getLinkedPorts()) {
1217 if(port.equals(dstPort)) {
1218 return true;
1219 }
1220 }
1221 }
1222
1223 return false;
1224 }
1225
1226 // Overriding methods below are to mock GraphDBOperation class.
1227 @Override
1228 public ISwitchObject newSwitch(String dpid) {
1229 TestSwitchObject sw = new TestSwitchObject();
1230 sw.setDPID(dpid);
1231 switchesToAdd.add(sw);
1232
1233 return sw;
1234 }
1235
1236 @Override
1237 public ISwitchObject searchSwitch(String dpid_str) {
1238 Long dpid = HexString.toLong(dpid_str);
1239
1240 for(ISwitchObject sw : switches) {
1241 if(HexString.toLong(sw.getDPID()) == dpid) {
1242 return sw;
1243 }
1244 }
1245 return null;
1246 }
1247
1248 @Override
1249 public ISwitchObject searchActiveSwitch(String dpid_str) {
1250 Long dpid = HexString.toLong(dpid_str);
1251
1252 for(ISwitchObject sw : switches) {
1253 if(HexString.toLong(sw.getDPID()) == dpid && sw.getState().equals("ACTIVE")) {
1254 return sw;
1255 }
1256 }
1257 return null;
1258 }
1259
1260 @Override
1261 public Iterable<ISwitchObject> getActiveSwitches() {
1262 List<ISwitchObject> list = new ArrayList<ISwitchObject>();
1263
1264 for(ISwitchObject sw : switches) {
1265 if(sw.getState() != null && sw.getState().equals("ACTIVE")) {
1266 list.add(sw);
1267 }
1268 }
1269 return list.isEmpty() ? null : list;
1270 }
1271
1272 @Override
1273 public Iterable<ISwitchObject> getAllSwitches() {
1274 List<ISwitchObject> list = new ArrayList<ISwitchObject>();
1275
1276 for(ISwitchObject sw : switches) {
1277 list.add(sw);
1278 }
1279
1280 return list.isEmpty() ? null : list;
1281 }
1282
1283 @Override
1284 public Iterable<ISwitchObject> getInactiveSwitches() {
1285 List<ISwitchObject> list = new ArrayList<ISwitchObject>();
1286
1287 for(ISwitchObject sw : switches) {
1288 if(! sw.getState().equals("ACTIVE")) {
1289 list.add(sw);
1290 }
1291 }
1292 return list.isEmpty() ? null : list;
1293 }
1294
1295 @Override
1296 public Iterable<IFlowEntry> getAllSwitchNotUpdatedFlowEntries() {
1297 List<IFlowEntry> list = new ArrayList<IFlowEntry>();
1298
1299 for(TestFlowEntry entry : entries) {
1300 if(entry.getSwitchState().equals("FE_SWITCH_NOT_UPDATED")) {
1301 list.add(entry);
1302 }
1303 }
1304 return list;
1305 }
1306
1307 @Override
1308 public void removeSwitch(ISwitchObject sw) {
1309 if(switches.contains(sw)) {
1310 switchesToRemove.add((TestSwitchObject)sw);
1311 }
1312 }
1313
1314 @Override
1315 public IPortObject newPort(Short portNumber) {
1316 TestPortObject port = new TestPortObject();
1317 port.setNumber(portNumber);
1318
1319 return port;
1320 }
1321
1322 public IPortObject newPort(Long dpid, Short portNumber) {
1323 TestPortObject port = null;
1324 TestSwitchObject sw = (TestSwitchObject)searchSwitch(HexString.toHexString(dpid));
1325
1326 if(sw != null) {
1327 port = (TestPortObject)newPort(portNumber);
1328 portsToAdd.add(port);
1329 sw.addPort(port);
1330 }
1331
1332 return port;
1333 }
1334
1335 @Override
Pankaj Berdebbd38612013-06-22 05:59:12 -07001336 public IPortObject searchPort(String dpid_str, Short number) {
Naoki Shiotac88d9562013-06-18 15:21:56 -07001337 long dpid = HexString.toLong(dpid_str);
1338
1339 for(TestSwitchObject sw : switches) {
1340 if(HexString.toLong(sw.getDPID()) == dpid) {
1341 for(IPortObject port : sw.getPorts()) {
1342 if(port.getNumber().equals(number)) {
1343 return port;
1344 }
1345 }
1346 }
1347 }
1348 return null;
1349 }
1350
1351 @Override
1352 public void removePort(IPortObject port) {
1353 for(TestSwitchObject sw : switches) {
1354 for(IPortObject pt : sw.getPorts()) {
1355 if(pt.equals(port)) {
1356 sw.removePort(port);
1357 }
1358 }
1359 }
1360 portsToRemove.add((TestPortObject)port);
1361 }
1362
1363 @Override
1364 public IDeviceObject newDevice() {
1365 TestDeviceObject dev = new TestDeviceObject();
1366 devicesToAdd.add(dev);
1367
1368 return dev;
1369 }
1370
1371 @Override
1372 public IDeviceObject searchDevice(String macAddr) {
1373 for(IDeviceObject dev : devices) {
1374 if(dev.getMACAddress().equals(macAddr)) {
1375 return dev;
1376 }
1377 }
1378 return null;
1379 }
1380
1381 @Override
1382 public Iterable<IDeviceObject> getDevices() {
1383 List<IDeviceObject> list = new ArrayList<IDeviceObject>();
1384
1385 for(TestDeviceObject dev : devices) {
1386 list.add(dev);
1387 }
1388
1389 return list;
1390 }
1391
1392 @Override
1393 public void removeDevice(IDeviceObject dev) {
1394 if(devices.contains((TestDeviceObject)dev)) {
1395 devicesToRemove.add((TestDeviceObject)dev);
1396 }
1397 }
1398
1399 @Override
1400 public IFlowPath newFlowPath() {
1401 TestFlowPath path = new TestFlowPath();
1402 pathsToAdd.add(path);
1403
1404 return path;
1405 }
1406
1407 @Override
1408 public IFlowPath searchFlowPath(FlowId flowId) {
1409 for(IFlowPath path : paths) {
1410 if(path.getFlowId().equals(flowId)) {
1411 return path;
1412 }
1413 }
1414 return null;
1415 }
1416
1417 @Override
1418 public IFlowPath getFlowPathByFlowEntry(IFlowEntry flowEntry) {
1419 for(IFlowPath path : paths) {
1420 for(IFlowEntry entry : path.getFlowEntries()) {
1421 if(entry.equals(flowEntry)) {
1422 return path;
1423 }
1424 }
1425
1426 }
1427 return null;
1428 }
1429
1430 @Override
1431 public Iterable<IFlowPath> getAllFlowPaths() {
1432 List<IFlowPath> list = new ArrayList<IFlowPath>();
1433
1434 for(IFlowPath path : paths) {
1435 list.add(path);
1436 }
1437
1438 return list;
1439 }
1440
1441 @Override
1442 public void removeFlowPath(IFlowPath flowPath) {
1443 if(paths.contains((TestFlowPath)flowPath)) {
1444 pathsToRemove.add((TestFlowPath)flowPath);
1445 }
1446 }
1447
1448 @Override
1449 public IFlowEntry newFlowEntry() {
1450 TestFlowEntry entry = new TestFlowEntry();
1451 entriesToAdd.add(entry);
1452 return entry;
1453 }
1454
1455 @Override
1456 public IFlowEntry searchFlowEntry(FlowEntryId flowEntryId) {
1457 for(TestFlowEntry entry : entries) {
1458 // TODO check if this matching works
1459 if(entry.getFlowEntryId().equals(flowEntryId)) {
1460 return entry;
1461 }
1462 }
1463 return null;
1464 }
1465
1466 @Override
1467 public Iterable<IFlowEntry> getAllFlowEntries() {
1468 List<IFlowEntry> list = new ArrayList<IFlowEntry>();
1469
1470 for(TestFlowEntry entry : entries) {
1471 list.add(entry);
1472 }
1473
1474 return list;
1475 }
1476
1477 @Override
1478 public void removeFlowEntry(IFlowEntry flowEntry) {
1479 if(entries.contains((TestFlowEntry)flowEntry)) {
1480 entriesToRemove.add((TestFlowEntry)flowEntry);
1481 }
1482 }
1483
1484 @Override
1485 public IDBConnection getDBConnection() {
1486 return super.getDBConnection();
1487 }
1488
1489 @Override
1490 public void commit() {
1491 for(TestSwitchObject sw : switchesToAdd) {
1492 switches.add(sw);
1493 }
1494 for(TestSwitchObject sw : switchesToRemove) {
1495 sw.commit();
1496 switches.remove(sw);
1497 }
1498 for(TestSwitchObject sw : switches) {
1499 sw.commit();
1500 }
1501
1502 for(TestPortObject port : portsToAdd) {
1503 ports.add(port);
1504 }
1505 for(TestPortObject port : portsToRemove) {
1506 port.commit();
1507 ports.remove(port);
1508 }
1509 for(TestPortObject port : ports) {
1510 port.commit();
1511 }
1512
1513 for(TestDeviceObject dev : devicesToAdd) {
1514 devices.add(dev);
1515 }
1516 for(TestDeviceObject dev : devicesToRemove) {
1517 dev.commit();
1518 devices.remove(dev);
1519 }
1520 for(TestDeviceObject dev : devices) {
1521 dev.commit();
1522 }
1523
1524 clearUncommitedData();
1525 }
1526
1527 @Override
1528 public void rollback() {
1529 clearUncommitedData();
1530 }
1531
1532 @Override
1533 public void close() {
1534 // TODO Auto-generated method stub
1535
1536 }
1537}