/* * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.groupbasedpolicy.renderer.ofoverlay.arp; import java.util.concurrent.Future; import org.junit.Assert; import org.junit.Assume; import org.junit.Before; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.mockito.Matchers; import org.mockito.Mockito; import org.opendaylight.controller.liblldp.Ethernet; import org.opendaylight.controller.liblldp.Packet; import org.opendaylight.controller.liblldp.PacketException; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketProcessingService; import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.TransmitPacketInput; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.RpcResult; import com.google.common.util.concurrent.Futures; public class ArpSenderTest { private PacketProcessingService packetService; @Before public void init() { packetService = Mockito.mock(PacketProcessingService.class); Future<RpcResult<Void>> future = Futures.immediateCheckedFuture(null); Mockito.when(packetService.transmitPacket(Matchers.any(TransmitPacketInput.class))).thenReturn(future); } @Test public void floodArpTest() throws PacketException { ArpSender arpSender = new ArpSender(packetService); MacAddress senderMac = new MacAddress("00:00:00:00:00:01"); Ipv4Address senderAddress = new Ipv4Address("192.168.0.1"); Ipv4Address targetAddress = new Ipv4Address("192.168.0.2"); InstanceIdentifier<Node> nodeIid = InstanceIdentifier.builder(Nodes.class).child(Node.class, new NodeKey(new NodeId("node1"))).build(); ArpMessageAddress arpAddress = new ArpMessageAddress(senderMac, senderAddress); arpSender.floodArp(arpAddress, targetAddress, nodeIid); ArgumentCaptor<TransmitPacketInput> argument = ArgumentCaptor.forClass(TransmitPacketInput.class); Mockito.verify(packetService).transmitPacket(argument.capture()); Assert.assertEquals(nodeIid, argument.getValue().getNode().getValue()); Packet ethernet = new Ethernet().deserialize(argument.getValue().getPayload(), 0, argument.getValue().getPayload().length); Packet potentialArp = ethernet.getPayload(); // TODO find better solution (Jenkins is producing ethernet.getPayload() -> null randomly) Assume.assumeNotNull(potentialArp); Assert.assertTrue(potentialArp instanceof Arp); Arp arp = (Arp) potentialArp; Assert.assertArrayEquals(ArpUtils.ipToBytes(senderAddress), arp.getSenderProtocolAddress()); Assert.assertArrayEquals(ArpUtils.ipToBytes(targetAddress), arp.getTargetProtocolAddress()); Assert.assertArrayEquals(ArpUtils.macToBytes(senderMac), arp.getSenderHardwareAddress()); } }