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