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