blob: 1431a2415c06483f72674f8982c873eaa8f6893d [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;
Sho SHIMIZU107344e2014-08-13 16:11:53 -07009import static org.easymock.EasyMock.isA;
Patrick Liuab1e6062014-05-05 11:12:13 -070010import static org.easymock.EasyMock.replay;
Sho SHIMIZU107344e2014-08-13 16:11:53 -070011import static org.easymock.EasyMock.verify;
Patrick Liuab1e6062014-05-05 11:12:13 -070012
13import java.util.Date;
14
15import net.floodlightcontroller.core.IFloodlightProviderService;
16import net.floodlightcontroller.core.IListener.Command;
17import net.floodlightcontroller.core.IOFSwitch;
18import net.floodlightcontroller.core.IUpdate;
19import net.floodlightcontroller.core.module.FloodlightModuleContext;
TeruU5d2c9392014-06-09 20:02:02 -070020import net.floodlightcontroller.core.module.FloodlightModuleException;
Patrick Liuab1e6062014-05-05 11:12:13 -070021import net.floodlightcontroller.test.FloodlightTestCase;
22import net.floodlightcontroller.util.MACAddress;
23import net.onrc.onos.core.datagrid.IDatagridService;
24import net.onrc.onos.core.datagrid.IEventChannel;
25import net.onrc.onos.core.datagrid.IEventChannelListener;
Patrick Liuab1e6062014-05-05 11:12:13 -070026import net.onrc.onos.core.packet.ARP;
27import net.onrc.onos.core.packet.DHCP;
28import net.onrc.onos.core.packet.Data;
29import net.onrc.onos.core.packet.Ethernet;
30import net.onrc.onos.core.packet.IPacket;
31import net.onrc.onos.core.packet.IPv4;
32import net.onrc.onos.core.packet.UDP;
33import net.onrc.onos.core.registry.IControllerRegistryService;
34import net.onrc.onos.core.topology.ITopologyListener;
35import net.onrc.onos.core.topology.ITopologyService;
TeruU5d2c9392014-06-09 20:02:02 -070036import net.onrc.onos.core.topology.MockTopology;
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -070037import net.onrc.onos.core.util.Dpid;
38import net.onrc.onos.core.util.PortNumber;
Patrick Liuab1e6062014-05-05 11:12:13 -070039
Patrick Liuab1e6062014-05-05 11:12:13 -070040import org.junit.After;
41import org.junit.Before;
42import org.junit.Test;
Brian O'Connorc67f9fa2014-08-07 18:17:46 -070043import org.projectfloodlight.openflow.protocol.OFFactories;
44import org.projectfloodlight.openflow.protocol.OFFactory;
45import org.projectfloodlight.openflow.protocol.OFPacketIn;
46import org.projectfloodlight.openflow.protocol.OFPacketInReason;
47import org.projectfloodlight.openflow.protocol.OFType;
48import org.projectfloodlight.openflow.protocol.OFVersion;
49import org.projectfloodlight.openflow.types.OFPort;
Patrick Liuab1e6062014-05-05 11:12:13 -070050
51/**
Jonathan Hart03102132014-07-01 23:22:04 -070052 * Unit tests for the Host Manager module (HostManger).
53 * These test cases check the result of add/delete host and
54 * verify the result of processPacketIn by injecting fake packets.
55 * floodlightProvider, datagridService, topologyService,
56 * controllerRegistryService, eventChannel are mocked out.
Patrick Liuab1e6062014-05-05 11:12:13 -070057 */
Jonathan Hart03102132014-07-01 23:22:04 -070058public class HostManagerTest extends FloodlightTestCase {
Patrick Liuab1e6062014-05-05 11:12:13 -070059 private IPacket pkt0, pkt1, pkt2, pkt3, pkt4;
60 private IOFSwitch sw1;
61 private long sw1Dpid;
TeruU5d2c9392014-06-09 20:02:02 -070062 private long sw1DevPort, sw1DevPort2;
Jonathan Hart03102132014-07-01 23:22:04 -070063 private HostManager hostManager;
TeruU5d2c9392014-06-09 20:02:02 -070064 private OFPacketIn pktIn, pktIn2;
Patrick Liuab1e6062014-05-05 11:12:13 -070065 private FloodlightModuleContext modContext;
66 private ITopologyService networkGraphService;
Jonathan Hart03102132014-07-01 23:22:04 -070067 private IEventChannel<Long, Host> eventChannel;
68 private IFloodlightProviderService floodlightProvider;
Patrick Liuab1e6062014-05-05 11:12:13 -070069 private Date lastSeenTimestamp;
Brian O'Connorc67f9fa2014-08-07 18:17:46 -070070 private OFFactory ofact;
Patrick Liuab1e6062014-05-05 11:12:13 -070071
72 @Override
73 @Before
Ray Milkeyff735142014-05-22 19:06:02 -070074 @SuppressWarnings("unchecked")
Patrick Liuab1e6062014-05-05 11:12:13 -070075 public void setUp() throws Exception {
76 super.setUp();
77 MockTopology topology = new MockTopology();
78 IDatagridService datagridService;
79 IControllerRegistryService controllerRegistryService;
80
TeruU5d2c9392014-06-09 20:02:02 -070081 topology.createSampleTopology2();
Patrick Liuab1e6062014-05-05 11:12:13 -070082 modContext = new FloodlightModuleContext();
83
Jonathan Hart03102132014-07-01 23:22:04 -070084 floodlightProvider = createMock(IFloodlightProviderService.class);
Patrick Liuab1e6062014-05-05 11:12:13 -070085 datagridService = createMock(IDatagridService.class);
86 networkGraphService = createMock(ITopologyService.class);
87 controllerRegistryService = createMock(IControllerRegistryService.class);
88 eventChannel = createMock(IEventChannel.class);
89 expect(networkGraphService.getTopology()).andReturn(topology).anyTimes();
Pavlin Radoslavov054cd592014-08-07 20:57:16 -070090 networkGraphService.addListener(anyObject(ITopologyListener.class), eq(false));
Patrick Liuab1e6062014-05-05 11:12:13 -070091 expectLastCall();
92
Jonathan Hart03102132014-07-01 23:22:04 -070093 expect(datagridService.createChannel("onos.host", Long.class, Host.class))
Patrick Liuab1e6062014-05-05 11:12:13 -070094 .andReturn(eventChannel).once();
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -070095 expect(topology.getOutgoingLink(new Dpid(1L), new PortNumber((short) 100))).andReturn(null).anyTimes();
Patrick Liuab1e6062014-05-05 11:12:13 -070096 expect(datagridService.addListener(
Jonathan Hart03102132014-07-01 23:22:04 -070097 eq("onos.host"),
Patrick Liuab1e6062014-05-05 11:12:13 -070098 anyObject(IEventChannelListener.class),
99 eq(Long.class),
Jonathan Hart03102132014-07-01 23:22:04 -0700100 eq(Host.class)))
Patrick Liuab1e6062014-05-05 11:12:13 -0700101 .andReturn(eventChannel).once();
102
103 replay(datagridService);
104 replay(networkGraphService);
105 replay(controllerRegistryService);
106
Yuta HIGUCHI91a8f502014-06-17 10:15:29 -0700107 modContext.addService(IDatagridService.class, datagridService);
108 modContext.addService(ITopologyService.class, networkGraphService);
Jonathan Hart03102132014-07-01 23:22:04 -0700109 modContext.addService(IFloodlightProviderService.class, floodlightProvider);
Patrick Liuab1e6062014-05-05 11:12:13 -0700110 modContext.getServiceImpl(IFloodlightProviderService.class);
111 sw1Dpid = 1L;
Brian O'Connorc67f9fa2014-08-07 18:17:46 -0700112 ofact = OFFactories.getFactory(OFVersion.OF_10);
113
Patrick Liuab1e6062014-05-05 11:12:13 -0700114 sw1 = createMockSwitch(sw1Dpid);
115 replay(sw1);
116
117 sw1DevPort = 100;
TeruU5d2c9392014-06-09 20:02:02 -0700118 sw1DevPort2 = 12L;
Patrick Liuab1e6062014-05-05 11:12:13 -0700119
Jonathan Hart03102132014-07-01 23:22:04 -0700120 hostManager = new HostManager();
Patrick Liuab1e6062014-05-05 11:12:13 -0700121 /*
Jonathan Hart7ab71612014-05-27 13:37:31 -0700122 * Broadcast source address
Patrick Liuab1e6062014-05-05 11:12:13 -0700123 */
124 this.pkt0 = new Ethernet()
Jonathan Hart7ab71612014-05-27 13:37:31 -0700125 .setDestinationMACAddress("00:44:33:22:11:33")
126 .setSourceMACAddress("FF:FF:FF:FF:FF:FF")
Patrick Liuab1e6062014-05-05 11:12:13 -0700127 .setEtherType(Ethernet.TYPE_IPV4)
128 .setPayload(
129 new IPv4()
130 .setTtl((byte) 128)
131 .setSourceAddress("192.168.10.1")
132 .setDestinationAddress("192.168.255.255")
Brian O'Connorc67f9fa2014-08-07 18:17:46 -0700133 .setPayload(getUDP(new Data(new byte[]{0x01}))));
134
Patrick Liuab1e6062014-05-05 11:12:13 -0700135 /*
136 * Normal IPv4 packet
137 */
138 this.pkt1 = new Ethernet()
139 .setDestinationMACAddress("00:11:22:33:44:55")
140 .setSourceMACAddress("00:44:33:22:11:00")
141 .setEtherType(Ethernet.TYPE_IPV4)
142 .setPayload(
143 new IPv4()
144 .setTtl((byte) 128)
145 .setSourceAddress("192.168.1.1")
146 .setDestinationAddress("192.168.1.2")
Brian O'Connorc67f9fa2014-08-07 18:17:46 -0700147 .setPayload(getUDP(new Data(new byte[]{0x01}))));
148
Patrick Liuab1e6062014-05-05 11:12:13 -0700149 /*
150 * Same MAC header as pkt1,but not IP address set
151 */
152 this.pkt2 = new Ethernet()
153 .setSourceMACAddress("00:44:33:22:11:01")
154 .setDestinationMACAddress("00:11:22:33:44:55")
155 .setEtherType(Ethernet.TYPE_IPV4)
156 .setPayload(
157 new IPv4()
158 .setTtl((byte) 128)
Brian O'Connorc67f9fa2014-08-07 18:17:46 -0700159 .setPayload(getUDP(new Data(new byte[]{0x01}))));
160
Patrick Liuab1e6062014-05-05 11:12:13 -0700161 /*
162 * DHCP packet
163 */
164 this.pkt3 = new Ethernet()
165 .setSourceMACAddress("00:44:33:22:11:01")
166 .setDestinationMACAddress("00:11:22:33:44:55")
167 .setEtherType(Ethernet.TYPE_IPV4)
168 .setPayload(
169 new IPv4()
170 .setTtl((byte) 128)
171 .setSourceAddress("192.168.1.1")
172 .setDestinationAddress("192.168.1.2")
Brian O'Connorc67f9fa2014-08-07 18:17:46 -0700173 .setPayload(getUDP(
Patrick Liuab1e6062014-05-05 11:12:13 -0700174 new DHCP()
175 .setOpCode(DHCP.OPCODE_REPLY)
176 .setHardwareType(DHCP.HWTYPE_ETHERNET)
177 .setHardwareAddressLength((byte) 6)
178 .setHops((byte) 0)
179 .setTransactionId(0x00003d1d)
180 .setSeconds((short) 0)
181 .setFlags((short) 0)
182 .setClientIPAddress(0)
183 .setYourIPAddress(0)
184 .setServerIPAddress(0)
185 .setGatewayIPAddress(0))));
186 /*
187 * ARP packet
188 */
189 this.pkt4 = new Ethernet()
190 .setSourceMACAddress("00:44:33:22:11:01")
191 .setDestinationMACAddress("00:11:22:33:44:55")
192 .setEtherType(Ethernet.TYPE_ARP)
193 .setPayload(
194 new ARP()
195 .setHardwareType(ARP.HW_TYPE_ETHERNET)
196 .setProtocolType(ARP.PROTO_TYPE_IP)
197 .setHardwareAddressLength((byte) 6)
198 .setProtocolAddressLength((byte) 4)
199 .setOpCode(ARP.OP_REPLY)
200 .setSenderHardwareAddress(Ethernet.toMACAddress("00:44:33:22:11:01"))
201 .setSenderProtocolAddress(IPv4.toIPv4AddressBytes("192.168.1.1"))
202 .setTargetHardwareAddress(Ethernet.toMACAddress("00:11:22:33:44:55"))
203 .setTargetProtocolAddress(IPv4.toIPv4AddressBytes("192.168.1.2")));
204
205
Brian O'Connorc67f9fa2014-08-07 18:17:46 -0700206 this.pktIn = getPacketIn((short) sw1DevPort);
207 this.pktIn2 = getPacketIn((short) sw1DevPort2);
Patrick Liuab1e6062014-05-05 11:12:13 -0700208
209 lastSeenTimestamp = new Date(1);
Patrick Liuab1e6062014-05-05 11:12:13 -0700210 }
211
212 @Override
213 @After
214 public void tearDown() throws Exception {
215 }
216
217 public IOFSwitch createMockSwitch(Long id) {
218 IOFSwitch mockSwitch = createNiceMock(IOFSwitch.class);
219 expect(mockSwitch.getId()).andReturn(id).anyTimes();
220 return mockSwitch;
221 }
222
223 /**
Jonathan Hart03102132014-07-01 23:22:04 -0700224 * Test set operation on lastSeenTimstamp field in Host.
Patrick Liuab1e6062014-05-05 11:12:13 -0700225 */
226 @Test
227 public void testSetLastSeenTimestamp() {
Yuta HIGUCHI91a8f502014-06-17 10:15:29 -0700228 Ethernet eth = (Ethernet) pkt1;
Jonathan Hart03102132014-07-01 23:22:04 -0700229 Host srcHost = hostManager.getSourceHostFromPacket(eth, sw1Dpid, sw1DevPort);
Patrick Liuab1e6062014-05-05 11:12:13 -0700230
Sho SHIMIZU107344e2014-08-13 16:11:53 -0700231 floodlightProvider.addOFMessageListener(eq(OFType.PACKET_IN),
232 isA(HostManager.class));
Jonathan Hart03102132014-07-01 23:22:04 -0700233 srcHost.setLastSeenTimestamp(lastSeenTimestamp);
234 assertEquals(lastSeenTimestamp, srcHost.getLastSeenTimestamp());
Patrick Liuab1e6062014-05-05 11:12:13 -0700235 }
236 /**
Jonathan Hart03102132014-07-01 23:22:04 -0700237 * test the functionality to get the source host from Packet header
Patrick Liuab1e6062014-05-05 11:12:13 -0700238 * information.
239 */
240 @Test
Jonathan Hart03102132014-07-01 23:22:04 -0700241 public void testGetSourceHostFromPacket() {
Yuta HIGUCHI91a8f502014-06-17 10:15:29 -0700242 byte[] address = new byte[] {0x00, 0x44, 0x33, 0x22, 0x11, 0x01};
Patrick Liuab1e6062014-05-05 11:12:13 -0700243 MACAddress srcMac = new MACAddress(address);
Jonathan Hart03102132014-07-01 23:22:04 -0700244 Host host1 = new Host(srcMac,
Patrick Liuab1e6062014-05-05 11:12:13 -0700245 null,
Patrick Liuab1e6062014-05-05 11:12:13 -0700246 sw1Dpid,
247 sw1DevPort,
248 null);
249
250 /*
251 * test DHCP packet case
252 */
Yuta HIGUCHI91a8f502014-06-17 10:15:29 -0700253 Ethernet eth = (Ethernet) pkt3;
Jonathan Hart03102132014-07-01 23:22:04 -0700254 Host host2 = hostManager.getSourceHostFromPacket(eth, sw1Dpid, sw1DevPort);
255 assertEquals(host1, host2);
Patrick Liuab1e6062014-05-05 11:12:13 -0700256
257 /*
258 * test ARP packet case
259 */
Yuta HIGUCHI91a8f502014-06-17 10:15:29 -0700260 eth = (Ethernet) pkt4;
Jonathan Hart03102132014-07-01 23:22:04 -0700261 host2 = hostManager.getSourceHostFromPacket(eth, sw1Dpid, sw1DevPort);
262 assertEquals(host1, host2);
Patrick Liuab1e6062014-05-05 11:12:13 -0700263 }
264
265 /**
Jonathan Hart03102132014-07-01 23:22:04 -0700266 * This test will invoke addHost to add a new host through Packet pkt1.
TeruU5d2c9392014-06-09 20:02:02 -0700267 * @throws FloodlightModuleException
Patrick Liuab1e6062014-05-05 11:12:13 -0700268 */
269 @Test
Jonathan Hart03102132014-07-01 23:22:04 -0700270 public void testProcessPacketInAddNewHost() throws FloodlightModuleException {
Sho SHIMIZU107344e2014-08-13 16:11:53 -0700271 floodlightProvider.addOFMessageListener(eq(OFType.PACKET_IN),
272 isA(HostManager.class));
273 expectLastCall();
274 floodlightProvider.publishUpdate(isA(IUpdate.class));
275 expectLastCall();
Jonathan Hart03102132014-07-01 23:22:04 -0700276 replay(floodlightProvider);
Patrick Liuab1e6062014-05-05 11:12:13 -0700277
Jonathan Hart03102132014-07-01 23:22:04 -0700278 hostManager.init(modContext);
279 hostManager.startUp(modContext);
Brian O'Connorc67f9fa2014-08-07 18:17:46 -0700280 Command cmd = hostManager.processPacketIn(
281 sw1, pktIn, (Ethernet) pkt1, (short) sw1DevPort);
Patrick Liuab1e6062014-05-05 11:12:13 -0700282 assertEquals(Command.CONTINUE, cmd);
283
Sho SHIMIZU107344e2014-08-13 16:11:53 -0700284 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 {
Sho SHIMIZU107344e2014-08-13 16:11:53 -0700293 floodlightProvider.addOFMessageListener(eq(OFType.PACKET_IN),
294 isA(HostManager.class));
295 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);
Brian O'Connorc67f9fa2014-08-07 18:17:46 -0700300 Command cmd = hostManager.processPacketIn(
301 sw1, pktIn2, (Ethernet) pkt1, (short) sw1DevPort2);
TeruU5d2c9392014-06-09 20:02:02 -0700302 assertEquals(Command.CONTINUE, cmd);
303
Sho SHIMIZU107344e2014-08-13 16:11:53 -0700304 verify(floodlightProvider);
TeruU5d2c9392014-06-09 20:02:02 -0700305 }
306
307 /**
308 * Test return Command.STOP path in processPacketIn method by injecting a broadcast packet.
Patrick Liuab1e6062014-05-05 11:12:13 -0700309 */
310 @Test
311 public void testProcessPacketInStop() {
Brian O'Connorc67f9fa2014-08-07 18:17:46 -0700312 Command cmd = hostManager.processPacketIn(
313 sw1, pktIn, (Ethernet) pkt0, (short) sw1DevPort);
Patrick Liuab1e6062014-05-05 11:12:13 -0700314 assertEquals(Command.STOP, cmd);
315 }
316
317 /**
Jonathan Hart03102132014-07-01 23:22:04 -0700318 * Test add a host from the information from packet.
TeruU5d2c9392014-06-09 20:02:02 -0700319 * @throws FloodlightModuleException
Patrick Liuab1e6062014-05-05 11:12:13 -0700320 */
321 @Test
Jonathan Hart03102132014-07-01 23:22:04 -0700322 public void testAddHost() throws FloodlightModuleException {
Yuta HIGUCHI91a8f502014-06-17 10:15:29 -0700323 Ethernet eth = (Ethernet) pkt1;
Patrick Liuab1e6062014-05-05 11:12:13 -0700324 Long longmac = eth.getSourceMAC().toLong();
Jonathan Hart03102132014-07-01 23:22:04 -0700325 Host srcHost = hostManager.getSourceHostFromPacket(eth, sw1Dpid, sw1DevPort);
Patrick Liuab1e6062014-05-05 11:12:13 -0700326
Sho SHIMIZU107344e2014-08-13 16:11:53 -0700327 floodlightProvider.addOFMessageListener(eq(OFType.PACKET_IN),
328 isA(HostManager.class));
329 expectLastCall();
330 floodlightProvider.publishUpdate(isA(IUpdate.class));
331 expectLastCall();
Jonathan Hart03102132014-07-01 23:22:04 -0700332 replay(floodlightProvider);
Patrick Liuab1e6062014-05-05 11:12:13 -0700333
Jonathan Hart03102132014-07-01 23:22:04 -0700334 hostManager.init(modContext);
335 hostManager.startUp(modContext);
336 hostManager.addHost(longmac, srcHost);
Patrick Liuab1e6062014-05-05 11:12:13 -0700337
Sho SHIMIZU107344e2014-08-13 16:11:53 -0700338 verify(floodlightProvider);
Patrick Liuab1e6062014-05-05 11:12:13 -0700339 }
340
341 /**
Jonathan Hart03102132014-07-01 23:22:04 -0700342 * Test delete a host.
TeruU5d2c9392014-06-09 20:02:02 -0700343 * @throws FloodlightModuleException
Patrick Liuab1e6062014-05-05 11:12:13 -0700344 */
345 @Test
Jonathan Hart03102132014-07-01 23:22:04 -0700346 public void testDeleteHost() throws FloodlightModuleException {
Yuta HIGUCHI91a8f502014-06-17 10:15:29 -0700347 Ethernet eth = (Ethernet) pkt1;
Jonathan Hart03102132014-07-01 23:22:04 -0700348 Host srcHost = hostManager.getSourceHostFromPacket(eth, sw1Dpid, sw1DevPort);
Patrick Liuab1e6062014-05-05 11:12:13 -0700349
Sho SHIMIZU107344e2014-08-13 16:11:53 -0700350 floodlightProvider.addOFMessageListener(eq(OFType.PACKET_IN),
351 isA(HostManager.class));
352 expectLastCall();
353 floodlightProvider.publishUpdate(isA(IUpdate.class));
354 expectLastCall();
Jonathan Hart03102132014-07-01 23:22:04 -0700355 replay(floodlightProvider);
Patrick Liuab1e6062014-05-05 11:12:13 -0700356
Jonathan Hart03102132014-07-01 23:22:04 -0700357 hostManager.init(modContext);
358 hostManager.startUp(modContext);
359 hostManager.deleteHost(srcHost);
Patrick Liuab1e6062014-05-05 11:12:13 -0700360
Sho SHIMIZU107344e2014-08-13 16:11:53 -0700361 verify(floodlightProvider);
Patrick Liuab1e6062014-05-05 11:12:13 -0700362 }
363
364 /**
Jonathan Hart03102132014-07-01 23:22:04 -0700365 * Test delete a host by using its source mac address.
TeruU5d2c9392014-06-09 20:02:02 -0700366 * @throws FloodlightModuleException
Patrick Liuab1e6062014-05-05 11:12:13 -0700367 */
368 @Test
Jonathan Hart03102132014-07-01 23:22:04 -0700369 public void testDeleteHostByMac() throws FloodlightModuleException {
Yuta HIGUCHI91a8f502014-06-17 10:15:29 -0700370 Ethernet eth = (Ethernet) pkt1;
Patrick Liuab1e6062014-05-05 11:12:13 -0700371 MACAddress mac = eth.getSourceMAC();
Patrick Liuab1e6062014-05-05 11:12:13 -0700372
Sho SHIMIZU107344e2014-08-13 16:11:53 -0700373 floodlightProvider.addOFMessageListener(eq(OFType.PACKET_IN),
374 isA(HostManager.class));
375 expectLastCall();
376 floodlightProvider.publishUpdate(isA(IUpdate.class));
377 expectLastCall();
Jonathan Hart03102132014-07-01 23:22:04 -0700378 replay(floodlightProvider);
Patrick Liuab1e6062014-05-05 11:12:13 -0700379
Jonathan Hart03102132014-07-01 23:22:04 -0700380 hostManager.init(modContext);
381 hostManager.startUp(modContext);
382 hostManager.deleteHostByMac(mac);
TeruU5d2c9392014-06-09 20:02:02 -0700383
Sho SHIMIZU107344e2014-08-13 16:11:53 -0700384 verify(floodlightProvider);
Patrick Liuab1e6062014-05-05 11:12:13 -0700385 }
Brian O'Connorc67f9fa2014-08-07 18:17:46 -0700386
387 /**
388 * Helper for building PacketIns. Defaults to a flowtable miss.
389 * @param inport the inport field value
390 * @return a PacketIn
391 */
392 private OFPacketIn getPacketIn(int inport) {
393 return ofact.buildPacketIn()
394 .setInPort(OFPort.of(inport))
395 .setReason(OFPacketInReason.NO_MATCH)
396 .build();
397 }
398
399 private UDP getUDP(IPacket payload) {
400 return (UDP) new UDP()
401 .setSourcePort((short) 5000)
402 .setDestinationPort((short) 5001)
403 .setPayload(payload);
404 }
Patrick Liuab1e6062014-05-05 11:12:13 -0700405}