blob: bedee033464e28b054983242770cfecbb4154ab9 [file] [log] [blame]
Teru87cd2da2013-06-15 20:33:08 -07001package net.floodlightcontroller.devicemanager.internal;
2
3import static org.junit.Assert.*;
4import static org.easymock.EasyMock.*;
5
6import java.util.ArrayList;
7import java.util.List;
8
9import javassist.bytecode.Descriptor.Iterator;
10
11import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IDeviceObject;
12import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.IPortObject;
13import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.ISwitchObject;
14import net.onrc.onos.ofcontroller.core.internal.SwitchStorageImpl;
15import net.onrc.onos.ofcontroller.devicemanager.internal.DeviceStorageImpl;
16import net.onrc.onos.util.GraphDBConnection;
17import net.onrc.onos.util.GraphDBConnection.Transaction;
18import net.onrc.onos.util.GraphDBOperation;
19import net.floodlightcontroller.core.internal.TestDatabaseManager;
20import net.floodlightcontroller.devicemanager.IDevice;
21import net.floodlightcontroller.devicemanager.SwitchPort;
22import net.floodlightcontroller.flowcache.FlowReconcileManager;
23import net.floodlightcontroller.packet.IPacket;
24import net.floodlightcontroller.packet.IPv4;
25import net.floodlightcontroller.storage.memory.MemoryStorageSource;
26
27import org.easymock.EasyMock;
28import org.junit.After;
29import org.junit.Before;
30import org.junit.Ignore;
31import org.junit.Test;
32import org.junit.runner.RunWith;
33import org.openflow.protocol.OFPacketIn;
34import org.openflow.util.HexString;
35import org.powermock.api.easymock.PowerMock;
36import org.powermock.core.classloader.annotations.PrepareForTest;
37import org.powermock.modules.junit4.PowerMockRunner;
38import org.slf4j.Logger;
39import org.slf4j.LoggerFactory;
40
41import com.thinkaurelius.titan.core.TitanFactory;
42import com.thinkaurelius.titan.core.TitanGraph;
43import com.tinkerpop.blueprints.Vertex;
44import com.tinkerpop.gremlin.java.GremlinPipeline;
45
46//Add Powermock preparation
47@RunWith(PowerMockRunner.class)
48@PrepareForTest({TitanFactory.class, GraphDBConnection.class, GraphDBOperation.class, DeviceStorageImpl.class})
49public class DeviceStorageImplTest{ //extends FloodlightTestCase{
50
51 protected static Logger log = LoggerFactory.getLogger(SwitchStorageImpl.class);
52
53 DeviceStorageImpl deviceImpl;
54 DeviceManagerImpl deviceManager;
55 protected IPacket testARPReplyPacket_1;
56 FlowReconcileManager flowReconcileMgr;
57 MemoryStorageSource storageSource;
58 protected byte[] testARPReplyPacket_1_Srld;
59 protected OFPacketIn packetIn_1;
60 private static TitanGraph titanGraph;
61 String conf;
62 private GraphDBConnection mockConn;
63 private GraphDBOperation mockOpe;
64
65 @Before
66 public void setUp() throws Exception {
67
68// Make mock cassandra DB
69// Replace TitanFactory.open() to return mock DB
70// titanGraph = TestDatabaseManager.getTestDatabase();
71// TestDatabaseManager.populateTestData(titanGraph);
72// PowerMock.mockStatic(TitanFactory.class);
73// EasyMock.expect(TitanFactory.open((String)EasyMock.anyObject())).andReturn(titanGraph);
74// PowerMock.replay(TitanFactory.class);
75
76 PowerMock.mockStatic(GraphDBConnection.class);
77 mockConn = createMock(GraphDBConnection.class);
78 PowerMock.suppress(PowerMock.constructor(GraphDBConnection.class));
79 EasyMock.expect(GraphDBConnection.getInstance((String)EasyMock.anyObject())).andReturn(mockConn);
80 PowerMock.replay(GraphDBConnection.class);
81
82 //PowerMock.mockStatic(GraphDBOperation.class);
83 mockOpe = PowerMock.createMock(GraphDBOperation.class);
84 PowerMock.expectNew(GraphDBOperation.class, mockConn).andReturn(mockOpe);
85 PowerMock.replay(GraphDBOperation.class);
86 // Replace the conf to dummy conf
87 // String conf = "/tmp/cassandra.titan";
88 conf = "/dummy/path/to/db";
89
90 deviceImpl = new DeviceStorageImpl();
91 }
92
93 @After
94 public void tearDown() throws Exception {
95 deviceImpl.close();
96 deviceImpl = null;
97 }
98
99 private String makeIPStringFromArray(Integer[] ipaddresses){
100 String multiIntString = "";
101 for(Integer intValue : ipaddresses)
102 {
103 if (multiIntString == null || multiIntString.isEmpty()){
104 multiIntString = "[" + IPv4.fromIPv4Address(intValue);
105 }
106 else{
107 multiIntString += ":" + IPv4.fromIPv4Address(intValue);
108 }
109 }
110 return multiIntString + "]";
111 }
112
113
114 /**
115 * Desc:
116 * Test method for addDevice method.
117 * Codition:
118 * N/A
119 * Expect:
120 * Get proper IDeviceObject
121 */
122 //@Ignore
123 @Test
124 public void testAddNewDevice() {
125 try
126 {
127 //Make mockDevice
128 IDevice mockDev = createMock(Device.class);
129 // Mac addr for test device.
130 String macAddr = "99:99:99:99:99:99";
131 // IP addr for test device
132 String ip = "192.168.100.1";
133 Integer[] ipaddrs = {IPv4.toIPv4Address(ip)};
134 // Mac addr for attached switch
135 String switchMacAddr = "00:00:00:00:00:00:0a:01";
136 long switchMacAddrL = HexString.toLong(switchMacAddr);
137 // Port number for attached switch
138 short portNum = 2;
139 SwitchPort sp1 = new SwitchPort(switchMacAddrL, portNum);
140 SwitchPort[] sps = {sp1};
141
142 expect(mockDev.getMACAddressString()).andReturn(macAddr).anyTimes();
143 expect(mockDev.getIPv4Addresses()).andReturn(ipaddrs).anyTimes();
144 expect(mockDev.getAttachmentPoints()).andReturn(sps).anyTimes();
145 replay(mockDev);
146
147 //Mock IPortObject 1 with dpid "00:00:00:00:00:00:0a:01" and port "1"
148 IPortObject mockIPort = createMock(IPortObject.class);
149 mockIPort.setNumber(portNum);
150 mockIPort.setType("port");
151 String iPortDesc = "port 1 at SEA Switch";
152 expect(mockIPort.getNumber()).andReturn(portNum).anyTimes();
153 expect(mockIPort.getDesc()).andReturn(iPortDesc).anyTimes();
154 replay(mockIPort);
155
156 //Make Iterator for mockIport
157 List<IPortObject> portList = new ArrayList<IPortObject>();
158 portList.add(mockIPort);
159
160 //Expectation for mockIDeviceObject
161 IDeviceObject mockIDev = createMock(IDeviceObject.class);
162 expect(mockIDev.getAttachedPorts()).andReturn(portList);
163 mockIDev.setIPAddress(makeIPStringFromArray(ipaddrs));
164 mockIDev.setMACAddress(macAddr);
165 mockIDev.setType("device");
166 mockIDev.setState("ACTIVE");
167 replay(mockIDev);
168
169 //Expectation for mockOpe
170 expect(mockOpe.searchDevice(macAddr)).andReturn(null);
171 expect(mockOpe.newDevice()).andReturn(mockIDev);
172 expect(mockOpe.searchPort(switchMacAddr, portNum)).andReturn(mockIPort);
173 mockOpe.commit();
174 replay(mockOpe);
175
176 deviceImpl.init(conf);
177
178 //Add the device
179 IDeviceObject obj = deviceImpl.addDevice(mockDev);
180 assertNotNull(obj);
181
182 } catch(Exception e) {
183 fail(e.getMessage());
184 }
185 }
186
187 /**
188 * Desc:
189 * Test method for addDevice method.
190 * Condition:
191 * Already added device is existed.
192 * Expect:
193 * Get proper IDeviceObject still.
194 * Check the IDeviceObject properties set.
195 */
196 //@Ignore
197 @Test
198 public void testAddDeviceExisting() {
199 try
200 {
201 IDevice mockDev = createMock(Device.class);
202 String macAddr = "99:99:99:99:99:99";
203 String ip = "192.168.100.1";
204 Integer[] ipaddrs = {IPv4.toIPv4Address(ip)};
205 String switchMacAddr = "00:00:00:00:00:00:0a:01";
206 long switchMacAddrL = HexString.toLong(switchMacAddr);
207 short portNum = 2;
208 SwitchPort sp1 = new SwitchPort(switchMacAddrL, portNum);
209 SwitchPort[] sps = {sp1};
210
211 expect(mockDev.getMACAddressString()).andReturn(macAddr).anyTimes();
212 expect(mockDev.getIPv4Addresses()).andReturn(ipaddrs).times(2);
213 expect(mockDev.getAttachmentPoints()).andReturn(sps).times(2);
214 replay(mockDev);
215
216 //Mock IPortObject 1 with dpid "00:00:00:00:00:00:0a:01" and port "1"
217 IPortObject mockIPort = createMock(IPortObject.class);
218 mockIPort.setNumber(portNum);
219 mockIPort.setType("port");
220 String iPortDesc = "port 1 at SEA Switch";
221 expect(mockIPort.getNumber()).andReturn(portNum).anyTimes();
222 expect(mockIPort.getDesc()).andReturn(iPortDesc).anyTimes();
223 replay(mockIPort);
224
225 //Make Iterator for mockIport
226 List<IPortObject> portList = new ArrayList<IPortObject>();
227 portList.add(mockIPort);
228
229 //Expectation for mockIDeviceObject
230 IDeviceObject mockIDev = createMock(IDeviceObject.class);
231 expect(mockIDev.getAttachedPorts()).andReturn(portList).anyTimes();
232 mockIDev.setIPAddress(makeIPStringFromArray(ipaddrs));
233 mockIDev.setMACAddress(macAddr);
234 mockIDev.setType("device");
235 mockIDev.setState("ACTIVE");
236 mockIDev.setIPAddress(makeIPStringFromArray(ipaddrs));
237 mockIDev.setMACAddress(macAddr);
238 mockIDev.setType("device");
239 mockIDev.setState("ACTIVE");
240 replay(mockIDev);
241
242 //Expectation for mockOpe
243 expect(mockOpe.searchDevice(macAddr)).andReturn(null);
244 expect(mockOpe.newDevice()).andReturn(mockIDev);
245 expect(mockOpe.searchPort(switchMacAddr, portNum)).andReturn(mockIPort);
246 mockOpe.commit();
247 expect(mockOpe.searchDevice(macAddr)).andReturn(mockIDev);
248 expect(mockOpe.searchPort(switchMacAddr, portNum)).andReturn(mockIPort);
249 mockOpe.commit();
250 replay(mockOpe);
251
252 deviceImpl.init(conf);
253
254 //Add the device
255 IDeviceObject obj = deviceImpl.addDevice(mockDev);
256 assertNotNull(obj);
257
258 //Add the same device
259 IDeviceObject obj2 = deviceImpl.addDevice(mockDev);
260 assertNotNull(obj2);
261
262 } catch(Exception e) {
263 fail(e.getMessage());
264 }
265 }
266
267 /**
268 * Desc:
269 * Test method for updateDevice method.
270 * Condition:
271 * The mac address and attachment point are the same.
272 * All of the other parameter are different.
273 * Expect:
274 * Changed parameters are set properly.
275 */
276 //@Ignore
277 @Test
278 public void testUpdateDevice() {
279 try
280 {
281 IDevice mockDev = createMock(Device.class);
282 String macAddr = "99:99:99:99:99:99";
283 String ip = "192.168.100.1";
284 Integer ipInt = IPv4.toIPv4Address(ip);
285 Integer[] ipaddrs = {ipInt};
286 String switchMacAddr = "00:00:00:00:00:00:0a:01";
287 long switchMacAddrL = HexString.toLong(switchMacAddr);
288 short portNum = 2;
289 SwitchPort sp1 = new SwitchPort(switchMacAddrL, portNum);
290 SwitchPort[] sps = {sp1};
291
292 expect(mockDev.getMACAddressString()).andReturn(macAddr).anyTimes();
293 expect(mockDev.getIPv4Addresses()).andReturn(ipaddrs);
294 expect(mockDev.getAttachmentPoints()).andReturn(sps);
295 replay(mockDev);
296
297 //Dev2 (attached port is the same)
298 IDevice mockDev2 = createMock(Device.class);
299 String ip2 = "192.168.100.2";
300 Integer ipInt2 = IPv4.toIPv4Address(ip2);
301 Integer[] ipaddrs2 = {ipInt2};
302
303 expect(mockDev2.getMACAddressString()).andReturn(macAddr).anyTimes();
304 expect(mockDev2.getIPv4Addresses()).andReturn(ipaddrs2);
305 expect(mockDev2.getAttachmentPoints()).andReturn(sps);
306 replay(mockDev2);
307
308 //Mock IPortObject 1 with dpid "00:00:00:00:00:00:0a:01" and port "1"
309 IPortObject mockIPort = createMock(IPortObject.class);
310 mockIPort.setNumber(portNum);
311 mockIPort.setType("port");
312 String iPortDesc = "port 1 at SEA Switch";
313 expect(mockIPort.getNumber()).andReturn(portNum).anyTimes();
314 expect(mockIPort.getDesc()).andReturn(iPortDesc).anyTimes();
315 replay(mockIPort);
316
317 //Make Iterator for mockIport
318 List<IPortObject> portList = new ArrayList<IPortObject>();
319 portList.add(mockIPort);
320
321 //Expectation for mockIDeviceObject
322 IDeviceObject mockIDev = createMock(IDeviceObject.class);
323 expect(mockIDev.getAttachedPorts()).andReturn(portList).anyTimes();
324 mockIDev.setIPAddress(makeIPStringFromArray(ipaddrs));
325 mockIDev.setMACAddress(macAddr);
326 mockIDev.setType("device");
327 mockIDev.setState("ACTIVE");
328 mockIDev.setIPAddress(makeIPStringFromArray(ipaddrs2));
329 mockIDev.setMACAddress(macAddr);
330 mockIDev.setType("device");
331 mockIDev.setState("ACTIVE");
332 replay(mockIDev);
333
334 //Expectation for mockOpe
335 expect(mockOpe.searchDevice(macAddr)).andReturn(null);
336 expect(mockOpe.newDevice()).andReturn(mockIDev);
337 expect(mockOpe.searchPort(switchMacAddr, portNum)).andReturn(mockIPort);
338 mockOpe.commit();
339 expect(mockOpe.searchDevice(macAddr)).andReturn(mockIDev);
340 expect(mockOpe.searchPort(switchMacAddr, portNum)).andReturn(mockIPort);
341 mockOpe.commit();
342 replay(mockOpe);
343
344 deviceImpl.init(conf);
345
346 IDeviceObject obj = deviceImpl.addDevice(mockDev);
347 assertNotNull(obj);
348
349 //update theDevice
350 IDeviceObject obj2 = deviceImpl.updateDevice(mockDev2);
351 assertNotNull(obj2);
352
353 } catch(Exception e) {
354 fail(e.getMessage());
355 }
356 }
357
358 /**
359 * Desc:
360 * Test method for testRemoveDevice method.
361 * Condition:
362 * 1. Unregistered IDeviceObject argument is put.
363 * Expect:
364 * 1. Nothing happen when unregistered IDeviceObject is put
365 * 2. IDeviceObject will be removed.
366 */
367 //@Ignore
368 @Test
369 public void testRemoveDevice() {
370 try
371 {
372 IDevice mockDev = createMock(Device.class);
373 String macAddr = "99:99:99:99:99:99";
374 String ip = "192.168.100.1";
375 Integer ipInt = IPv4.toIPv4Address(ip);
376 Integer[] ipaddrs = {ipInt};
377 String switchMacAddr = "00:00:00:00:00:00:0a:01";
378 long switchMacAddrL = HexString.toLong(switchMacAddr);
379 short portNum = 2;
380 SwitchPort sp1 = new SwitchPort(switchMacAddrL, portNum);
381 SwitchPort[] sps = {sp1};
382
383 expect(mockDev.getMACAddressString()).andReturn(macAddr);
384 expect(mockDev.getAttachmentPoints()).andReturn(sps);
385 expect(mockDev.getMACAddressString()).andReturn(macAddr);
386 expect(mockDev.getIPv4Addresses()).andReturn(ipaddrs);
387 expect(mockDev.getMACAddressString()).andReturn(macAddr);
388 expect(mockDev.getMACAddressString()).andReturn(macAddr);
389
390 expect(mockDev.getMACAddressString()).andReturn(macAddr);
391 expect(mockDev.getMACAddressString()).andReturn(macAddr);
392 expect(mockDev.getMACAddressString()).andReturn(macAddr);
393 replay(mockDev);
394
395 //Dev2 (attached port is the same)
396 IDevice mockDev2 = createMock(Device.class);
397 String macAddr2 = "33:33:33:33:33:33";
398 expect(mockDev2.getMACAddressString()).andReturn(macAddr2);
399 expect(mockDev2.getMACAddressString()).andReturn(macAddr2);
400 expect(mockDev2.getMACAddressString()).andReturn(macAddr2);
401 expect(mockDev2.getMACAddressString()).andReturn(macAddr2);
402 expect(mockDev2.getIPv4Addresses()).andReturn(ipaddrs);
403 expect(mockDev2.getAttachmentPoints()).andReturn(sps);
404 expect(mockDev2.getMACAddressString()).andReturn(macAddr2);
405 expect(mockDev2.getMACAddressString()).andReturn(macAddr2);
406 replay(mockDev2);
407
408 //Mock IPortObject 1 with dpid "00:00:00:00:00:00:0a:01" and port "1"
409 IPortObject mockIPort = createMock(IPortObject.class);
410 mockIPort.setNumber(portNum);
411 mockIPort.setType("port");
412 String iPortDesc = "port 1 at SEA Switch";
413 expect(mockIPort.getNumber()).andReturn(portNum).anyTimes();
414 expect(mockIPort.getDesc()).andReturn(iPortDesc).anyTimes();
415 replay(mockIPort);
416
417 //Make Iterator for mockIport
418 List<IPortObject> portList = new ArrayList<IPortObject>();
419 portList.add(mockIPort);
420
421 //Expectation for mockIDeviceObject
422 IDeviceObject mockIDev = createMock(IDeviceObject.class);
423 expect(mockIDev.getAttachedPorts()).andReturn(portList);
424 mockIDev.setIPAddress(makeIPStringFromArray(ipaddrs));
425 mockIDev.setMACAddress(macAddr);
426 mockIDev.setType("device");
427 mockIDev.setState("ACTIVE");
428 replay(mockIDev);
429
430 //Expectation for mockOpe
431 expect(mockOpe.searchDevice(macAddr)).andReturn(null);
432 expect(mockOpe.newDevice()).andReturn(mockIDev);
433 expect(mockOpe.searchPort(switchMacAddr, portNum)).andReturn(mockIPort);
434 mockOpe.commit();
435 expect(mockOpe.searchDevice(macAddr2)).andReturn(null);
436 expect(mockOpe.searchDevice(macAddr)).andReturn(mockIDev);
437 expect(mockOpe.searchDevice(macAddr)).andReturn(mockIDev);
438 mockOpe.removeDevice(mockIDev);
439 mockOpe.commit();
440 expect(mockOpe.searchDevice(macAddr)).andReturn(null);
441 replay(mockOpe);
442
443 deviceImpl.init(conf);
444
445 IDeviceObject obj = deviceImpl.addDevice(mockDev);
446 assertNotNull(obj);
447
448 deviceImpl.removeDevice(mockDev2);
449 IDeviceObject dev = deviceImpl.getDeviceByMac(macAddr);
450 assertNotNull(dev);
451
452 deviceImpl.removeDevice(mockDev);
453 IDeviceObject dev2 = deviceImpl.getDeviceByMac(macAddr);
454 assertNull(dev2);
455
456 } catch(Exception e) {
457 fail(e.getMessage());
458 }
459 }
460
461 /**
462 * Desc:
463 * Test method for getDeviceByMac
464 * Condition:
465 * 1. Unregistered mac address argument is set
466 * Expect:
467 * 1.Nothing happen when you put unregistered mac address
468 * 2.Get the proper IDeviceObject.
469 * 3.Check the IDeviceObject properties set.
470 */
471 //@Ignore
472 @Test
473 public void testGetDeviceByMac() {
474 try
475 {
476 IDevice mockDev = createMock(Device.class);
477 String macAddr = "99:99:99:99:99:99";
478 String ip = "192.168.100.1";
479 Integer ipInt = IPv4.toIPv4Address(ip);
480 Integer[] ipaddrs = {ipInt};
481 String switchMacAddr = "00:00:00:00:00:00:0a:01";
482 long switchMacAddrL = HexString.toLong(switchMacAddr);
483 short portNum = 2;
484 SwitchPort sp1 = new SwitchPort(switchMacAddrL, portNum);
485 SwitchPort[] sps = {sp1};
486
487 String dummyMac = "33:33:33:33:33:33";
488
489 expect(mockDev.getMACAddressString()).andReturn(macAddr);
490 expect(mockDev.getMACAddressString()).andReturn(macAddr);
491 expect(mockDev.getMACAddressString()).andReturn(macAddr);
492 expect(mockDev.getMACAddressString()).andReturn(macAddr);
493 expect(mockDev.getIPv4Addresses()).andReturn(ipaddrs);
494 expect(mockDev.getAttachmentPoints()).andReturn(sps);
495 expect(mockDev.getMACAddressString()).andReturn(macAddr);
496 expect(mockDev.getMACAddressString()).andReturn(macAddr);
497 replay(mockDev);
498
499 //Mock IPortObject 1 with dpid "00:00:00:00:00:00:0a:01" and port "1"
500 IPortObject mockIPort = createMock(IPortObject.class);
501 mockIPort.setNumber(portNum);
502 mockIPort.setType("port");
503 String iPortDesc = "port 1 at SEA Switch";
504 expect(mockIPort.getNumber()).andReturn(portNum).anyTimes();
505 expect(mockIPort.getDesc()).andReturn(iPortDesc).anyTimes();
506 replay(mockIPort);
507
508 //Make Iterator for mockIport
509 List<IPortObject> portList = new ArrayList<IPortObject>();
510 portList.add(mockIPort);
511
512 //Expectation for mockIDeviceObject
513 IDeviceObject mockIDev = createMock(IDeviceObject.class);
514 expect(mockIDev.getAttachedPorts()).andReturn(portList);
515 mockIDev.setIPAddress(makeIPStringFromArray(ipaddrs));
516 mockIDev.setMACAddress(macAddr);
517 mockIDev.setType("device");
518 mockIDev.setState("ACTIVE");
519 replay(mockIDev);
520
521 //Expectation for mockOpe
522 expect(mockOpe.searchDevice(macAddr)).andReturn(null);
523 expect(mockOpe.newDevice()).andReturn(mockIDev);
524 expect(mockOpe.searchPort(switchMacAddr, portNum)).andReturn(mockIPort);
525 mockOpe.commit();
526 expect(mockOpe.searchDevice(dummyMac)).andReturn(null);
527 expect(mockOpe.searchDevice(macAddr)).andReturn(mockIDev);
528 replay(mockOpe);
529
530 deviceImpl.init(conf);
531
532 IDeviceObject obj = deviceImpl.addDevice(mockDev);
533 assertNotNull(obj);
534
535 IDeviceObject dummyDev = deviceImpl.getDeviceByMac(dummyMac);
536 assertNull(dummyDev);
537
538 IDeviceObject dev = deviceImpl.getDeviceByMac(macAddr);
539 assertNotNull(dev);
540
541 } catch(Exception e) {
542 fail(e.getMessage());
543 }
544 }
545
546 /**
547 * Desc:
548 * Test method for getDeviceByIP method.
549 * Condition:
550 * 1. Unregistered ip address argument is set
551 * Expect:
552 * 1. Nothing happen when you put unregistered mac address
553 * 2. Get the proper IDeviceObject.
554 * 3. Check the IDeviceObject properties set.
555 */
556 //@Ignore
557 @Test
558 public void testGetDeviceByIP() {
559 try
560 {
561 IDevice mockDev = createMock(Device.class);
562 String macAddr = "99:99:99:99:99:99";
563 String ip = "192.168.100.1";
564 Integer ipInt = IPv4.toIPv4Address(ip);
565 Integer[] ipaddrs = {ipInt};
566 String switchMacAddr = "00:00:00:00:00:00:0a:01";
567 long switchMacAddrL = HexString.toLong(switchMacAddr);
568 short portNum = 2;
569 SwitchPort sp1 = new SwitchPort(switchMacAddrL, portNum);
570 SwitchPort[] sps = {sp1};
571
572 String dummyIP = "222.222.222.222";
573
574 expect(mockDev.getMACAddressString()).andReturn(macAddr);
575 expect(mockDev.getMACAddressString()).andReturn(macAddr);
576 expect(mockDev.getMACAddressString()).andReturn(macAddr);
577 expect(mockDev.getMACAddressString()).andReturn(macAddr);
578 expect(mockDev.getIPv4Addresses()).andReturn(ipaddrs);
579 expect(mockDev.getAttachmentPoints()).andReturn(sps);
580 expect(mockDev.getMACAddressString()).andReturn(macAddr);
581 expect(mockDev.getMACAddressString()).andReturn(macAddr);
582 replay(mockDev);
583
584 //Mock IPortObject 1 with dpid "00:00:00:00:00:00:0a:01" and port "1"
585 IPortObject mockIPort = createMock(IPortObject.class);
586 mockIPort.setNumber(portNum);
587 mockIPort.setType("port");
588 String iPortDesc = "port 1 at SEA Switch";
589 expect(mockIPort.getNumber()).andReturn(portNum).anyTimes();
590 expect(mockIPort.getDesc()).andReturn(iPortDesc).anyTimes();
591 replay(mockIPort);
592
593 //Make Iterator for mockIport
594 List<IPortObject> portList = new ArrayList<IPortObject>();
595 portList.add(mockIPort);
596
597 //Expectation for mockIDeviceObject
598 IDeviceObject mockIDev = createMock(IDeviceObject.class);
599 expect(mockIDev.getAttachedPorts()).andReturn(portList);
600 expect(mockIDev.getIPAddress()).andReturn(ip).times(2);
601 mockIDev.setIPAddress(makeIPStringFromArray(ipaddrs));
602 mockIDev.setMACAddress(macAddr);
603 mockIDev.setType("device");
604 mockIDev.setState("ACTIVE");
605 replay(mockIDev);
606
607
608 //Make mock Iterator for IDeviceObject
609 List<IDeviceObject> deviceList = new ArrayList<IDeviceObject>();
610 deviceList.add(mockIDev);
611
612 //Expectation for mockOpe
613 expect(mockOpe.searchDevice(macAddr)).andReturn(null);
614 expect(mockOpe.newDevice()).andReturn(mockIDev);
615 expect(mockOpe.searchPort(switchMacAddr, portNum)).andReturn(mockIPort);
616 mockOpe.commit();
617 expect(mockOpe.getDevices()).andReturn(deviceList).times(2);
618 replay(mockOpe);
619
620
621
622 deviceImpl.init(conf);
623
624 IDeviceObject obj = deviceImpl.addDevice(mockDev);
625 assertNotNull(obj);
626
627 IDeviceObject dummyDev = deviceImpl.getDeviceByIP(dummyIP);
628 assertNull(dummyDev);
629
630 IDeviceObject dev = deviceImpl.getDeviceByIP(ip);
631 assertNotNull(dev);
632
633 } catch(Exception e) {
634 fail(e.getMessage());
635 }
636 }
637
638 /**
639 * Desc:
640 * Test method for testChangeDeviceAttachmentsIDevice
641 * Condition:
642 * 1. Unexisting attachment point argument is set
643 * Expect:
644 * 1. Nothing happen when you put unexisting attachment point.
645 * 2. Change the attachment point.
646 */
647 //@Ignore
648 @Test
649 public void testChangeDeviceAttachmentsIDevice() {
650 try
651 {
652 IDevice mockDev = createMock(Device.class);
653 String macAddr = "99:99:99:99:99:99";
654 String ip = "192.168.100.1";
655 Integer ipInt = IPv4.toIPv4Address(ip);
656 Integer[] ipaddrs = {ipInt};
657 String switchMacAddr = "00:00:00:00:00:00:0a:01";
658 long switchMacAddrL = HexString.toLong(switchMacAddr);
659 short portNum = 2;
660 SwitchPort sp1 = new SwitchPort(switchMacAddrL, portNum);
661 SwitchPort[] sps = {sp1};
662
663 expect(mockDev.getMACAddressString()).andReturn(macAddr);
664 expect(mockDev.getMACAddressString()).andReturn(macAddr);
665 expect(mockDev.getMACAddressString()).andReturn(macAddr);
666 expect(mockDev.getMACAddressString()).andReturn(macAddr);
667 expect(mockDev.getIPv4Addresses()).andReturn(ipaddrs);
668 expect(mockDev.getAttachmentPoints()).andReturn(sps);
669 expect(mockDev.getMACAddressString()).andReturn(macAddr);
670 expect(mockDev.getMACAddressString()).andReturn(macAddr);
671 replay(mockDev);
672
673 //Dev2
674 IDevice mockDev2 = createMock(Device.class);
675 String switchMacAddr2 = "00:00:00:00:00:00:0a:02";
676 long lSwitchMacAddr2 = HexString.toLong(switchMacAddr2);
677 short portNum2 = 2;
678 SwitchPort sp2 = new SwitchPort(lSwitchMacAddr2, portNum2);
679 SwitchPort sps2[] = {sp2};
680
681 expect(mockDev2.getMACAddressString()).andReturn(macAddr);
682 expect(mockDev2.getMACAddressString()).andReturn(macAddr);
683 expect(mockDev2.getMACAddressString()).andReturn(macAddr);
684 expect(mockDev2.getMACAddressString()).andReturn(macAddr);
685 expect(mockDev2.getIPv4Addresses()).andReturn(ipaddrs);
686 expect(mockDev2.getAttachmentPoints()).andReturn(sps2);
687 expect(mockDev2.getMACAddressString()).andReturn(macAddr);
688 expect(mockDev2.getMACAddressString()).andReturn(macAddr);
689 replay(mockDev2);
690
691 //Dev3
692 IDevice mockDev3 = createMock(Device.class);
693 String switchMacAddr3 = "00:00:00:00:00:00:00:00";
694 long lSwitchMacAddr3 = HexString.toLong(switchMacAddr3);
695 short portNum3 = 1;
696 SwitchPort sp3 = new SwitchPort(lSwitchMacAddr3, portNum3);
697 SwitchPort sps3[] = {sp3};
698
699 expect(mockDev3.getMACAddressString()).andReturn(macAddr);
700 expect(mockDev3.getMACAddressString()).andReturn(macAddr);
701 expect(mockDev3.getMACAddressString()).andReturn(macAddr);
702 expect(mockDev3.getMACAddressString()).andReturn(macAddr);
703 expect(mockDev3.getIPv4Addresses()).andReturn(ipaddrs);
704 expect(mockDev3.getAttachmentPoints()).andReturn(sps3);
705 expect(mockDev3.getMACAddressString()).andReturn(macAddr);
706 expect(mockDev3.getMACAddressString()).andReturn(macAddr);
707 replay(mockDev3);
708
709 IDeviceObject mockIDev = createMock(IDeviceObject.class);
710
711 //Mock IPortObject 1 with dpid "00:00:00:00:00:00:0a:01" and port "1"
712 IPortObject mockIPort = createMock(IPortObject.class);
713 mockIPort.setNumber(portNum);
714 mockIPort.setType("port");
715 String iPortDesc = "port 1 at SEA Switch";
716 expect(mockIPort.getNumber()).andReturn(portNum).anyTimes();
717 expect(mockIPort.getDesc()).andReturn(iPortDesc).anyTimes();
718 mockIPort.removeDevice(mockIDev);
719 mockIPort.removeDevice(mockIDev);
720 replay(mockIPort);
721
722 //Make Iterator for mockIport
723 List<IPortObject> portList = new ArrayList<IPortObject>();
724 portList.add(mockIPort);
725
726 //Expectation for mockIDeviceObject
727 expect(mockIDev.getAttachedPorts()).andReturn(portList).anyTimes();
728 mockIDev.setIPAddress(makeIPStringFromArray(ipaddrs));
729 mockIDev.setMACAddress(macAddr);
730 mockIDev.setType("device");
731 mockIDev.setState("ACTIVE");
732 replay(mockIDev);
733
734 //Mock IPortObject 2 with dpid "00:00:00:00:00:00:0a:02" and port "2"
735 IPortObject mockIPort2 = createMock(IPortObject.class);
736 mockIPort2.setNumber(portNum2);
737 mockIPort2.setType("port");
738 String iPortDesc2 = "port 2 at LAX Switch";
739 expect(mockIPort2.getNumber()).andReturn(portNum2).anyTimes();
740 expect(mockIPort2.getDesc()).andReturn(iPortDesc2).anyTimes();
741 mockIPort2.setDevice(mockIDev);
742 replay(mockIPort2);
743
744 //Make Iterator for mockIport
745 List<IPortObject> portList2 = new ArrayList<IPortObject>();
746 portList2.add(mockIPort2);
747
748 //Mock IPortObject 3 with dpid "00:00:00:00:00:00:00:00" and port "1"
749 IPortObject mockIPort3 = createMock(IPortObject.class);
750 mockIPort3.setNumber(portNum3);
751 mockIPort3.setType("port");
752 String iPortDesc3 = "n/a";
753 expect(mockIPort3.getNumber()).andReturn(portNum3).anyTimes();
754 expect(mockIPort3.getDesc()).andReturn(iPortDesc3).anyTimes();
755 mockIPort3.setDevice(mockIDev);
756 replay(mockIPort3);
757
758 //Expectation for mockOpe
759 expect(mockOpe.searchDevice(macAddr)).andReturn(null);
760 expect(mockOpe.newDevice()).andReturn(mockIDev);
761 expect(mockOpe.searchPort(switchMacAddr, portNum)).andReturn(mockIPort);
762 mockOpe.commit();
763 expect(mockOpe.searchDevice(macAddr)).andReturn(mockIDev);
764 expect(mockOpe.searchPort(switchMacAddr2, portNum2)).andReturn(mockIPort2);
765 mockOpe.commit();
766 expect(mockOpe.searchDevice(macAddr)).andReturn(mockIDev);
767 expect(mockOpe.searchPort(switchMacAddr3, portNum3)).andReturn(null);
768 mockOpe.commit();
769 replay(mockOpe);
770
771 deviceImpl.init(conf);
772
773 IDeviceObject obj = deviceImpl.addDevice(mockDev);
774 assertNotNull(obj);
775
776 deviceImpl.changeDeviceAttachments(mockDev2);
777
778 deviceImpl.changeDeviceAttachments(mockDev3);
779
780 } catch(Exception e) {
781 fail(e.getMessage());
782 }
783 }
784
785 //@Ignore
786 @Test
787 public void testChangeDeviceAttachmentsIDeviceIDeviceObject() {
788 //It is tested by the testChangeDeviceAttachmentsIDevice
789 deviceImpl.init(conf);
790 }
791
792 /**
793 * Desc:
794 * Test method for testChangeDeviceIPv4Address
795 * Condition:
796 * N/A
797 * Expect:
798 * 1. Check correctly changed the ipadress
799 */
800 //@Ignore
801 @Test
802 public void testChangeDeviceIPv4Address() {
803 try
804 {
805 //Dev1
806 IDevice mockDev = createMock(Device.class);
807 String macAddr = "99:99:99:99:99:99";
808 String ip = "192.168.100.1";
809 Integer ipInt = IPv4.toIPv4Address(ip);
810 Integer[] ipaddrs = {ipInt};
811 String switchMacAddr = "00:00:00:00:00:00:0a:01";
812 long switchMacAddrL = HexString.toLong(switchMacAddr);
813 short portNum = 2;
814 SwitchPort sp1 = new SwitchPort(switchMacAddrL, portNum);
815 SwitchPort[] sps = {sp1};
816
817 expect(mockDev.getMACAddressString()).andReturn(macAddr);
818 expect(mockDev.getMACAddressString()).andReturn(macAddr);
819 expect(mockDev.getMACAddressString()).andReturn(macAddr);
820 expect(mockDev.getMACAddressString()).andReturn(macAddr);
821 expect(mockDev.getIPv4Addresses()).andReturn(ipaddrs);
822 expect(mockDev.getAttachmentPoints()).andReturn(sps);
823 expect(mockDev.getMACAddressString()).andReturn(macAddr);
824 expect(mockDev.getMACAddressString()).andReturn(macAddr);
825 replay(mockDev);
826
827 //Dev2
828 IDevice mockDev2 = createMock(Device.class);
829 String ip2 = "192.168.100.2";
830 Integer ipInt2 = IPv4.toIPv4Address(ip2);
831 Integer[] ipaddrs2 = {ipInt2};
832 expect(mockDev2.getMACAddressString()).andReturn(macAddr);
833 expect(mockDev2.getIPv4Addresses()).andReturn(ipaddrs2);
834 replay(mockDev2);
835
836 //Mock IPortObject 1 with dpid "00:00:00:00:00:00:0a:01" and port "1"
837 IPortObject mockIPort = createMock(IPortObject.class);
838 mockIPort.setNumber(portNum);
839 mockIPort.setType("port");
840 String iPortDesc = "port 1 at SEA Switch";
841 expect(mockIPort.getNumber()).andReturn(portNum).anyTimes();
842 expect(mockIPort.getDesc()).andReturn(iPortDesc).anyTimes();
843 replay(mockIPort);
844
845 //Make Iterator for mockIport
846 List<IPortObject> portList = new ArrayList<IPortObject>();
847 portList.add(mockIPort);
848
849 //Expectation for mockIDeviceObject
850 IDeviceObject mockIDev = createMock(IDeviceObject.class);
851 expect(mockIDev.getAttachedPorts()).andReturn(portList);
852 mockIDev.setIPAddress(makeIPStringFromArray(ipaddrs));
853 mockIDev.setMACAddress(macAddr);
854 mockIDev.setType("device");
855 mockIDev.setState("ACTIVE");
856 mockIDev.setIPAddress(makeIPStringFromArray(ipaddrs2));
857 replay(mockIDev);
858
859 //Expectation for mockOpe
860 expect(mockOpe.searchDevice(macAddr)).andReturn(null);
861 expect(mockOpe.newDevice()).andReturn(mockIDev);
862 expect(mockOpe.searchPort(switchMacAddr, portNum)).andReturn(mockIPort);
863 mockOpe.commit();
864 expect(mockOpe.searchDevice(macAddr)).andReturn(mockIDev);
865 mockOpe.commit();
866 replay(mockOpe);
867
868 deviceImpl.init(conf);
869
870 IDeviceObject obj = deviceImpl.addDevice(mockDev);
871 assertNotNull(obj);
872
873 deviceImpl.changeDeviceIPv4Address(mockDev2);
874
875 }
876 catch(Exception e) {
877 fail(e.getMessage());
878 }
879 }
880
881}