blob: 3c4bfee22c62b6fb9420a5b375a9f4b46976be5b [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;
Brian O'Connorc67f9fa2014-08-07 18:17:46 -070042import org.projectfloodlight.openflow.protocol.OFFactories;
43import org.projectfloodlight.openflow.protocol.OFFactory;
44import org.projectfloodlight.openflow.protocol.OFPacketIn;
45import org.projectfloodlight.openflow.protocol.OFPacketInReason;
46import org.projectfloodlight.openflow.protocol.OFType;
47import org.projectfloodlight.openflow.protocol.OFVersion;
48import org.projectfloodlight.openflow.types.OFPort;
Patrick Liuab1e6062014-05-05 11:12:13 -070049
50/**
Jonathan Hart03102132014-07-01 23:22:04 -070051 * Unit tests for the Host Manager module (HostManger).
52 * These test cases check the result of add/delete host and
53 * verify the result of processPacketIn by injecting fake packets.
54 * floodlightProvider, datagridService, topologyService,
55 * controllerRegistryService, eventChannel are mocked out.
Patrick Liuab1e6062014-05-05 11:12:13 -070056 */
Jonathan Hart03102132014-07-01 23:22:04 -070057public class HostManagerTest extends FloodlightTestCase {
Patrick Liuab1e6062014-05-05 11:12:13 -070058 private IPacket pkt0, pkt1, pkt2, pkt3, pkt4;
59 private IOFSwitch sw1;
60 private long sw1Dpid;
TeruU5d2c9392014-06-09 20:02:02 -070061 private long sw1DevPort, sw1DevPort2;
Jonathan Hart03102132014-07-01 23:22:04 -070062 private HostManager hostManager;
TeruU5d2c9392014-06-09 20:02:02 -070063 private OFPacketIn pktIn, pktIn2;
Patrick Liuab1e6062014-05-05 11:12:13 -070064 private FloodlightModuleContext modContext;
65 private ITopologyService networkGraphService;
Jonathan Hart03102132014-07-01 23:22:04 -070066 private IEventChannel<Long, Host> eventChannel;
67 private IFloodlightProviderService floodlightProvider;
Patrick Liuab1e6062014-05-05 11:12:13 -070068 private Date lastSeenTimestamp;
Brian O'Connorc67f9fa2014-08-07 18:17:46 -070069 private OFFactory ofact;
Patrick Liuab1e6062014-05-05 11:12:13 -070070
71 @Override
72 @Before
Ray Milkeyff735142014-05-22 19:06:02 -070073 @SuppressWarnings("unchecked")
Patrick Liuab1e6062014-05-05 11:12:13 -070074 public void setUp() throws Exception {
75 super.setUp();
76 MockTopology topology = new MockTopology();
77 IDatagridService datagridService;
78 IControllerRegistryService controllerRegistryService;
79
TeruU5d2c9392014-06-09 20:02:02 -070080 topology.createSampleTopology2();
Patrick Liuab1e6062014-05-05 11:12:13 -070081 modContext = new FloodlightModuleContext();
82
Jonathan Hart03102132014-07-01 23:22:04 -070083 floodlightProvider = createMock(IFloodlightProviderService.class);
Patrick Liuab1e6062014-05-05 11:12:13 -070084 datagridService = createMock(IDatagridService.class);
85 networkGraphService = createMock(ITopologyService.class);
86 controllerRegistryService = createMock(IControllerRegistryService.class);
87 eventChannel = createMock(IEventChannel.class);
88 expect(networkGraphService.getTopology()).andReturn(topology).anyTimes();
Pavlin Radoslavov054cd592014-08-07 20:57:16 -070089 networkGraphService.addListener(anyObject(ITopologyListener.class), eq(false));
Patrick Liuab1e6062014-05-05 11:12:13 -070090 expectLastCall();
91
Jonathan Hart03102132014-07-01 23:22:04 -070092 expect(datagridService.createChannel("onos.host", Long.class, Host.class))
Patrick Liuab1e6062014-05-05 11:12:13 -070093 .andReturn(eventChannel).once();
Yuta HIGUCHI8f3dfa32014-06-25 00:14:25 -070094 expect(topology.getOutgoingLink(new Dpid(1L), new PortNumber((short) 100))).andReturn(null).anyTimes();
Patrick Liuab1e6062014-05-05 11:12:13 -070095 expect(datagridService.addListener(
Jonathan Hart03102132014-07-01 23:22:04 -070096 eq("onos.host"),
Patrick Liuab1e6062014-05-05 11:12:13 -070097 anyObject(IEventChannelListener.class),
98 eq(Long.class),
Jonathan Hart03102132014-07-01 23:22:04 -070099 eq(Host.class)))
Patrick Liuab1e6062014-05-05 11:12:13 -0700100 .andReturn(eventChannel).once();
101
102 replay(datagridService);
103 replay(networkGraphService);
104 replay(controllerRegistryService);
105
Yuta HIGUCHI91a8f502014-06-17 10:15:29 -0700106 modContext.addService(IDatagridService.class, datagridService);
107 modContext.addService(ITopologyService.class, networkGraphService);
Jonathan Hart03102132014-07-01 23:22:04 -0700108 modContext.addService(IFloodlightProviderService.class, floodlightProvider);
Patrick Liuab1e6062014-05-05 11:12:13 -0700109 modContext.getServiceImpl(IFloodlightProviderService.class);
110 sw1Dpid = 1L;
Brian O'Connorc67f9fa2014-08-07 18:17:46 -0700111 ofact = OFFactories.getFactory(OFVersion.OF_10);
112
Patrick Liuab1e6062014-05-05 11:12:13 -0700113 sw1 = createMockSwitch(sw1Dpid);
114 replay(sw1);
115
116 sw1DevPort = 100;
TeruU5d2c9392014-06-09 20:02:02 -0700117 sw1DevPort2 = 12L;
Patrick Liuab1e6062014-05-05 11:12:13 -0700118
Jonathan Hart03102132014-07-01 23:22:04 -0700119 hostManager = new HostManager();
Patrick Liuab1e6062014-05-05 11:12:13 -0700120 /*
Jonathan Hart7ab71612014-05-27 13:37:31 -0700121 * Broadcast source address
Patrick Liuab1e6062014-05-05 11:12:13 -0700122 */
123 this.pkt0 = new Ethernet()
Jonathan Hart7ab71612014-05-27 13:37:31 -0700124 .setDestinationMACAddress("00:44:33:22:11:33")
125 .setSourceMACAddress("FF:FF:FF:FF:FF:FF")
Patrick Liuab1e6062014-05-05 11:12:13 -0700126 .setEtherType(Ethernet.TYPE_IPV4)
127 .setPayload(
128 new IPv4()
129 .setTtl((byte) 128)
130 .setSourceAddress("192.168.10.1")
131 .setDestinationAddress("192.168.255.255")
Brian O'Connorc67f9fa2014-08-07 18:17:46 -0700132 .setPayload(getUDP(new Data(new byte[]{0x01}))));
133
Patrick Liuab1e6062014-05-05 11:12:13 -0700134 /*
135 * Normal IPv4 packet
136 */
137 this.pkt1 = new Ethernet()
138 .setDestinationMACAddress("00:11:22:33:44:55")
139 .setSourceMACAddress("00:44:33:22:11:00")
140 .setEtherType(Ethernet.TYPE_IPV4)
141 .setPayload(
142 new IPv4()
143 .setTtl((byte) 128)
144 .setSourceAddress("192.168.1.1")
145 .setDestinationAddress("192.168.1.2")
Brian O'Connorc67f9fa2014-08-07 18:17:46 -0700146 .setPayload(getUDP(new Data(new byte[]{0x01}))));
147
Patrick Liuab1e6062014-05-05 11:12:13 -0700148 /*
149 * Same MAC header as pkt1,but not IP address set
150 */
151 this.pkt2 = new Ethernet()
152 .setSourceMACAddress("00:44:33:22:11:01")
153 .setDestinationMACAddress("00:11:22:33:44:55")
154 .setEtherType(Ethernet.TYPE_IPV4)
155 .setPayload(
156 new IPv4()
157 .setTtl((byte) 128)
Brian O'Connorc67f9fa2014-08-07 18:17:46 -0700158 .setPayload(getUDP(new Data(new byte[]{0x01}))));
159
Patrick Liuab1e6062014-05-05 11:12:13 -0700160 /*
161 * DHCP packet
162 */
163 this.pkt3 = new Ethernet()
164 .setSourceMACAddress("00:44:33:22:11:01")
165 .setDestinationMACAddress("00:11:22:33:44:55")
166 .setEtherType(Ethernet.TYPE_IPV4)
167 .setPayload(
168 new IPv4()
169 .setTtl((byte) 128)
170 .setSourceAddress("192.168.1.1")
171 .setDestinationAddress("192.168.1.2")
Brian O'Connorc67f9fa2014-08-07 18:17:46 -0700172 .setPayload(getUDP(
Patrick Liuab1e6062014-05-05 11:12:13 -0700173 new DHCP()
174 .setOpCode(DHCP.OPCODE_REPLY)
175 .setHardwareType(DHCP.HWTYPE_ETHERNET)
176 .setHardwareAddressLength((byte) 6)
177 .setHops((byte) 0)
178 .setTransactionId(0x00003d1d)
179 .setSeconds((short) 0)
180 .setFlags((short) 0)
181 .setClientIPAddress(0)
182 .setYourIPAddress(0)
183 .setServerIPAddress(0)
184 .setGatewayIPAddress(0))));
185 /*
186 * ARP packet
187 */
188 this.pkt4 = new Ethernet()
189 .setSourceMACAddress("00:44:33:22:11:01")
190 .setDestinationMACAddress("00:11:22:33:44:55")
191 .setEtherType(Ethernet.TYPE_ARP)
192 .setPayload(
193 new ARP()
194 .setHardwareType(ARP.HW_TYPE_ETHERNET)
195 .setProtocolType(ARP.PROTO_TYPE_IP)
196 .setHardwareAddressLength((byte) 6)
197 .setProtocolAddressLength((byte) 4)
198 .setOpCode(ARP.OP_REPLY)
199 .setSenderHardwareAddress(Ethernet.toMACAddress("00:44:33:22:11:01"))
200 .setSenderProtocolAddress(IPv4.toIPv4AddressBytes("192.168.1.1"))
201 .setTargetHardwareAddress(Ethernet.toMACAddress("00:11:22:33:44:55"))
202 .setTargetProtocolAddress(IPv4.toIPv4AddressBytes("192.168.1.2")));
203
204
Brian O'Connorc67f9fa2014-08-07 18:17:46 -0700205 this.pktIn = getPacketIn((short) sw1DevPort);
206 this.pktIn2 = getPacketIn((short) sw1DevPort2);
Patrick Liuab1e6062014-05-05 11:12:13 -0700207
208 lastSeenTimestamp = new Date(1);
Patrick Liuab1e6062014-05-05 11:12:13 -0700209 }
210
211 @Override
212 @After
213 public void tearDown() throws Exception {
214 }
215
216 public IOFSwitch createMockSwitch(Long id) {
217 IOFSwitch mockSwitch = createNiceMock(IOFSwitch.class);
218 expect(mockSwitch.getId()).andReturn(id).anyTimes();
219 return mockSwitch;
220 }
221
222 /**
Jonathan Hart03102132014-07-01 23:22:04 -0700223 * Test set operation on lastSeenTimstamp field in Host.
Patrick Liuab1e6062014-05-05 11:12:13 -0700224 */
225 @Test
226 public void testSetLastSeenTimestamp() {
Yuta HIGUCHI91a8f502014-06-17 10:15:29 -0700227 Ethernet eth = (Ethernet) pkt1;
Jonathan Hart03102132014-07-01 23:22:04 -0700228 Host srcHost = hostManager.getSourceHostFromPacket(eth, sw1Dpid, sw1DevPort);
Patrick Liuab1e6062014-05-05 11:12:13 -0700229
Brian O'Connorc67f9fa2014-08-07 18:17:46 -0700230 floodlightProvider.addOFMessageListener(EasyMock.eq(OFType.PACKET_IN),
231 EasyMock.isA(HostManager.class));
Jonathan Hart03102132014-07-01 23:22:04 -0700232 srcHost.setLastSeenTimestamp(lastSeenTimestamp);
233 assertEquals(lastSeenTimestamp, srcHost.getLastSeenTimestamp());
Patrick Liuab1e6062014-05-05 11:12:13 -0700234 }
235 /**
Jonathan Hart03102132014-07-01 23:22:04 -0700236 * test the functionality to get the source host from Packet header
Patrick Liuab1e6062014-05-05 11:12:13 -0700237 * information.
238 */
239 @Test
Jonathan Hart03102132014-07-01 23:22:04 -0700240 public void testGetSourceHostFromPacket() {
Yuta HIGUCHI91a8f502014-06-17 10:15:29 -0700241 byte[] address = new byte[] {0x00, 0x44, 0x33, 0x22, 0x11, 0x01};
Patrick Liuab1e6062014-05-05 11:12:13 -0700242 MACAddress srcMac = new MACAddress(address);
Jonathan Hart03102132014-07-01 23:22:04 -0700243 Host host1 = new Host(srcMac,
Patrick Liuab1e6062014-05-05 11:12:13 -0700244 null,
Patrick Liuab1e6062014-05-05 11:12:13 -0700245 sw1Dpid,
246 sw1DevPort,
247 null);
248
249 /*
250 * test DHCP packet case
251 */
Yuta HIGUCHI91a8f502014-06-17 10:15:29 -0700252 Ethernet eth = (Ethernet) pkt3;
Jonathan Hart03102132014-07-01 23:22:04 -0700253 Host host2 = hostManager.getSourceHostFromPacket(eth, sw1Dpid, sw1DevPort);
254 assertEquals(host1, host2);
Patrick Liuab1e6062014-05-05 11:12:13 -0700255
256 /*
257 * test ARP packet case
258 */
Yuta HIGUCHI91a8f502014-06-17 10:15:29 -0700259 eth = (Ethernet) pkt4;
Jonathan Hart03102132014-07-01 23:22:04 -0700260 host2 = hostManager.getSourceHostFromPacket(eth, sw1Dpid, sw1DevPort);
261 assertEquals(host1, host2);
Patrick Liuab1e6062014-05-05 11:12:13 -0700262 }
263
264 /**
Jonathan Hart03102132014-07-01 23:22:04 -0700265 * This test will invoke addHost to add a new host through Packet pkt1.
TeruU5d2c9392014-06-09 20:02:02 -0700266 * @throws FloodlightModuleException
Patrick Liuab1e6062014-05-05 11:12:13 -0700267 */
268 @Test
Jonathan Hart03102132014-07-01 23:22:04 -0700269 public void testProcessPacketInAddNewHost() throws FloodlightModuleException {
270 floodlightProvider.addOFMessageListener(EasyMock.eq(OFType.PACKET_IN),
271 EasyMock.isA(HostManager.class));
Patrick Liuab1e6062014-05-05 11:12:13 -0700272 EasyMock.expectLastCall();
Jonathan Hart03102132014-07-01 23:22:04 -0700273 floodlightProvider.publishUpdate(EasyMock.isA(IUpdate.class));
Patrick Liuab1e6062014-05-05 11:12:13 -0700274 EasyMock.expectLastCall();
Jonathan Hart03102132014-07-01 23:22:04 -0700275 replay(floodlightProvider);
Patrick Liuab1e6062014-05-05 11:12:13 -0700276
Jonathan Hart03102132014-07-01 23:22:04 -0700277 hostManager.init(modContext);
278 hostManager.startUp(modContext);
Brian O'Connorc67f9fa2014-08-07 18:17:46 -0700279 Command cmd = hostManager.processPacketIn(
280 sw1, pktIn, (Ethernet) pkt1, (short) sw1DevPort);
Patrick Liuab1e6062014-05-05 11:12:13 -0700281 assertEquals(Command.CONTINUE, cmd);
282
Jonathan Hart03102132014-07-01 23:22:04 -0700283 EasyMock.verify(floodlightProvider);
Patrick Liuab1e6062014-05-05 11:12:13 -0700284 }
285
286 /**
TeruU5d2c9392014-06-09 20:02:02 -0700287 * Test ProcessPacket function.
288 * @throws FloodlightModuleException
289 */
290 @Test
291 public void testProcessPacketInHasLink() throws FloodlightModuleException {
Jonathan Hart03102132014-07-01 23:22:04 -0700292 floodlightProvider.addOFMessageListener(EasyMock.eq(OFType.PACKET_IN),
293 EasyMock.isA(HostManager.class));
TeruU5d2c9392014-06-09 20:02:02 -0700294 EasyMock.expectLastCall();
Jonathan Hart03102132014-07-01 23:22:04 -0700295 replay(floodlightProvider);
TeruU5d2c9392014-06-09 20:02:02 -0700296
Jonathan Hart03102132014-07-01 23:22:04 -0700297 hostManager.init(modContext);
298 hostManager.startUp(modContext);
Brian O'Connorc67f9fa2014-08-07 18:17:46 -0700299 Command cmd = hostManager.processPacketIn(
300 sw1, pktIn2, (Ethernet) pkt1, (short) sw1DevPort2);
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() {
Brian O'Connorc67f9fa2014-08-07 18:17:46 -0700311 Command cmd = hostManager.processPacketIn(
312 sw1, pktIn, (Ethernet) pkt0, (short) sw1DevPort);
Patrick Liuab1e6062014-05-05 11:12:13 -0700313 assertEquals(Command.STOP, cmd);
314 }
315
316 /**
Jonathan Hart03102132014-07-01 23:22:04 -0700317 * Test add a host from the information from packet.
TeruU5d2c9392014-06-09 20:02:02 -0700318 * @throws FloodlightModuleException
Patrick Liuab1e6062014-05-05 11:12:13 -0700319 */
320 @Test
Jonathan Hart03102132014-07-01 23:22:04 -0700321 public void testAddHost() throws FloodlightModuleException {
Yuta HIGUCHI91a8f502014-06-17 10:15:29 -0700322 Ethernet eth = (Ethernet) pkt1;
Patrick Liuab1e6062014-05-05 11:12:13 -0700323 Long longmac = eth.getSourceMAC().toLong();
Jonathan Hart03102132014-07-01 23:22:04 -0700324 Host srcHost = hostManager.getSourceHostFromPacket(eth, sw1Dpid, sw1DevPort);
Patrick Liuab1e6062014-05-05 11:12:13 -0700325
Brian O'Connorc67f9fa2014-08-07 18:17:46 -0700326 floodlightProvider.addOFMessageListener(EasyMock.eq(OFType.PACKET_IN),
327 EasyMock.isA(HostManager.class));
Patrick Liuab1e6062014-05-05 11:12:13 -0700328 EasyMock.expectLastCall();
Jonathan Hart03102132014-07-01 23:22:04 -0700329 floodlightProvider.publishUpdate(EasyMock.isA(IUpdate.class));
Patrick Liuab1e6062014-05-05 11:12:13 -0700330 EasyMock.expectLastCall();
Jonathan Hart03102132014-07-01 23:22:04 -0700331 replay(floodlightProvider);
Patrick Liuab1e6062014-05-05 11:12:13 -0700332
Jonathan Hart03102132014-07-01 23:22:04 -0700333 hostManager.init(modContext);
334 hostManager.startUp(modContext);
335 hostManager.addHost(longmac, srcHost);
Patrick Liuab1e6062014-05-05 11:12:13 -0700336
Jonathan Hart03102132014-07-01 23:22:04 -0700337 EasyMock.verify(floodlightProvider);
Patrick Liuab1e6062014-05-05 11:12:13 -0700338 }
339
340 /**
Jonathan Hart03102132014-07-01 23:22:04 -0700341 * Test delete a host.
TeruU5d2c9392014-06-09 20:02:02 -0700342 * @throws FloodlightModuleException
Patrick Liuab1e6062014-05-05 11:12:13 -0700343 */
344 @Test
Jonathan Hart03102132014-07-01 23:22:04 -0700345 public void testDeleteHost() throws FloodlightModuleException {
Yuta HIGUCHI91a8f502014-06-17 10:15:29 -0700346 Ethernet eth = (Ethernet) pkt1;
Jonathan Hart03102132014-07-01 23:22:04 -0700347 Host srcHost = hostManager.getSourceHostFromPacket(eth, sw1Dpid, sw1DevPort);
Patrick Liuab1e6062014-05-05 11:12:13 -0700348
Brian O'Connorc67f9fa2014-08-07 18:17:46 -0700349 floodlightProvider.addOFMessageListener(EasyMock.eq(OFType.PACKET_IN),
350 EasyMock.isA(HostManager.class));
Patrick Liuab1e6062014-05-05 11:12:13 -0700351 EasyMock.expectLastCall();
Jonathan Hart03102132014-07-01 23:22:04 -0700352 floodlightProvider.publishUpdate(EasyMock.isA(IUpdate.class));
Patrick Liuab1e6062014-05-05 11:12:13 -0700353 EasyMock.expectLastCall();
Jonathan Hart03102132014-07-01 23:22:04 -0700354 replay(floodlightProvider);
Patrick Liuab1e6062014-05-05 11:12:13 -0700355
Jonathan Hart03102132014-07-01 23:22:04 -0700356 hostManager.init(modContext);
357 hostManager.startUp(modContext);
358 hostManager.deleteHost(srcHost);
Patrick Liuab1e6062014-05-05 11:12:13 -0700359
Jonathan Hart03102132014-07-01 23:22:04 -0700360 EasyMock.verify(floodlightProvider);
Patrick Liuab1e6062014-05-05 11:12:13 -0700361 }
362
363 /**
Jonathan Hart03102132014-07-01 23:22:04 -0700364 * Test delete a host by using its source mac address.
TeruU5d2c9392014-06-09 20:02:02 -0700365 * @throws FloodlightModuleException
Patrick Liuab1e6062014-05-05 11:12:13 -0700366 */
367 @Test
Jonathan Hart03102132014-07-01 23:22:04 -0700368 public void testDeleteHostByMac() throws FloodlightModuleException {
Yuta HIGUCHI91a8f502014-06-17 10:15:29 -0700369 Ethernet eth = (Ethernet) pkt1;
Patrick Liuab1e6062014-05-05 11:12:13 -0700370 MACAddress mac = eth.getSourceMAC();
Patrick Liuab1e6062014-05-05 11:12:13 -0700371
Brian O'Connorc67f9fa2014-08-07 18:17:46 -0700372 floodlightProvider.addOFMessageListener(EasyMock.eq(OFType.PACKET_IN),
373 EasyMock.isA(HostManager.class));
Patrick Liuab1e6062014-05-05 11:12:13 -0700374 EasyMock.expectLastCall();
Jonathan Hart03102132014-07-01 23:22:04 -0700375 floodlightProvider.publishUpdate(EasyMock.isA(IUpdate.class));
Patrick Liuab1e6062014-05-05 11:12:13 -0700376 EasyMock.expectLastCall();
Jonathan Hart03102132014-07-01 23:22:04 -0700377 replay(floodlightProvider);
Patrick Liuab1e6062014-05-05 11:12:13 -0700378
Jonathan Hart03102132014-07-01 23:22:04 -0700379 hostManager.init(modContext);
380 hostManager.startUp(modContext);
381 hostManager.deleteHostByMac(mac);
TeruU5d2c9392014-06-09 20:02:02 -0700382
Jonathan Hart03102132014-07-01 23:22:04 -0700383 EasyMock.verify(floodlightProvider);
Patrick Liuab1e6062014-05-05 11:12:13 -0700384 }
Brian O'Connorc67f9fa2014-08-07 18:17:46 -0700385
386 /**
387 * Helper for building PacketIns. Defaults to a flowtable miss.
388 * @param inport the inport field value
389 * @return a PacketIn
390 */
391 private OFPacketIn getPacketIn(int inport) {
392 return ofact.buildPacketIn()
393 .setInPort(OFPort.of(inport))
394 .setReason(OFPacketInReason.NO_MATCH)
395 .build();
396 }
397
398 private UDP getUDP(IPacket payload) {
399 return (UDP) new UDP()
400 .setSourcePort((short) 5000)
401 .setDestinationPort((short) 5001)
402 .setPayload(payload);
403 }
Patrick Liuab1e6062014-05-05 11:12:13 -0700404}