blob: 5f2209127d3b9cd0494d232407fa240f7fd1b13f [file] [log] [blame]
Jonathan Hart03102132014-07-01 23:22:04 -07001package net.onrc.onos.core.hostmanager;
Patrick Liuab1e6062014-05-05 11:12:13 -07002
3import static org.easymock.EasyMock.anyObject;
4import static org.easymock.EasyMock.createMock;
5import static org.easymock.EasyMock.createNiceMock;
6import static org.easymock.EasyMock.eq;
7import static org.easymock.EasyMock.expect;
8import static org.easymock.EasyMock.expectLastCall;
9import static org.easymock.EasyMock.replay;
Patrick Liuab1e6062014-05-05 11:12:13 -070010
11import java.util.Date;
12
13import net.floodlightcontroller.core.IFloodlightProviderService;
14import net.floodlightcontroller.core.IListener.Command;
15import net.floodlightcontroller.core.IOFSwitch;
16import net.floodlightcontroller.core.IUpdate;
17import net.floodlightcontroller.core.module.FloodlightModuleContext;
TeruU5d2c9392014-06-09 20:02:02 -070018import net.floodlightcontroller.core.module.FloodlightModuleException;
Patrick Liuab1e6062014-05-05 11:12:13 -070019import net.floodlightcontroller.test.FloodlightTestCase;
20import net.floodlightcontroller.util.MACAddress;
21import net.onrc.onos.core.datagrid.IDatagridService;
22import net.onrc.onos.core.datagrid.IEventChannel;
23import net.onrc.onos.core.datagrid.IEventChannelListener;
Patrick Liuab1e6062014-05-05 11:12:13 -070024import net.onrc.onos.core.packet.ARP;
25import net.onrc.onos.core.packet.DHCP;
26import net.onrc.onos.core.packet.Data;
27import net.onrc.onos.core.packet.Ethernet;
28import net.onrc.onos.core.packet.IPacket;
29import net.onrc.onos.core.packet.IPv4;
30import net.onrc.onos.core.packet.UDP;
31import net.onrc.onos.core.registry.IControllerRegistryService;
32import net.onrc.onos.core.topology.ITopologyListener;
33import net.onrc.onos.core.topology.ITopologyService;
TeruU5d2c9392014-06-09 20:02:02 -070034import net.onrc.onos.core.topology.MockTopology;
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -070035import net.onrc.onos.core.util.Dpid;
36import net.onrc.onos.core.util.PortNumber;
Patrick Liuab1e6062014-05-05 11:12:13 -070037
38import org.easymock.EasyMock;
39import org.junit.After;
40import org.junit.Before;
41import org.junit.Test;
42import org.openflow.protocol.OFPacketIn;
43import org.openflow.protocol.OFType;
44
45/**
Jonathan Hart03102132014-07-01 23:22:04 -070046 * Unit tests for the Host Manager module (HostManger).
47 * These test cases check the result of add/delete host and
48 * verify the result of processPacketIn by injecting fake packets.
49 * floodlightProvider, datagridService, topologyService,
50 * controllerRegistryService, eventChannel are mocked out.
Patrick Liuab1e6062014-05-05 11:12:13 -070051 */
Jonathan Hart03102132014-07-01 23:22:04 -070052public class HostManagerTest extends FloodlightTestCase {
Patrick Liuab1e6062014-05-05 11:12:13 -070053 private IPacket pkt0, pkt1, pkt2, pkt3, pkt4;
54 private IOFSwitch sw1;
55 private long sw1Dpid;
TeruU5d2c9392014-06-09 20:02:02 -070056 private long sw1DevPort, sw1DevPort2;
Jonathan Hart03102132014-07-01 23:22:04 -070057 private HostManager hostManager;
TeruU5d2c9392014-06-09 20:02:02 -070058 private OFPacketIn pktIn, pktIn2;
Patrick Liuab1e6062014-05-05 11:12:13 -070059 private FloodlightModuleContext modContext;
60 private ITopologyService networkGraphService;
Jonathan Hart03102132014-07-01 23:22:04 -070061 private IEventChannel<Long, Host> eventChannel;
62 private IFloodlightProviderService floodlightProvider;
Patrick Liuab1e6062014-05-05 11:12:13 -070063 private Date lastSeenTimestamp;
64
65 @Override
66 @Before
Ray Milkeyff735142014-05-22 19:06:02 -070067 @SuppressWarnings("unchecked")
Patrick Liuab1e6062014-05-05 11:12:13 -070068 public void setUp() throws Exception {
69 super.setUp();
70 MockTopology topology = new MockTopology();
71 IDatagridService datagridService;
72 IControllerRegistryService controllerRegistryService;
73
TeruU5d2c9392014-06-09 20:02:02 -070074 topology.createSampleTopology2();
Patrick Liuab1e6062014-05-05 11:12:13 -070075 modContext = new FloodlightModuleContext();
76
Jonathan Hart03102132014-07-01 23:22:04 -070077 floodlightProvider = createMock(IFloodlightProviderService.class);
Patrick Liuab1e6062014-05-05 11:12:13 -070078 datagridService = createMock(IDatagridService.class);
79 networkGraphService = createMock(ITopologyService.class);
80 controllerRegistryService = createMock(IControllerRegistryService.class);
81 eventChannel = createMock(IEventChannel.class);
82 expect(networkGraphService.getTopology()).andReturn(topology).anyTimes();
83 networkGraphService.registerTopologyListener(anyObject(ITopologyListener.class));
84 expectLastCall();
85
Jonathan Hart03102132014-07-01 23:22:04 -070086 expect(datagridService.createChannel("onos.host", Long.class, Host.class))
Patrick Liuab1e6062014-05-05 11:12:13 -070087 .andReturn(eventChannel).once();
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -070088 expect(topology.getOutgoingLink(new Dpid(1L), new PortNumber((short) 100))).andReturn(null).anyTimes();
Patrick Liuab1e6062014-05-05 11:12:13 -070089 expect(datagridService.addListener(
Jonathan Hart03102132014-07-01 23:22:04 -070090 eq("onos.host"),
Patrick Liuab1e6062014-05-05 11:12:13 -070091 anyObject(IEventChannelListener.class),
92 eq(Long.class),
Jonathan Hart03102132014-07-01 23:22:04 -070093 eq(Host.class)))
Patrick Liuab1e6062014-05-05 11:12:13 -070094 .andReturn(eventChannel).once();
95
96 replay(datagridService);
97 replay(networkGraphService);
98 replay(controllerRegistryService);
99
Yuta HIGUCHI91a8f502014-06-17 10:15:29 -0700100 modContext.addService(IDatagridService.class, datagridService);
101 modContext.addService(ITopologyService.class, networkGraphService);
Jonathan Hart03102132014-07-01 23:22:04 -0700102 modContext.addService(IFloodlightProviderService.class, floodlightProvider);
Patrick Liuab1e6062014-05-05 11:12:13 -0700103 modContext.getServiceImpl(IFloodlightProviderService.class);
104 sw1Dpid = 1L;
105 sw1 = createMockSwitch(sw1Dpid);
106 replay(sw1);
107
108 sw1DevPort = 100;
TeruU5d2c9392014-06-09 20:02:02 -0700109 sw1DevPort2 = 12L;
Patrick Liuab1e6062014-05-05 11:12:13 -0700110
Jonathan Hart03102132014-07-01 23:22:04 -0700111 hostManager = new HostManager();
Patrick Liuab1e6062014-05-05 11:12:13 -0700112 /*
Jonathan Hart7ab71612014-05-27 13:37:31 -0700113 * Broadcast source address
Patrick Liuab1e6062014-05-05 11:12:13 -0700114 */
115 this.pkt0 = new Ethernet()
Jonathan Hart7ab71612014-05-27 13:37:31 -0700116 .setDestinationMACAddress("00:44:33:22:11:33")
117 .setSourceMACAddress("FF:FF:FF:FF:FF:FF")
Patrick Liuab1e6062014-05-05 11:12:13 -0700118 .setEtherType(Ethernet.TYPE_IPV4)
119 .setPayload(
120 new IPv4()
121 .setTtl((byte) 128)
122 .setSourceAddress("192.168.10.1")
123 .setDestinationAddress("192.168.255.255")
124 .setPayload(new UDP()
125 .setSourcePort((short) 5000)
126 .setDestinationPort((short) 5001)
127 .setPayload(new Data(new byte[]{0x01}))));
128 /*
129 * Normal IPv4 packet
130 */
131 this.pkt1 = new Ethernet()
132 .setDestinationMACAddress("00:11:22:33:44:55")
133 .setSourceMACAddress("00:44:33:22:11:00")
134 .setEtherType(Ethernet.TYPE_IPV4)
135 .setPayload(
136 new IPv4()
137 .setTtl((byte) 128)
138 .setSourceAddress("192.168.1.1")
139 .setDestinationAddress("192.168.1.2")
140 .setPayload(new UDP()
141 .setSourcePort((short) 5000)
142 .setDestinationPort((short) 5001)
143 .setPayload(new Data(new byte[]{0x01}))));
144 /*
145 * Same MAC header as pkt1,but not IP address set
146 */
147 this.pkt2 = new Ethernet()
148 .setSourceMACAddress("00:44:33:22:11:01")
149 .setDestinationMACAddress("00:11:22:33:44:55")
150 .setEtherType(Ethernet.TYPE_IPV4)
151 .setPayload(
152 new IPv4()
153 .setTtl((byte) 128)
154 .setPayload(new UDP()
155 .setSourcePort((short) 5000)
156 .setDestinationPort((short) 5001)
157 .setPayload(new Data(new byte[]{0x01}))));
158 /*
159 * DHCP packet
160 */
161 this.pkt3 = new Ethernet()
162 .setSourceMACAddress("00:44:33:22:11:01")
163 .setDestinationMACAddress("00:11:22:33:44:55")
164 .setEtherType(Ethernet.TYPE_IPV4)
165 .setPayload(
166 new IPv4()
167 .setTtl((byte) 128)
168 .setSourceAddress("192.168.1.1")
169 .setDestinationAddress("192.168.1.2")
170 .setPayload(new UDP()
171 .setSourcePort((short) 5000)
172 .setDestinationPort((short) 5001)
173 .setChecksum((short) 0)
174 .setPayload(
175 new DHCP()
176 .setOpCode(DHCP.OPCODE_REPLY)
177 .setHardwareType(DHCP.HWTYPE_ETHERNET)
178 .setHardwareAddressLength((byte) 6)
179 .setHops((byte) 0)
180 .setTransactionId(0x00003d1d)
181 .setSeconds((short) 0)
182 .setFlags((short) 0)
183 .setClientIPAddress(0)
184 .setYourIPAddress(0)
185 .setServerIPAddress(0)
186 .setGatewayIPAddress(0))));
187 /*
188 * ARP packet
189 */
190 this.pkt4 = new Ethernet()
191 .setSourceMACAddress("00:44:33:22:11:01")
192 .setDestinationMACAddress("00:11:22:33:44:55")
193 .setEtherType(Ethernet.TYPE_ARP)
194 .setPayload(
195 new ARP()
196 .setHardwareType(ARP.HW_TYPE_ETHERNET)
197 .setProtocolType(ARP.PROTO_TYPE_IP)
198 .setHardwareAddressLength((byte) 6)
199 .setProtocolAddressLength((byte) 4)
200 .setOpCode(ARP.OP_REPLY)
201 .setSenderHardwareAddress(Ethernet.toMACAddress("00:44:33:22:11:01"))
202 .setSenderProtocolAddress(IPv4.toIPv4AddressBytes("192.168.1.1"))
203 .setTargetHardwareAddress(Ethernet.toMACAddress("00:11:22:33:44:55"))
204 .setTargetProtocolAddress(IPv4.toIPv4AddressBytes("192.168.1.2")));
205
206
TeruU5d2c9392014-06-09 20:02:02 -0700207 this.pktIn = new OFPacketIn().setInPort((short) sw1DevPort);
208
209 this.pktIn2 = new OFPacketIn().setInPort((short) sw1DevPort2);
Patrick Liuab1e6062014-05-05 11:12:13 -0700210
211 lastSeenTimestamp = new Date(1);
Patrick Liuab1e6062014-05-05 11:12:13 -0700212 }
213
214 @Override
215 @After
216 public void tearDown() throws Exception {
217 }
218
219 public IOFSwitch createMockSwitch(Long id) {
220 IOFSwitch mockSwitch = createNiceMock(IOFSwitch.class);
221 expect(mockSwitch.getId()).andReturn(id).anyTimes();
222 return mockSwitch;
223 }
224
225 /**
Jonathan Hart03102132014-07-01 23:22:04 -0700226 * Test set operation on lastSeenTimstamp field in Host.
Patrick Liuab1e6062014-05-05 11:12:13 -0700227 */
228 @Test
229 public void testSetLastSeenTimestamp() {
Yuta HIGUCHI91a8f502014-06-17 10:15:29 -0700230 Ethernet eth = (Ethernet) pkt1;
Jonathan Hart03102132014-07-01 23:22:04 -0700231 Host srcHost = hostManager.getSourceHostFromPacket(eth, sw1Dpid, sw1DevPort);
Patrick Liuab1e6062014-05-05 11:12:13 -0700232
Jonathan Hart03102132014-07-01 23:22:04 -0700233 floodlightProvider.addOFMessageListener(EasyMock.eq(OFType.PACKET_IN), EasyMock.isA(HostManager.class));
234 srcHost.setLastSeenTimestamp(lastSeenTimestamp);
235 assertEquals(lastSeenTimestamp, srcHost.getLastSeenTimestamp());
Patrick Liuab1e6062014-05-05 11:12:13 -0700236 }
237 /**
Jonathan Hart03102132014-07-01 23:22:04 -0700238 * test the functionality to get the source host from Packet header
Patrick Liuab1e6062014-05-05 11:12:13 -0700239 * information.
240 */
241 @Test
Jonathan Hart03102132014-07-01 23:22:04 -0700242 public void testGetSourceHostFromPacket() {
Yuta HIGUCHI91a8f502014-06-17 10:15:29 -0700243 byte[] address = new byte[] {0x00, 0x44, 0x33, 0x22, 0x11, 0x01};
Patrick Liuab1e6062014-05-05 11:12:13 -0700244 MACAddress srcMac = new MACAddress(address);
Jonathan Hart03102132014-07-01 23:22:04 -0700245 Host host1 = new Host(srcMac,
Patrick Liuab1e6062014-05-05 11:12:13 -0700246 null,
Patrick Liuab1e6062014-05-05 11:12:13 -0700247 sw1Dpid,
248 sw1DevPort,
249 null);
250
251 /*
252 * test DHCP packet case
253 */
Yuta HIGUCHI91a8f502014-06-17 10:15:29 -0700254 Ethernet eth = (Ethernet) pkt3;
Jonathan Hart03102132014-07-01 23:22:04 -0700255 Host host2 = hostManager.getSourceHostFromPacket(eth, sw1Dpid, sw1DevPort);
256 assertEquals(host1, host2);
Patrick Liuab1e6062014-05-05 11:12:13 -0700257
258 /*
259 * test ARP packet case
260 */
Yuta HIGUCHI91a8f502014-06-17 10:15:29 -0700261 eth = (Ethernet) pkt4;
Jonathan Hart03102132014-07-01 23:22:04 -0700262 host2 = hostManager.getSourceHostFromPacket(eth, sw1Dpid, sw1DevPort);
263 assertEquals(host1, host2);
Patrick Liuab1e6062014-05-05 11:12:13 -0700264 }
265
266 /**
Jonathan Hart03102132014-07-01 23:22:04 -0700267 * This test will invoke addHost to add a new host through Packet pkt1.
TeruU5d2c9392014-06-09 20:02:02 -0700268 * @throws FloodlightModuleException
Patrick Liuab1e6062014-05-05 11:12:13 -0700269 */
270 @Test
Jonathan Hart03102132014-07-01 23:22:04 -0700271 public void testProcessPacketInAddNewHost() throws FloodlightModuleException {
272 floodlightProvider.addOFMessageListener(EasyMock.eq(OFType.PACKET_IN),
273 EasyMock.isA(HostManager.class));
Patrick Liuab1e6062014-05-05 11:12:13 -0700274 EasyMock.expectLastCall();
Jonathan Hart03102132014-07-01 23:22:04 -0700275 floodlightProvider.publishUpdate(EasyMock.isA(IUpdate.class));
Patrick Liuab1e6062014-05-05 11:12:13 -0700276 EasyMock.expectLastCall();
Jonathan Hart03102132014-07-01 23:22:04 -0700277 replay(floodlightProvider);
Patrick Liuab1e6062014-05-05 11:12:13 -0700278
Jonathan Hart03102132014-07-01 23:22:04 -0700279 hostManager.init(modContext);
280 hostManager.startUp(modContext);
281 Command cmd = hostManager.processPacketIn(sw1, pktIn, (Ethernet) pkt1);
Patrick Liuab1e6062014-05-05 11:12:13 -0700282 assertEquals(Command.CONTINUE, cmd);
283
Jonathan Hart03102132014-07-01 23:22:04 -0700284 EasyMock.verify(floodlightProvider);
Patrick Liuab1e6062014-05-05 11:12:13 -0700285 }
286
287 /**
TeruU5d2c9392014-06-09 20:02:02 -0700288 * Test ProcessPacket function.
289 * @throws FloodlightModuleException
290 */
291 @Test
292 public void testProcessPacketInHasLink() throws FloodlightModuleException {
Jonathan Hart03102132014-07-01 23:22:04 -0700293 floodlightProvider.addOFMessageListener(EasyMock.eq(OFType.PACKET_IN),
294 EasyMock.isA(HostManager.class));
TeruU5d2c9392014-06-09 20:02:02 -0700295 EasyMock.expectLastCall();
Jonathan Hart03102132014-07-01 23:22:04 -0700296 replay(floodlightProvider);
TeruU5d2c9392014-06-09 20:02:02 -0700297
Jonathan Hart03102132014-07-01 23:22:04 -0700298 hostManager.init(modContext);
299 hostManager.startUp(modContext);
300 Command cmd = hostManager.processPacketIn(sw1, pktIn2, (Ethernet) pkt1);
TeruU5d2c9392014-06-09 20:02:02 -0700301 assertEquals(Command.CONTINUE, cmd);
302
Jonathan Hart03102132014-07-01 23:22:04 -0700303 EasyMock.verify(floodlightProvider);
TeruU5d2c9392014-06-09 20:02:02 -0700304 }
305
306 /**
307 * Test return Command.STOP path in processPacketIn method by injecting a broadcast packet.
Patrick Liuab1e6062014-05-05 11:12:13 -0700308 */
309 @Test
310 public void testProcessPacketInStop() {
Jonathan Hart03102132014-07-01 23:22:04 -0700311 Command cmd = hostManager.processPacketIn(sw1, pktIn, (Ethernet) pkt0);
Patrick Liuab1e6062014-05-05 11:12:13 -0700312 assertEquals(Command.STOP, cmd);
313 }
314
315 /**
Jonathan Hart03102132014-07-01 23:22:04 -0700316 * Test add a host from the information from packet.
TeruU5d2c9392014-06-09 20:02:02 -0700317 * @throws FloodlightModuleException
Patrick Liuab1e6062014-05-05 11:12:13 -0700318 */
319 @Test
Jonathan Hart03102132014-07-01 23:22:04 -0700320 public void testAddHost() throws FloodlightModuleException {
Yuta HIGUCHI91a8f502014-06-17 10:15:29 -0700321 Ethernet eth = (Ethernet) pkt1;
Patrick Liuab1e6062014-05-05 11:12:13 -0700322 Long longmac = eth.getSourceMAC().toLong();
Jonathan Hart03102132014-07-01 23:22:04 -0700323 Host srcHost = hostManager.getSourceHostFromPacket(eth, sw1Dpid, sw1DevPort);
Patrick Liuab1e6062014-05-05 11:12:13 -0700324
Jonathan Hart03102132014-07-01 23:22:04 -0700325 floodlightProvider.addOFMessageListener(EasyMock.eq(OFType.PACKET_IN), EasyMock.isA(HostManager.class));
Patrick Liuab1e6062014-05-05 11:12:13 -0700326 EasyMock.expectLastCall();
Jonathan Hart03102132014-07-01 23:22:04 -0700327 floodlightProvider.publishUpdate(EasyMock.isA(IUpdate.class));
Patrick Liuab1e6062014-05-05 11:12:13 -0700328 EasyMock.expectLastCall();
Jonathan Hart03102132014-07-01 23:22:04 -0700329 replay(floodlightProvider);
Patrick Liuab1e6062014-05-05 11:12:13 -0700330
Jonathan Hart03102132014-07-01 23:22:04 -0700331 hostManager.init(modContext);
332 hostManager.startUp(modContext);
333 hostManager.addHost(longmac, srcHost);
Patrick Liuab1e6062014-05-05 11:12:13 -0700334
Jonathan Hart03102132014-07-01 23:22:04 -0700335 EasyMock.verify(floodlightProvider);
Patrick Liuab1e6062014-05-05 11:12:13 -0700336 }
337
338 /**
Jonathan Hart03102132014-07-01 23:22:04 -0700339 * Test delete a host.
TeruU5d2c9392014-06-09 20:02:02 -0700340 * @throws FloodlightModuleException
Patrick Liuab1e6062014-05-05 11:12:13 -0700341 */
342 @Test
Jonathan Hart03102132014-07-01 23:22:04 -0700343 public void testDeleteHost() throws FloodlightModuleException {
Yuta HIGUCHI91a8f502014-06-17 10:15:29 -0700344 Ethernet eth = (Ethernet) pkt1;
Jonathan Hart03102132014-07-01 23:22:04 -0700345 Host srcHost = hostManager.getSourceHostFromPacket(eth, sw1Dpid, sw1DevPort);
Patrick Liuab1e6062014-05-05 11:12:13 -0700346
Jonathan Hart03102132014-07-01 23:22:04 -0700347 floodlightProvider.addOFMessageListener(EasyMock.eq(OFType.PACKET_IN), EasyMock.isA(HostManager.class));
Patrick Liuab1e6062014-05-05 11:12:13 -0700348 EasyMock.expectLastCall();
Jonathan Hart03102132014-07-01 23:22:04 -0700349 floodlightProvider.publishUpdate(EasyMock.isA(IUpdate.class));
Patrick Liuab1e6062014-05-05 11:12:13 -0700350 EasyMock.expectLastCall();
Jonathan Hart03102132014-07-01 23:22:04 -0700351 replay(floodlightProvider);
Patrick Liuab1e6062014-05-05 11:12:13 -0700352
Jonathan Hart03102132014-07-01 23:22:04 -0700353 hostManager.init(modContext);
354 hostManager.startUp(modContext);
355 hostManager.deleteHost(srcHost);
Patrick Liuab1e6062014-05-05 11:12:13 -0700356
Jonathan Hart03102132014-07-01 23:22:04 -0700357 EasyMock.verify(floodlightProvider);
Patrick Liuab1e6062014-05-05 11:12:13 -0700358 }
359
360 /**
Jonathan Hart03102132014-07-01 23:22:04 -0700361 * Test delete a host by using its source mac address.
TeruU5d2c9392014-06-09 20:02:02 -0700362 * @throws FloodlightModuleException
Patrick Liuab1e6062014-05-05 11:12:13 -0700363 */
364 @Test
Jonathan Hart03102132014-07-01 23:22:04 -0700365 public void testDeleteHostByMac() throws FloodlightModuleException {
Yuta HIGUCHI91a8f502014-06-17 10:15:29 -0700366 Ethernet eth = (Ethernet) pkt1;
Patrick Liuab1e6062014-05-05 11:12:13 -0700367 MACAddress mac = eth.getSourceMAC();
Patrick Liuab1e6062014-05-05 11:12:13 -0700368
Jonathan Hart03102132014-07-01 23:22:04 -0700369 floodlightProvider.addOFMessageListener(EasyMock.eq(OFType.PACKET_IN), EasyMock.isA(HostManager.class));
Patrick Liuab1e6062014-05-05 11:12:13 -0700370 EasyMock.expectLastCall();
Jonathan Hart03102132014-07-01 23:22:04 -0700371 floodlightProvider.publishUpdate(EasyMock.isA(IUpdate.class));
Patrick Liuab1e6062014-05-05 11:12:13 -0700372 EasyMock.expectLastCall();
Jonathan Hart03102132014-07-01 23:22:04 -0700373 replay(floodlightProvider);
Patrick Liuab1e6062014-05-05 11:12:13 -0700374
Jonathan Hart03102132014-07-01 23:22:04 -0700375 hostManager.init(modContext);
376 hostManager.startUp(modContext);
377 hostManager.deleteHostByMac(mac);
TeruU5d2c9392014-06-09 20:02:02 -0700378
Jonathan Hart03102132014-07-01 23:22:04 -0700379 EasyMock.verify(floodlightProvider);
Patrick Liuab1e6062014-05-05 11:12:13 -0700380 }
381}