blob: dd21a263f6dc5c7ab47adf8f638bb4b8478ab18c [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 {
35 protected static Logger log = LoggerFactory.getLogger(TestableGraphDBOperation.class);
36
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 Radoslavov204b2862013-07-12 14:15:36 -0700418 private Long flowPathFlags;
Naoki Shiotac88d9562013-06-18 15:21:56 -0700419 private String dataPathSummary,userState;
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700420 private Short srcPort,dstPort;
421 private String matchSrcMac,matchDstMac;
422 private Short matchEthernetFrameType;
423 private Short matchVlanId;
424 private Byte matchVlanPriority;
425 private String matchSrcIpaddr,matchDstIpaddr;
426 private Byte matchIpProto, matchIpToS;
427 private Short matchSrcTcpUdpPort, matchDstTcpUdpPort;
Naoki Shiotac88d9562013-06-18 15:21:56 -0700428
429 private List<IFlowEntry> entries;
430 private List<ISwitchObject> switches;
431
432 private String stateToUpdate,typeToUpdate,flowIdToUpdate,installerIdToUpdate,srcSwToUpdate,dstSwToUpdate;
Pavlin Radoslavov204b2862013-07-12 14:15:36 -0700433 private Long flowPathFlagsToUpdate;
Naoki Shiotac88d9562013-06-18 15:21:56 -0700434 private String dataPathSummaryToUpdate,userStateToUpdate;
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700435 private Short srcPortToUpdate,dstPortToUpdate;
436 private String matchSrcMacToUpdate,matchDstMacToUpdate;
437 private Short matchEthernetFrameTypeToUpdate;
438 private Short matchVlanIdToUpdate;
439 private Byte matchVlanPriorityToUpdate;
440 private String matchSrcIpaddrToUpdate,matchDstIpaddrToUpdate;
441 private Byte matchIpProtoToUpdate, matchIpToSToUpdate;
442 private Short matchSrcTcpUdpPortToUpdate, matchDstTcpUdpPortToUpdate;
Naoki Shiotac88d9562013-06-18 15:21:56 -0700443
444 private List<IFlowEntry> flowsToAdd;
445 private List<IFlowEntry> flowsToRemove;
446
447 public TestFlowPath() {
448 type = "flow";
449
450 entries = new ArrayList<IFlowEntry>();
451 flowsToAdd = new ArrayList<IFlowEntry>();
452 flowsToRemove = new ArrayList<IFlowEntry>();
453
454 switches = new ArrayList<ISwitchObject>();
455
456 clear();
457 }
458
459 public void commit() {
460 for(IFlowEntry flow : flowsToAdd) {
461 entries.add(flow);
462 }
463 for(IFlowEntry flow : flowsToRemove) {
464 entries.remove(flow);
465 }
466 if(stateToUpdate != null) { state = stateToUpdate; }
467 if(typeToUpdate != null) { type = typeToUpdate; }
468 if(flowIdToUpdate != null) { flowId = flowIdToUpdate; }
469 if(installerIdToUpdate != null) { installerId = installerIdToUpdate; }
Pavlin Radoslavov204b2862013-07-12 14:15:36 -0700470 if(flowPathFlagsToUpdate != null) { flowPathFlags = flowPathFlagsToUpdate; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700471 if(srcSwToUpdate != null) { srcSw = srcSwToUpdate; }
472 if(dstSwToUpdate != null) { dstSw = dstSwToUpdate; }
473 if(dataPathSummaryToUpdate != null) { dataPathSummary = dataPathSummaryToUpdate; }
474 if(userStateToUpdate != null) { userState = userStateToUpdate; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700475 if(srcPortToUpdate != null) { srcPort = srcPortToUpdate; }
476 if(dstPortToUpdate != null) { dstPort = dstPortToUpdate; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700477 if(matchSrcMacToUpdate != null) { matchSrcMac = matchSrcMacToUpdate; }
478 if(matchDstMacToUpdate != null) { matchDstMac = matchDstMacToUpdate; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700479 if(matchEthernetFrameTypeToUpdate != null) { matchEthernetFrameType = matchEthernetFrameTypeToUpdate; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700480 if(matchVlanIdToUpdate != null) { matchVlanId = matchVlanIdToUpdate; }
481 if(matchVlanPriorityToUpdate != null) { matchVlanPriority = matchVlanPriorityToUpdate; }
482 if(matchSrcIpaddrToUpdate != null) { matchSrcIpaddr = matchSrcIpaddrToUpdate; }
483 if(matchDstIpaddrToUpdate != null) { matchDstIpaddr = matchDstIpaddrToUpdate; }
484 if(matchIpProtoToUpdate != null) { matchIpProto = matchIpProtoToUpdate; }
485 if(matchIpToSToUpdate != null) { matchIpToS = matchIpToSToUpdate; }
486 if(matchSrcTcpUdpPortToUpdate != null) { matchSrcTcpUdpPort = matchSrcTcpUdpPortToUpdate; }
487 if(matchDstTcpUdpPortToUpdate != null) { matchDstTcpUdpPort = matchDstTcpUdpPortToUpdate; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700488 }
489
490 public void rollback() {
491 clear();
492 }
493
494 public void clear() {
495 flowsToAdd.clear();
496 flowsToRemove.clear();
497
498 stateToUpdate = typeToUpdate = flowIdToUpdate = installerIdToUpdate = null;
Pavlin Radoslavov204b2862013-07-12 14:15:36 -0700499 flowPathFlagsToUpdate = null;
Naoki Shiotac88d9562013-06-18 15:21:56 -0700500 srcSwToUpdate = dstSwToUpdate = dataPathSummaryToUpdate = userStateToUpdate = null;
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700501 srcPortToUpdate = dstPortToUpdate = null;
502 matchSrcMacToUpdate = matchDstMacToUpdate = null;
503 matchEthernetFrameTypeToUpdate = null;
504 matchVlanIdToUpdate = null;
505 matchVlanPriorityToUpdate = null;
506 matchSrcIpaddrToUpdate = matchDstIpaddrToUpdate = null;
507 matchIpProtoToUpdate = matchIpToSToUpdate = null;
508 matchSrcTcpUdpPortToUpdate = matchDstTcpUdpPortToUpdate = null;
Naoki Shiotac88d9562013-06-18 15:21:56 -0700509 }
510
511 // Setter methods for test
512 public void setStateForTest(String state) { this.state = state; }
513 public void setTypeForTest(String type) { this.type = type; }
514 public void setFlowIdForTest(String flowId) { this.flowId = flowId; }
515 public void setInstallerIdForTest(String installerId) { this.installerId = installerId; }
Pavlin Radoslavov204b2862013-07-12 14:15:36 -0700516 public void setFlowPathFlagsForTest(Long flowPathFlags) { this.flowPathFlags = flowPathFlags; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700517 public void setSrcSwForTest(String srcSw) { this.srcSw = srcSw; }
518 public void setDstSwForTest(String dstSw) { this.dstSw = dstSw; }
519 public void setDataPathSummaryForTest(String dataPathSummary) { this.dataPathSummary = dataPathSummary; }
520 public void setUserStateForTest(String userState) { this.userState = userState; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700521 public void setSrcPortForTest(Short srcPort) { this.srcPort = srcPort; }
522 public void setDstPortForTest(Short dstPort) { this.dstPort = dstPort; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700523 public void setMatchSrcMacForTest(String matchSrcMac) { this.matchSrcMac = matchSrcMac; }
524 public void setMatchDstMacForTest(String matchDstMac) { this.matchDstMac = matchDstMac; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700525 public void setMatchEthernetFrameTypeForTest(Short matchEthernetFrameType) { this.matchEthernetFrameType = matchEthernetFrameType; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700526 public void setMatchVlanIdForTest(Short matchVlanId) { this.matchVlanId = matchVlanId; }
527 public void setMatchVlanPriorityForTest(Byte matchVlanPriority) { this.matchVlanPriority = matchVlanPriority; }
528 public void setMatchSrcIpaddrForTest(String matchSrcIpaddr) { this.matchSrcIpaddr = matchSrcIpaddr; }
529 public void setMatchDstIpaddrForTest(String matchDstIpaddr) { this.matchDstIpaddr = matchDstIpaddr; }
530 public void setMatchIpProtoForTest(Byte matchIpProto) { this.matchIpProto = matchIpProto; }
531 public void setMatchIpToSForTest(Byte matchIpToS) { this.matchIpToS = matchIpToS; }
532 public void setMatchSrcTcpUdpPortForTest(Short matchSrcTcpUdpPort) { this.matchSrcTcpUdpPort = matchSrcTcpUdpPort; }
533 public void setMatchDstTcpUdpPortForTest(Short matchDstTcpUdpPort) { this.matchDstTcpUdpPort = matchDstTcpUdpPort; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700534 public void addFlowEntryForTest(IFlowEntry entry) { entries.add(entry); }
535 public void addSwitchForTest(ISwitchObject sw) { switches.add(sw); }
536
537 @Override
538 public String getState() { return state; }
539
540 @Override
541 public void setState(String state) { stateToUpdate = state; }
542
543 @Override
544 public String getType() { return type; }
545
546 @Override
547 public void setType(String type) { typeToUpdate = type; }
548
549 @Override
550 public Vertex asVertex() {
551 // TODO Auto-generated method stub
552 return null;
553 }
554
555 @Override
556 public String getFlowId() { return flowId; }
557
558 @Override
559 public void setFlowId(String flowId) { flowIdToUpdate = flowId; }
560
561 @Override
562 public String getInstallerId() { return installerId; }
563
564 @Override
565 public void setInstallerId(String installerId) { installerIdToUpdate = installerId; }
566
567 @Override
Pavlin Radoslavov204b2862013-07-12 14:15:36 -0700568 public Long getFlowPathFlags() { return flowPathFlags; }
569
570 @Override
571 public void setFlowPathFlags(Long flowPathFlags) { flowPathFlagsToUpdate = flowPathFlags; }
572
573 @Override
Naoki Shiotac88d9562013-06-18 15:21:56 -0700574 public String getSrcSwitch() { return srcSw; }
575
576 @Override
577 public void setSrcSwitch(String srcSwitch) { srcSwToUpdate = srcSwitch; }
578
579 @Override
580 public Short getSrcPort() { return srcPort; }
581
582 @Override
583 public void setSrcPort(Short srcPort) { srcPortToUpdate = srcPort; }
584
585 @Override
586 public String getDstSwitch() { return dstSw; }
587
588 @Override
589 public void setDstSwitch(String dstSwitch) { dstSwToUpdate = dstSwitch; }
590
591 @Override
592 public Short getDstPort() { return dstPort; }
593
594 @Override
595 public void setDstPort(Short dstPort) { dstPortToUpdate = dstPort; }
596
597 @Override
598 public String getDataPathSummary() { return dataPathSummary; }
599
600 @Override
601 public void setDataPathSummary(String dataPathSummary) { dataPathSummaryToUpdate = dataPathSummary; }
602
603 @Override
604 public Iterable<IFlowEntry> getFlowEntries() { return entries; }
605
606 @Override
607 public void addFlowEntry(IFlowEntry flowEntry) {
608 if(! entries.contains(flowEntry)) {
609 flowsToAdd.add(flowEntry);
610 }
611 }
612
613 @Override
614 public void removeFlowEntry(IFlowEntry flowEntry) {
615 if(entries.contains(flowEntry)) {
616 flowsToAdd.add(flowEntry);
617 }
618 }
619
620 @Override
Naoki Shiotac88d9562013-06-18 15:21:56 -0700621 public String getMatchSrcMac() { return matchSrcMac; }
622
623 @Override
624 public void setMatchSrcMac(String matchSrcMac) { matchSrcMacToUpdate = matchSrcMac; }
625
626 @Override
627 public String getMatchDstMac() { return matchDstMac; }
628
629 @Override
630 public void setMatchDstMac(String matchDstMac) { matchDstMacToUpdate = matchDstMac; }
631
632 @Override
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700633 public Short getMatchEthernetFrameType() { return matchEthernetFrameType; }
634
635 @Override
636 public void setMatchEthernetFrameType(Short matchEthernetFrameType) {
637 matchEthernetFrameTypeToUpdate = matchEthernetFrameType; }
638
639 @Override
640 public Short getMatchVlanId() { return matchVlanId; }
641
642 @Override
643 public void setMatchVlanId(Short matchVlanId) {
644 matchVlanIdToUpdate = matchVlanId; }
645
646 @Override
647 public Byte getMatchVlanPriority() { return matchVlanPriority; }
648
649 @Override
650 public void setMatchVlanPriority(Byte matchVlanPriority) {
651 matchVlanPriorityToUpdate = matchVlanPriority; }
652
653 @Override
Naoki Shiotac88d9562013-06-18 15:21:56 -0700654 public String getMatchSrcIPv4Net() { return matchSrcIpaddr; }
655
656 @Override
657 public void setMatchSrcIPv4Net(String matchSrcIPv4Net) {
658 matchSrcIpaddrToUpdate = matchSrcIPv4Net; }
659
660 @Override
661 public String getMatchDstIPv4Net() { return matchDstIpaddr; }
662
663 @Override
664 public void setMatchDstIPv4Net(String matchDstIPv4Net) {
665 matchDstIpaddrToUpdate = matchDstIPv4Net; }
666
667 @Override
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700668 public Byte getMatchIpProto() { return matchIpProto; }
669
670 @Override
671 public void setMatchIpProto(Byte matchIpProto) {
672 matchIpProtoToUpdate = matchIpProto; }
673
674 @Override
675 public Byte getMatchIpToS() { return matchIpToS; }
676
677 @Override
678 public void setMatchIpToS(Byte matchIpToS) {
679 matchIpToSToUpdate = matchIpToS; }
680
681 @Override
682 public Short getMatchSrcTcpUdpPort() { return matchSrcTcpUdpPort; }
683
684 @Override
685 public void setMatchSrcTcpUdpPort(Short matchSrcTcpUdpPort) {
686 matchSrcTcpUdpPortToUpdate = matchSrcTcpUdpPort; }
687
688 @Override
689 public Short getMatchDstTcpUdpPort() { return matchDstTcpUdpPort; }
690
691 @Override
692 public void setMatchDstTcpUdpPort(Short matchDstTcpUdpPort) {
693 matchDstTcpUdpPortToUpdate = matchDstTcpUdpPort; }
694
695 @Override
Naoki Shiotac88d9562013-06-18 15:21:56 -0700696 public Iterable<ISwitchObject> getSwitches() { return switches; }
697
698 @Override
699 public String getUserState() { return userState; }
700
701 @Override
702 public void setUserState(String userState) { userStateToUpdate = userState; }
703 }
704
705 public static class TestFlowEntry implements IFlowEntry {
706 private String state,type,entryId,dpid,userState,switchState,errorStateType,errorStateCode;
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700707 private Short matchInPort;
708 private String matchSrcMac,matchDstMac;
709 private Short matchEtherFrameType;
710 private Short matchVlanId;
711 private Byte matchVlanPriority;
712 private String matchSrcIpaddr,matchDstIpaddr;
713 private Byte matchIpProto, matchIpToS;
714 private Short matchSrcTcpUdpPort, matchDstTcpUdpPort;
Pavlin Radoslavovc1bafd12013-07-12 17:00:35 -0700715 private Short actionOutputPort;
Naoki Shiotac88d9562013-06-18 15:21:56 -0700716
717 private IFlowPath flowPath;
718 private ISwitchObject sw;
719 private IPortObject inport,outport;
720
721 private String stateToUpdate,typeToUpdate,entryIdToUpdate,dpidToUpdate,
722 userStateToUpdate,switchStateToUpdate,errorStateTypeToUpdate,errorStateCodeToUpdate;
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700723 private Short matchInPortToUpdate;
724 private String matchSrcMacToUpdate,matchDstMacToUpdate;
725 private Short matchEtherFrameTypeToUpdate;
726 private Short matchVlanIdToUpdate;
727 private Byte matchVlanPriorityToUpdate;
728 private String matchSrcIpaddrToUpdate,matchDstIpaddrToUpdate;
729 private Byte matchIpProtoToUpdate, matchIpToSToUpdate;
730 private Short matchSrcTcpUdpPortToUpdate, matchDstTcpUdpPortToUpdate;
Pavlin Radoslavovc1bafd12013-07-12 17:00:35 -0700731 private Short actionOutputPortToUpdate;
Naoki Shiotac88d9562013-06-18 15:21:56 -0700732
733 private IFlowPath flowPathToUpdate;
734 private ISwitchObject swToUpdate;
735 private IPortObject inportToUpdate,outportToUpdate;
736
737 public TestFlowEntry() {
738 type = "flow_entry";
739
740 clearUncommitedData();
741 }
742
743 public void commit() {
744 if(stateToUpdate != null) { state = stateToUpdate; }
745 if(typeToUpdate != null) { type = typeToUpdate; }
746 if(entryIdToUpdate != null) { entryId = entryIdToUpdate; }
747 if(dpidToUpdate != null) { dpid = dpidToUpdate; }
748 if(userStateToUpdate != null) { userState = userStateToUpdate; }
749 if(switchStateToUpdate != null) { switchState = switchStateToUpdate; }
750 if(errorStateTypeToUpdate != null) { errorStateType = errorStateTypeToUpdate; }
751 if(errorStateCodeToUpdate != null) { errorStateCode = errorStateCodeToUpdate; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700752 if(matchInPortToUpdate != null) { matchInPort = matchInPortToUpdate; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700753 if(matchSrcMacToUpdate != null) { matchSrcMac = matchSrcMacToUpdate; }
754 if(matchDstMacToUpdate != null) { matchDstMac = matchDstMacToUpdate; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700755 if(matchEtherFrameTypeToUpdate != null) { matchEtherFrameType = matchEtherFrameTypeToUpdate; }
756 if(matchVlanIdToUpdate != null) { matchVlanId = matchVlanIdToUpdate; }
757 if(matchVlanPriorityToUpdate != null) { matchVlanPriority = matchVlanPriorityToUpdate; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700758 if(matchSrcIpaddrToUpdate != null) { matchSrcIpaddr = matchSrcIpaddrToUpdate; }
759 if(matchDstIpaddrToUpdate != null) { matchDstIpaddr = matchDstIpaddrToUpdate; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700760 if(matchIpProtoToUpdate != null) { matchIpProto = matchIpProtoToUpdate; }
761 if(matchIpToSToUpdate != null) { matchIpToS = matchIpToSToUpdate; }
762 if(matchSrcTcpUdpPortToUpdate != null) { matchSrcTcpUdpPort = matchSrcTcpUdpPortToUpdate; }
763 if(matchDstTcpUdpPortToUpdate != null) { matchDstTcpUdpPort = matchDstTcpUdpPortToUpdate; }
Pavlin Radoslavovc1bafd12013-07-12 17:00:35 -0700764 if(actionOutputPortToUpdate != null) { actionOutputPort = actionOutputPortToUpdate; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700765
766 if(flowPathToUpdate != null) { flowPath = flowPathToUpdate; }
767 if(swToUpdate != null) { sw = swToUpdate; }
768 if(inportToUpdate != null) { inport = inportToUpdate; }
769 if(outportToUpdate != null) { outport = outportToUpdate; }
770
771 clearUncommitedData();
772 }
773
774 public void rollback() {
775 clearUncommitedData();
776 }
777
778 public void clearUncommitedData() {
779 stateToUpdate = typeToUpdate = entryIdToUpdate = dpidToUpdate = null;
780 userStateToUpdate = switchStateToUpdate = errorStateTypeToUpdate = errorStateCodeToUpdate = null;
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700781 matchInPortToUpdate = null;
782 matchSrcMacToUpdate = matchDstMacToUpdate = null;
783 matchEtherFrameTypeToUpdate = null;
784 matchVlanIdToUpdate = null;
785 matchVlanPriorityToUpdate = null;
786 matchSrcIpaddrToUpdate = matchDstIpaddrToUpdate = null;
787 matchIpProtoToUpdate = matchIpToSToUpdate = null;
788 matchSrcTcpUdpPortToUpdate = matchDstTcpUdpPortToUpdate = null;
Pavlin Radoslavovc1bafd12013-07-12 17:00:35 -0700789 actionOutputPortToUpdate = null;
Naoki Shiotac88d9562013-06-18 15:21:56 -0700790 flowPathToUpdate = null;
791 swToUpdate = null;
792 inportToUpdate = outportToUpdate = null;
793 }
794
795 // Setter methods for test
796 public void setStateForTest(String state) { this.state = state; }
797 public void setTypeForTest(String type) { this.type = type; }
798 public void setEntryIdForTest(String entryId) { this.entryId = entryId; }
799 public void setDpidForTest(String dpid) { this.dpid = dpid; }
800 public void setUserStateForTest(String userState) { this.userState = userState; }
801 public void setSwitchStateForTest(String switchState) { this.switchState = switchState; }
802 public void setErrorStateTypeForTest(String errorStateType) { this.errorStateType = errorStateType; }
803 public void setErrorStateCodeForTest(String errorStateCode) { this.errorStateCode = errorStateCode; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700804 public void setMatchInPortForTest(Short matchInPort) { this.matchInPort = matchInPort; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700805 public void setMatchSrcMacForTest(String matchSrcMac) { this.matchSrcMac = matchSrcMac; }
806 public void setMatchDstMacForTest(String matchDstMac) { this.matchDstMac = matchDstMac; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700807 public void setMatchEtherFrameTypeForTest(Short matchEtherFrameType) { this.matchEtherFrameType = matchEtherFrameType; }
808 public void setMatchVlanIdForTest(Short matchVlanId) { this.matchVlanId = matchVlanId; }
809 public void setMatchVlanPriorityForTest(Byte matchVlanPriority) { this.matchVlanPriority = matchVlanPriority; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700810 public void setMatchSrcIpaddrForTest(String matchSrcIpaddr) { this.matchSrcIpaddr = matchSrcIpaddr; }
811 public void setMatchDstIpaddrForTest(String matchDstIpaddr) { this.matchDstIpaddr = matchDstIpaddr; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700812 public void setMatchIpProtoForTest(Byte matchIpProto) { this.matchIpProto = matchIpProto; }
813 public void setMatchIpToSForTest(Byte matchIpToS) { this.matchIpToS = matchIpToS; }
814 public void setMatchSrcTcpUdpPortForTest(Short matchSrcTcpUdpPort) { this.matchSrcTcpUdpPort = matchSrcTcpUdpPort; }
815 public void setMatchDstTcpUdpPortForTest(Short matchDstTcpUdpPort) { this.matchDstTcpUdpPort = matchDstTcpUdpPort; }
Pavlin Radoslavovc1bafd12013-07-12 17:00:35 -0700816 public void setActionOutputPortForTest(Short actionOutputPort) { this.actionOutputPort = actionOutputPort; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700817 public void setFlowPathForTest(IFlowPath flowPath) { this.flowPath = flowPath; }
818 public void setSwitchForTest(ISwitchObject sw) { this.sw = sw; }
819 public void setInportForTest(IPortObject inport) { this.inport = inport; }
820 public void setOutportForTest(IPortObject outport) { this.outport = outport; }
821
822 @Override
823 public String getState() { return state; }
824
825 @Override
826 public void setState(String state) { stateToUpdate = state; }
827
828 @Override
829 public String getType() { return type; }
830
831 @Override
832 public void setType(String type) { typeToUpdate = type; }
833
834 @Override
835 public Vertex asVertex() {
836 // TODO Auto-generated method stub
837 return null;
838 }
839
840 @Override
841 public String getFlowEntryId() { return entryId; }
842
843 @Override
844 public void setFlowEntryId(String flowEntryId) { entryIdToUpdate = flowEntryId; }
845
846 @Override
847 public String getSwitchDpid() { return dpid; }
848
849 @Override
850 public void setSwitchDpid(String switchDpid) { dpidToUpdate = switchDpid; }
851
852 @Override
853 public String getUserState() { return userState; }
854
855 @Override
856 public void setUserState(String userState) { userStateToUpdate = userState; }
857
858 @Override
859 public String getSwitchState() { return switchState; }
860
861 @Override
862 public void setSwitchState(String switchState) { switchStateToUpdate = switchState; }
863
864 @Override
865 public String getErrorStateType() { return errorStateType; }
866
867 @Override
868 public void setErrorStateType(String errorStateType) { errorStateTypeToUpdate = errorStateType; }
869
870 @Override
871 public String getErrorStateCode() { return errorStateCode; }
872
873 @Override
874 public void setErrorStateCode(String errorStateCode) { errorStateCodeToUpdate = errorStateCode; }
875
876 @Override
877 public Short getMatchInPort() { return matchInPort; }
878
879 @Override
880 public void setMatchInPort(Short matchInPort) { matchInPortToUpdate = matchInPort; }
881
882 @Override
Naoki Shiotac88d9562013-06-18 15:21:56 -0700883 public String getMatchSrcMac() { return matchSrcMac; }
884
885 @Override
886 public void setMatchSrcMac(String matchSrcMac) { matchSrcMacToUpdate = matchSrcMac; }
887
888 @Override
889 public String getMatchDstMac() { return matchDstMac; }
890
891 @Override
892 public void setMatchDstMac(String matchDstMac) { matchDstMacToUpdate = matchDstMac; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700893
894 @Override
895 public Short getMatchEthernetFrameType() {return matchEtherFrameType; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700896
897 @Override
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700898 public void setMatchEthernetFrameType(Short matchEthernetFrameType) { matchEtherFrameTypeToUpdate = matchEthernetFrameType; }
899
900 @Override
901 public Short getMatchVlanId() {return matchVlanId; }
902
903 @Override
904 public void setMatchVlanId(Short matchVlanId) { matchVlanId = matchVlanId; }
905
906 @Override
907 public Byte getMatchVlanPriority() {return matchVlanPriority; }
908
909 @Override
910 public void setMatchVlanPriority(Byte matchVlanPriority) { matchVlanPriority = matchVlanPriority; }
911
912 @Override
Naoki Shiotac88d9562013-06-18 15:21:56 -0700913 public String getMatchSrcIPv4Net() { return matchSrcIpaddr; }
914
915 @Override
916 public void setMatchSrcIPv4Net(String matchSrcIPv4Net) { matchSrcIpaddrToUpdate = matchSrcIPv4Net; }
917
918 @Override
919 public String getMatchDstIPv4Net() { return matchDstIpaddr; }
920
921 @Override
922 public void setMatchDstIPv4Net(String matchDstIPv4Net) { matchDstIpaddrToUpdate = matchDstIPv4Net; }
Pavlin Radoslavovad3a1e62013-07-09 13:30:16 -0700923
924 @Override
925 public Byte getMatchIpProto() {return matchIpProto; }
926
927 @Override
928 public void setMatchIpProto(Byte matchIpProto) { matchIpProto = matchIpProto; }
929
930 @Override
931 public Byte getMatchIpToS() {return matchIpToS; }
932
933 @Override
934 public void setMatchIpToS(Byte matchIpToS) { matchIpToS = matchIpToS; }
935
936 @Override
937 public Short getMatchSrcTcpUdpPort() {return matchSrcTcpUdpPort; }
938
939 @Override
940 public void setMatchSrcTcpUdpPort(Short matchSrcTcpUdpPort) { matchSrcTcpUdpPortToUpdate = matchSrcTcpUdpPort; }
941
942 @Override
943 public Short getMatchDstTcpUdpPort() {return matchDstTcpUdpPort; }
944
945 @Override
946 public void setMatchDstTcpUdpPort(Short matchDstTcpUdpPort) { matchDstTcpUdpPortToUpdate = matchDstTcpUdpPort; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700947
948 @Override
Pavlin Radoslavovc1bafd12013-07-12 17:00:35 -0700949 public Short getActionOutputPort() { return actionOutputPort; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700950
951 @Override
Pavlin Radoslavovc1bafd12013-07-12 17:00:35 -0700952 public void setActionOutputPort(Short actionOutputPort) { actionOutputPortToUpdate = actionOutputPort; }
Naoki Shiotac88d9562013-06-18 15:21:56 -0700953
954 @Override
955 public IFlowPath getFlow() { return flowPath; }
956
957 @Override
958 public void setFlow(IFlowPath flow) { flowPathToUpdate = flow; }
959
960 @Override
961 public ISwitchObject getSwitch() { return sw; }
962
963 @Override
964 public void setSwitch(ISwitchObject sw) { swToUpdate = sw; }
965
966 @Override
967 public IPortObject getInPort() { return inport; }
968
969 @Override
970 public void setInPort(IPortObject port) { inportToUpdate = port; }
971
972 @Override
973 public IPortObject getOutPort() { return outport; }
974
975 @Override
976 public void setOutPort(IPortObject port) { outportToUpdate = port; }
977 }
978
979
980 public TestableGraphDBOperation() {
981 super(EasyMock.createNiceMock(GraphDBConnection.class));
982
983 switches = new ArrayList<TestSwitchObject>();
984 ports = new ArrayList<TestPortObject>();
985 devices = new ArrayList<TestDeviceObject>();
986 paths = new ArrayList<TestFlowPath>();
987 entries = new ArrayList<TestFlowEntry>();
988
989 switchesToAdd = new ArrayList<TestSwitchObject>();
990 portsToAdd = new ArrayList<TestPortObject>();
991 devicesToAdd = new ArrayList<TestDeviceObject>();
992 pathsToAdd = new ArrayList<TestFlowPath>();
993 entriesToAdd = new ArrayList<TestFlowEntry>();
994
995 switchesToRemove = new ArrayList<TestSwitchObject>();
996 portsToRemove = new ArrayList<TestPortObject>();
997 devicesToRemove = new ArrayList<TestDeviceObject>();
998 pathsToRemove = new ArrayList<TestFlowPath>();
999 entriesToRemove = new ArrayList<TestFlowEntry>();
1000
1001 clearUncommitedData();
1002 }
1003
1004 private void clearUncommitedData() {
1005 for(TestFlowEntry flow : entries) {
1006 flow.clearUncommitedData();
1007 }
1008 for(TestFlowEntry flow : entriesToAdd) {
1009 flow.clearUncommitedData();
1010 }
1011
1012 for(TestDeviceObject dev : devices) {
1013 dev.clearUncommitedData();
1014 }
1015 for(TestDeviceObject dev : devicesToAdd) {
1016 dev.clearUncommitedData();
1017 }
1018
1019 for(TestSwitchObject sw : switches) {
1020 sw.clearUncommitedData();
1021 }
1022 for(TestSwitchObject sw : switchesToAdd) {
1023 sw.clearUncommitedData();
1024 }
1025
1026 for(TestPortObject port : ports) {
1027 port.clearUncommitedData();
1028 }
1029 for(TestPortObject port : portsToAdd) {
1030 port.clearUncommitedData();
1031 }
1032
1033 entriesToAdd.clear();
1034 entriesToRemove.clear();
1035 devicesToAdd.clear();
1036 devicesToRemove.clear();
1037 switchesToAdd.clear();
1038 switchesToRemove.clear();
1039 portsToAdd.clear();
1040 portsToRemove.clear();
1041 }
1042
1043
1044 // this.*ForTest() methods below are supposed to be used for creation of test topology.
1045 /**
1046 * Create new empty TestSwitchObject.
1047 * @return New TestSwitchObject
1048 */
1049 public TestSwitchObject createNewSwitchForTest() {
1050 TestSwitchObject sw = new TestSwitchObject();
1051 switches.add(sw);
1052 return sw;
1053 }
1054
1055 /**
1056 * Create new TestSwitchObject with specific DPID.
1057 * @param dpid DPID to be set
1058 * @return New TestSwitchObject
1059 */
1060 public TestSwitchObject createNewSwitchForTest(String dpid) {
1061 for(TestSwitchObject sw_loop : switches) {
1062 if(sw_loop.getDPID().equals(dpid)) {
1063 // Already created
1064 log.error("switch already exists : " + dpid);
1065 return sw_loop;
1066 }
1067 }
1068
1069 TestSwitchObject sw = new TestSwitchObject();
1070
1071 sw.setDpidForTest(dpid);
1072 switches.add(sw);
1073
1074 return sw;
1075 }
1076
1077 /**
1078 * Create new empty TestPortObject.
1079 * @return New TestPortObject
1080 */
1081 public TestPortObject createNewPortForTest() {
1082 TestPortObject port = new TestPortObject();
1083 ports.add(port);
1084 return port;
1085 }
1086
1087 /**
1088 * Create new TestPortObject with specific DPID and port number.
1089 * @param dpid DPID to be set
1090 * @param number Port number to be set
1091 * @return New TestPortObject
1092 */
1093 public TestPortObject createNewPortForTest(String dpid, Short number) {
1094 TestSwitchObject sw = null;
1095
1096 for(TestSwitchObject sw_loop : switches) {
1097 if(sw_loop.getDPID().equals(dpid)) {
1098 sw = sw_loop;
1099 }
1100 }
1101
1102 if(sw != null) {
1103 TestPortObject port = new TestPortObject();
1104 port.setNumberForTest(number);
1105 port.setSwitchForTest(sw);
1106 sw.addPortForTest(port);
1107
1108 ports.add(port);
1109
1110 return port;
1111 } else {
1112 return null;
1113 }
1114 }
1115
1116 /**
1117 * Link a TestPortObject to other TestPortObject.
1118 * @param src TestPortObjecgt of source port.
1119 * @param dst TestPortObjecgt of destination port.
1120 */
1121 public void setLinkBetweenPortsForTest(TestPortObject src, TestPortObject dst) {
1122 src.addLinkedPortForTest(dst);
1123 }
1124
1125 /**
1126 * Create new empty TestDeviceObject.
1127 * @return New TestDeviceObject
1128 */
1129 public TestDeviceObject createNewDeviceForTest() {
1130 TestDeviceObject dev = new TestDeviceObject();
1131
1132 return dev;
1133 }
1134
1135 /**
1136 * Create new empty TestFlowPathObject.
1137 * @return New TestFlowPathObject
1138 */
1139 public TestFlowPath createNewFlowPathForTest() {
1140 TestFlowPath path = new TestFlowPath();
1141 paths.add(path);
1142 return path;
1143 }
1144
1145 /**
1146 * Create new empty TestFlowEntryObject.
1147 * @return New TestFlowEntryObject
1148 */
1149 public TestFlowEntry createNewFlowEntryForTest() {
1150 TestFlowEntry entry = new TestFlowEntry();
1151 entries.add(entry);
1152 return entry;
1153 }
1154
1155
1156 public boolean hasLinkBetween(String srcSw_str, Short srcNumber, String dstSw_str, Short dstNumber) {
1157 IPortObject srcPort = null, dstPort = null;
1158 long srcSw = HexString.toLong(srcSw_str);
1159 long dstSw = HexString.toLong(dstSw_str);
1160
1161 for(TestSwitchObject sw : switches) {
1162 long swLong = HexString.toLong(sw.getDPID());
1163 if(swLong == srcSw) {
1164 for(IPortObject port : sw.getPorts()) {
1165 if(port.getNumber().equals(srcNumber)) {
1166 srcPort = port;
1167 }
1168 }
1169 } else if(swLong == dstSw) {
1170 for(IPortObject port : sw.getPorts()) {
1171 if(port.getNumber().equals(dstNumber)) {
1172 dstPort = port;
1173 }
1174 }
1175 }
1176 }
1177
1178 if(srcPort != null && dstPort != null) {
1179 for(IPortObject port : srcPort.getLinkedPorts()) {
1180 if(port.equals(dstPort)) {
1181 return true;
1182 }
1183 }
1184 }
1185
1186 return false;
1187 }
1188
1189 // Overriding methods below are to mock GraphDBOperation class.
1190 @Override
1191 public ISwitchObject newSwitch(String dpid) {
1192 TestSwitchObject sw = new TestSwitchObject();
1193 sw.setDPID(dpid);
1194 switchesToAdd.add(sw);
1195
1196 return sw;
1197 }
1198
1199 @Override
1200 public ISwitchObject searchSwitch(String dpid_str) {
1201 Long dpid = HexString.toLong(dpid_str);
1202
1203 for(ISwitchObject sw : switches) {
1204 if(HexString.toLong(sw.getDPID()) == dpid) {
1205 return sw;
1206 }
1207 }
1208 return null;
1209 }
1210
1211 @Override
1212 public ISwitchObject searchActiveSwitch(String dpid_str) {
1213 Long dpid = HexString.toLong(dpid_str);
1214
1215 for(ISwitchObject sw : switches) {
1216 if(HexString.toLong(sw.getDPID()) == dpid && sw.getState().equals("ACTIVE")) {
1217 return sw;
1218 }
1219 }
1220 return null;
1221 }
1222
1223 @Override
1224 public Iterable<ISwitchObject> getActiveSwitches() {
1225 List<ISwitchObject> list = new ArrayList<ISwitchObject>();
1226
1227 for(ISwitchObject sw : switches) {
1228 if(sw.getState() != null && sw.getState().equals("ACTIVE")) {
1229 list.add(sw);
1230 }
1231 }
1232 return list.isEmpty() ? null : list;
1233 }
1234
1235 @Override
1236 public Iterable<ISwitchObject> getAllSwitches() {
1237 List<ISwitchObject> list = new ArrayList<ISwitchObject>();
1238
1239 for(ISwitchObject sw : switches) {
1240 list.add(sw);
1241 }
1242
1243 return list.isEmpty() ? null : list;
1244 }
1245
1246 @Override
1247 public Iterable<ISwitchObject> getInactiveSwitches() {
1248 List<ISwitchObject> list = new ArrayList<ISwitchObject>();
1249
1250 for(ISwitchObject sw : switches) {
1251 if(! sw.getState().equals("ACTIVE")) {
1252 list.add(sw);
1253 }
1254 }
1255 return list.isEmpty() ? null : list;
1256 }
1257
1258 @Override
1259 public Iterable<IFlowEntry> getAllSwitchNotUpdatedFlowEntries() {
1260 List<IFlowEntry> list = new ArrayList<IFlowEntry>();
1261
1262 for(TestFlowEntry entry : entries) {
1263 if(entry.getSwitchState().equals("FE_SWITCH_NOT_UPDATED")) {
1264 list.add(entry);
1265 }
1266 }
1267 return list;
1268 }
1269
1270 @Override
1271 public void removeSwitch(ISwitchObject sw) {
1272 if(switches.contains(sw)) {
1273 switchesToRemove.add((TestSwitchObject)sw);
1274 }
1275 }
1276
1277 @Override
1278 public IPortObject newPort(Short portNumber) {
1279 TestPortObject port = new TestPortObject();
1280 port.setNumber(portNumber);
1281
1282 return port;
1283 }
1284
1285 public IPortObject newPort(Long dpid, Short portNumber) {
1286 TestPortObject port = null;
1287 TestSwitchObject sw = (TestSwitchObject)searchSwitch(HexString.toHexString(dpid));
1288
1289 if(sw != null) {
1290 port = (TestPortObject)newPort(portNumber);
1291 portsToAdd.add(port);
1292 sw.addPort(port);
1293 }
1294
1295 return port;
1296 }
1297
1298 @Override
Pankaj Berdebbd38612013-06-22 05:59:12 -07001299 public IPortObject searchPort(String dpid_str, Short number) {
Naoki Shiotac88d9562013-06-18 15:21:56 -07001300 long dpid = HexString.toLong(dpid_str);
1301
1302 for(TestSwitchObject sw : switches) {
1303 if(HexString.toLong(sw.getDPID()) == dpid) {
1304 for(IPortObject port : sw.getPorts()) {
1305 if(port.getNumber().equals(number)) {
1306 return port;
1307 }
1308 }
1309 }
1310 }
1311 return null;
1312 }
1313
1314 @Override
1315 public void removePort(IPortObject port) {
1316 for(TestSwitchObject sw : switches) {
1317 for(IPortObject pt : sw.getPorts()) {
1318 if(pt.equals(port)) {
1319 sw.removePort(port);
1320 }
1321 }
1322 }
1323 portsToRemove.add((TestPortObject)port);
1324 }
1325
1326 @Override
1327 public IDeviceObject newDevice() {
1328 TestDeviceObject dev = new TestDeviceObject();
1329 devicesToAdd.add(dev);
1330
1331 return dev;
1332 }
1333
1334 @Override
1335 public IDeviceObject searchDevice(String macAddr) {
1336 for(IDeviceObject dev : devices) {
1337 if(dev.getMACAddress().equals(macAddr)) {
1338 return dev;
1339 }
1340 }
1341 return null;
1342 }
1343
1344 @Override
1345 public Iterable<IDeviceObject> getDevices() {
1346 List<IDeviceObject> list = new ArrayList<IDeviceObject>();
1347
1348 for(TestDeviceObject dev : devices) {
1349 list.add(dev);
1350 }
1351
1352 return list;
1353 }
1354
1355 @Override
1356 public void removeDevice(IDeviceObject dev) {
1357 if(devices.contains((TestDeviceObject)dev)) {
1358 devicesToRemove.add((TestDeviceObject)dev);
1359 }
1360 }
1361
1362 @Override
1363 public IFlowPath newFlowPath() {
1364 TestFlowPath path = new TestFlowPath();
1365 pathsToAdd.add(path);
1366
1367 return path;
1368 }
1369
1370 @Override
1371 public IFlowPath searchFlowPath(FlowId flowId) {
1372 for(IFlowPath path : paths) {
1373 if(path.getFlowId().equals(flowId)) {
1374 return path;
1375 }
1376 }
1377 return null;
1378 }
1379
1380 @Override
1381 public IFlowPath getFlowPathByFlowEntry(IFlowEntry flowEntry) {
1382 for(IFlowPath path : paths) {
1383 for(IFlowEntry entry : path.getFlowEntries()) {
1384 if(entry.equals(flowEntry)) {
1385 return path;
1386 }
1387 }
1388
1389 }
1390 return null;
1391 }
1392
1393 @Override
1394 public Iterable<IFlowPath> getAllFlowPaths() {
1395 List<IFlowPath> list = new ArrayList<IFlowPath>();
1396
1397 for(IFlowPath path : paths) {
1398 list.add(path);
1399 }
1400
1401 return list;
1402 }
1403
1404 @Override
1405 public void removeFlowPath(IFlowPath flowPath) {
1406 if(paths.contains((TestFlowPath)flowPath)) {
1407 pathsToRemove.add((TestFlowPath)flowPath);
1408 }
1409 }
1410
1411 @Override
1412 public IFlowEntry newFlowEntry() {
1413 TestFlowEntry entry = new TestFlowEntry();
1414 entriesToAdd.add(entry);
1415 return entry;
1416 }
1417
1418 @Override
1419 public IFlowEntry searchFlowEntry(FlowEntryId flowEntryId) {
1420 for(TestFlowEntry entry : entries) {
1421 // TODO check if this matching works
1422 if(entry.getFlowEntryId().equals(flowEntryId)) {
1423 return entry;
1424 }
1425 }
1426 return null;
1427 }
1428
1429 @Override
1430 public Iterable<IFlowEntry> getAllFlowEntries() {
1431 List<IFlowEntry> list = new ArrayList<IFlowEntry>();
1432
1433 for(TestFlowEntry entry : entries) {
1434 list.add(entry);
1435 }
1436
1437 return list;
1438 }
1439
1440 @Override
1441 public void removeFlowEntry(IFlowEntry flowEntry) {
1442 if(entries.contains((TestFlowEntry)flowEntry)) {
1443 entriesToRemove.add((TestFlowEntry)flowEntry);
1444 }
1445 }
1446
1447 @Override
1448 public IDBConnection getDBConnection() {
1449 return super.getDBConnection();
1450 }
1451
1452 @Override
1453 public void commit() {
1454 for(TestSwitchObject sw : switchesToAdd) {
1455 switches.add(sw);
1456 }
1457 for(TestSwitchObject sw : switchesToRemove) {
1458 sw.commit();
1459 switches.remove(sw);
1460 }
1461 for(TestSwitchObject sw : switches) {
1462 sw.commit();
1463 }
1464
1465 for(TestPortObject port : portsToAdd) {
1466 ports.add(port);
1467 }
1468 for(TestPortObject port : portsToRemove) {
1469 port.commit();
1470 ports.remove(port);
1471 }
1472 for(TestPortObject port : ports) {
1473 port.commit();
1474 }
1475
1476 for(TestDeviceObject dev : devicesToAdd) {
1477 devices.add(dev);
1478 }
1479 for(TestDeviceObject dev : devicesToRemove) {
1480 dev.commit();
1481 devices.remove(dev);
1482 }
1483 for(TestDeviceObject dev : devices) {
1484 dev.commit();
1485 }
1486
1487 clearUncommitedData();
1488 }
1489
1490 @Override
1491 public void rollback() {
1492 clearUncommitedData();
1493 }
1494
1495 @Override
1496 public void close() {
1497 // TODO Auto-generated method stub
1498
1499 }
1500}