--- /dev/null
+/*\r
+ * Copyright (c) 2015 Huawei, Inc. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+package org.opendaylight.nemo.renderer.openflow;\r
+\r
+import com.sun.security.sasl.util.AbstractSaslImpl;\r
+import junit.framework.TestCase;\r
+import org.junit.Assert;\r
+import org.junit.Before;\r
+import org.junit.Test;\r
+import org.opendaylight.nemo.renderer.openflow.physicalnetwork.PhyConfigLoader;\r
+import java.lang.reflect.Method;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+import junit.framework.TestCase;\r
+import org.junit.Assert;\r
+import org.junit.Before;\r
+import org.junit.Test;\r
+import org.opendaylight.nemo.renderer.openflow.FlowUtils;\r
+import org.apache.commons.lang3.tuple.ImmutableTriple;\r
+import org.opendaylight.controller.liblldp.Ethernet;\r
+import org.opendaylight.controller.liblldp.HexEncode;\r
+import org.opendaylight.controller.liblldp.NetUtils;\r
+import org.opendaylight.controller.liblldp.PacketException;\r
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;\r
+import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;\r
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;\r
+import org.opendaylight.nemo.renderer.openflow.physicalnetwork.PhyConfigLoader;\r
+import com.google.common.util.concurrent.CheckedFuture;\r
+import org.opendaylight.nemo.renderer.openflow.utils.ARP;\r
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;\r
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix;\r
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;\r
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;\r
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.*;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.dec.mpls.ttl._case.DecMplsTtl;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.dec.mpls.ttl._case.DecMplsTtlBuilder;import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.dec.nw.ttl._case.DecNwTtl;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.dec.nw.ttl._case.DecNwTtlBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.output.action._case.OutputAction;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.output.action._case.OutputActionBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.mpls.action._case.PopMplsAction;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.mpls.action._case.PopMplsActionBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.mpls.action._case.PushMplsAction;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.mpls.action._case.PushMplsActionBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.field._case.SetField;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.field._case.SetFieldBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.meters.Meter;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.meters.MeterBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.meters.MeterKey;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.Table;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.TableKey;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowKey;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Instructions;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.InstructionsBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.*;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.apply.actions._case.ApplyActions;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.apply.actions._case.ApplyActionsBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.go.to.table._case.GoToTable;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.go.to.table._case.GoToTableBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.write.metadata._case.WriteMetadata;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.write.metadata._case.WriteMetadataBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.*;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.EtherType;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.BandId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterBandType;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterFlags;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.Drop;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.DropBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.MeterBandHeadersBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.MeterBandHeader;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.MeterBandHeaderBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.MeterBandHeaderKey;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.meter.band.header.MeterBandTypesBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetDestinationBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetSourceBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetTypeBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.*;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4Match;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.layer._3.match.Ipv4MatchBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketProcessingService; import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.PacketReceived;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.TransmitPacketInput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.TransmitPacketInputBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.PhysicalNetwork;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.PhysicalLinks;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.PhysicalPaths;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.physical.links.PhysicalLink;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.physical.nodes.PhysicalNode;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.physical.paths.PhysicalPath;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.physical.paths.PhysicalPathBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.node.instance.PhysicalPort;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.VirtualNetwork;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.arps.VirtualArp;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.arps.VirtualArpBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.links.VirtualLink;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.nodes.VirtualNode;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.networks.virtual.network.virtual.paths.VirtualPath;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.virtual.network.rev151010.virtual.node.instance.VirtualPort;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.intent.vn.mapping.results.UserIntentVnMapping;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.intent.vn.mapping.results.user.intent.vn.mapping.IntentVnMappingResult;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.intent.vn.mapping.results.user.intent.vn.mapping.intent.vn.mapping.result.VirtualResource;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.vn.pn.mapping.results.UserVnPnMapping;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.intent.mapping.result.rev151010.vn.pn.mapping.results.user.vn.pn.mapping.VnPnMappingResult;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.IntentId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.MatchItemName;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.PropertyName;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.UserId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.*;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.operations.Operation;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.users.User;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.flow.instance.MatchItem;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.node.instance.Property;\r
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.object.rev151010.match.item.instance.MatchItemValue;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.PhysicalPortId;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+import java.lang.reflect.Method;\r
+import java.math.BigInteger;\r
+import java.util.*;\r
+import static org.junit.Assert.*;\r
+import static org.mockito.Mockito.*;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.engine.common.rev151010.VirtualNetworkId;\r
+\r
+/**\r
+ * Created by zhangmeng on 2015/12/14.\r
+ */\r
+public class FlowUtilsTest extends TestCase {\r
+ private FlowUtils flowUtils;\r
+ private DataBroker dataBroker;\r
+ private PacketProcessingService packetProcessingService;\r
+ private PhyConfigLoader phyConfigLoader;\r
+ @Before\r
+ public void setUp() throws Exception {\r
+ dataBroker = mock(DataBroker.class);\r
+ packetProcessingService = mock(PacketProcessingService.class);\r
+ phyConfigLoader = mock(PhyConfigLoader.class);\r
+ flowUtils = new FlowUtils(dataBroker,packetProcessingService,phyConfigLoader);\r
+ }\r
+\r
+ @Test\r
+ public void testInit() throws Exception {\r
+ List<PhysicalNode> physicalNodes = new ArrayList<PhysicalNode>();\r
+ flowUtils.init(physicalNodes);\r
+ }\r
+\r
+ @Test\r
+ public void testUpdateFlowTable() throws Exception {\r
+\r
+ }\r
+\r
+ @Test\r
+ public void testDeleteFlowEntries() throws Exception {\r
+\r
+ }\r
+\r
+ @Test\r
+ public void testHandleArp() throws Exception {\r
+\r
+ }\r
+\r
+ @Test\r
+ public void testClose() throws Exception {\r
+ flowUtils.close();\r
+ Assert.assertTrue(flowUtils != null);\r
+ }\r
+\r
+ @Test\r
+ public void testAssignMPLSLabelForPPath() throws Exception {\r
+ PhysicalPath physicalPath = mock(PhysicalPath.class);\r
+ PhysicalPathId physicalPathId = mock(PhysicalPathId.class);\r
+ PhysicalLinkId physicalLinkId = mock(PhysicalLinkId.class);\r
+ PhysicalNodeId physicalDestNodeId = mock(PhysicalNodeId.class);\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.physical.links.PhysicalLink\r
+ physicalLink = mock(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.physical.links.PhysicalLink.class);\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.path.instance.PhysicalLink\r
+ physicalLink_path = mock(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.path.instance.PhysicalLink.class);\r
+ List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.physical.links.PhysicalLink>\r
+ physicalLinksList = new ArrayList<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.network.physical.links.PhysicalLink>();\r
+ List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.path.instance.PhysicalLink>\r
+ physicalLinksInPath = new ArrayList<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.generic.physical.network.rev151010.physical.path.instance.PhysicalLink>();\r
+\r
+ when(physicalPath.getPhysicalLink()).thenReturn(physicalLinksInPath);\r
+ when(physicalPath.getPathId()).thenReturn(physicalPathId);\r
+\r
+ flowUtils.assignMPLSLabelForPPath(physicalPath, physicalLinksList);\r
+ verify(physicalPath).getPhysicalLink();\r
+ verify(physicalPath).getPathId();\r
+\r
+ physicalLinksList.add(physicalLink);\r
+ physicalLinksInPath.add(physicalLink_path);\r
+ when(physicalLink_path.getLinkId()).thenReturn(physicalLinkId);\r
+ when(physicalLink.getLinkId()).thenReturn(physicalLinkId);\r
+ when(physicalLinkId.getValue())\r
+ .thenReturn(new String("1"))\r
+ .thenReturn(new String("2"))\r
+ .thenReturn(new String("1"))\r
+ .thenReturn(new String("1"));\r
+ flowUtils.assignMPLSLabelForPPath(physicalPath, physicalLinksList);\r
+ verify(physicalPath,times(2)).getPathId();\r
+ verify(physicalLink).getLinkId();\r
+ verify(physicalLink_path).getLinkId();\r
+ verify(physicalLinkId,times(2)).getValue();\r
+\r
+ when(physicalLink.getDestNodeId()).thenReturn(physicalDestNodeId);\r
+ flowUtils.assignMPLSLabelForPPath(physicalPath, physicalLinksList);\r
+ verify(physicalLinkId,times(4)).getValue();\r
+ verify(physicalPath,times(3)).getPathId();\r
+ }\r
+\r
+ @Test\r
+ public void testTheLastTwoPrivateMethod() throws Exception{\r
+ Class<FlowUtils> class1 = FlowUtils.class;\r
+\r
+ //test generateDefaultGatewayIpAddress\r
+ String ipPrefix = new String("192.168.1.1/16");\r
+ IpAddress ipAddress;\r
+\r
+ Method method = class1.getDeclaredMethod("generateDefaultGatewayIpAddress", new Class[]{String.class});\r
+ method.setAccessible(true);\r
+ ipAddress =(IpAddress) method.invoke(flowUtils,new Object[]{ipPrefix});\r
+ Assert.assertTrue(ipAddress != null);\r
+\r
+ //test convertMacAddressToByteArray6\r
+ MacAddress macAddress = mock(MacAddress.class);\r
+ byte[] result;\r
+ Method method1 = class1.getDeclaredMethod("convertMacAddressToByteArray6", new Class[]{MacAddress.class});\r
+ method1.setAccessible(true);\r
+ when(macAddress.getValue()).thenReturn(new String("2001:da8:215:3f0:847a:4267:b2a3:892f"));\r
+ result = (byte[])method1.invoke(flowUtils, macAddress);\r
+ verify(macAddress).getValue();\r
+ Assert.assertTrue(result.length != 0);\r
+ }\r
+\r
+ @Test\r
+ public void testConvertByteArray6ToMacAddress() throws Exception{\r
+ Class<FlowUtils> class1 = FlowUtils.class;\r
+ Method method = class1.getDeclaredMethod("convertByteArray6ToMacAddress",new Class[]{byte[].class});\r
+ method.setAccessible(true);\r
+ Method method1 = class1.getDeclaredMethod("convertMacAddressToByteArray6", new Class[]{MacAddress.class});\r
+ method1.setAccessible(true);\r
+\r
+ MacAddress result;\r
+ MacAddress macAddress = mock(MacAddress.class);\r
+ byte[] byteArray;\r
+\r
+ when(macAddress.getValue()).thenReturn(new String("2001:da8:215:3f0:847a:4267:b2a3:892f"));\r
+ byteArray = (byte[])method1.invoke(flowUtils, macAddress);\r
+ result = (MacAddress)method.invoke(flowUtils,byteArray);\r
+ Assert.assertTrue(result != null);\r
+ }\r
+\r
+ @Test\r
+ public void testConvertByteArray4ToIpAddress() throws Exception{\r
+ Class<FlowUtils> class1 = FlowUtils.class;\r
+ Method method = class1.getDeclaredMethod("convertByteArray4ToIpAddress",new Class[]{byte[].class});\r
+ method.setAccessible(true);\r
+\r
+ IpAddress result;\r
+ byte[] byteArray = "192.168.1.1".getBytes();\r
+ result = (IpAddress)method.invoke(flowUtils,byteArray);\r
+ Assert.assertTrue(result != null);\r
+ }\r
+\r
+ @Test\r
+ public void testConvertIpAddressToIpPrefix() throws Exception{\r
+ Class<FlowUtils> class1 = FlowUtils.class;\r
+ Method method = class1.getDeclaredMethod("convertIpAddressToIpPrefix", new Class[]{IpAddress.class});\r
+ method.setAccessible(true);\r
+\r
+ IpAddress ipAddress = mock(IpAddress.class);\r
+ Ipv4Address ipv4Address = mock(Ipv4Address.class);\r
+ IpPrefix result;\r
+\r
+ when(ipAddress.getIpv4Address()).thenReturn(ipv4Address);\r
+ when(ipv4Address.getValue()).thenReturn(new String("192.168.1.1"));\r
+ result = (IpPrefix)method.invoke(flowUtils,ipAddress);\r
+ Assert.assertTrue(result != null);\r
+ }\r
+\r
+ @Test\r
+ public void testConvertNodeConnectorRefToPhysicalNodeId() throws Exception{\r
+ }\r
+ @Test\r
+ public void testConvertNodeConnectorRefToPhysicalPortId() throws Exception{\r
+ }\r
+ @Test\r
+ public void testCreateFlowPath_CreateTablePath_CreateNodePath() throws Exception{\r
+ Class<FlowUtils> class1 = FlowUtils.class;\r
+ Method method = class1.getDeclaredMethod("createFlowPath", new Class[]{NodeId.class, Short.class, FlowId.class});\r
+ method.setAccessible(true);\r
+\r
+ NodeId nodeId = mock(NodeId.class);\r
+ Short tableId = 1;\r
+ FlowId flowId = mock(FlowId.class);\r
+ InstanceIdentifier<Flow> instanceIdentifier = mock(InstanceIdentifier.class);\r
+\r
+ instanceIdentifier = (InstanceIdentifier<Flow>) method.invoke(flowUtils,nodeId,tableId,flowId);\r
+ Assert.assertTrue(instanceIdentifier != null);\r
+ }\r
+\r
+ @Test\r
+ public void testCreateNodeRef() throws Exception{\r
+ }\r
+ @Test\r
+ public void testCreateNodeId() throws Exception{\r
+ Class<FlowUtils> class1 = FlowUtils.class;\r
+ Method method = class1.getDeclaredMethod("createNodeId", new Class[]{PhysicalNodeId.class});\r
+ method.setAccessible(true);\r
+\r
+ PhysicalNodeId physicalNodeId = mock(PhysicalNodeId.class);\r
+ NodeId result;\r
+\r
+ when(physicalNodeId.getValue()).thenReturn(new String("test"));\r
+ result = (NodeId) method.invoke(flowUtils,physicalNodeId);\r
+ Assert.assertTrue(result != null);\r
+ }\r
+ @Test\r
+ public void testCreateNodeConnectorRef_CreateNodeConnectorPath_CreateNodePath_CreateNodeConnectorId() throws Exception{\r
+ Class<FlowUtils> class1 = FlowUtils.class;\r
+ Method method = class1.getDeclaredMethod("createNodeConnectorRef", new Class[]{PhysicalNodeId.class, PhysicalPortId.class});\r
+ method.setAccessible(true);\r
+\r
+ PhysicalNodeId physicalNodeId = mock(PhysicalNodeId.class);\r
+ PhysicalPortId physicalPortId = mock(PhysicalPortId.class);\r
+ NodeConnectorRef result;\r
+\r
+ when(physicalNodeId.getValue()).thenReturn(new String("test"));\r
+ when(physicalPortId.getValue()).thenReturn(new String("test"));\r
+ result = (NodeConnectorRef)method.invoke(flowUtils,physicalNodeId,physicalPortId);\r
+ Assert.assertTrue(result != null);\r
+ }\r
+ @Test\r
+ public void testBaseFlowBuilder() throws Exception{\r
+ Class<FlowUtils> class1 = FlowUtils.class;\r
+ Method method = class1.getDeclaredMethod("baseFlowBuilder");\r
+ method.setAccessible(true);\r
+\r
+ method.invoke(flowUtils);\r
+ }\r
+ @Test\r
+ public void testCreateArpPacket() throws Exception{\r
+ Class<FlowUtils> class1 = FlowUtils.class;\r
+ Method method = class1.getDeclaredMethod("createArpPacket",new Class[]{Ethernet.class,ARP.class});\r
+ method.setAccessible(true);\r
+\r
+ Ethernet ethernet = mock(Ethernet.class);\r
+ ARP arp = mock(ARP.class);\r
+ byte[] byteArray = "192.168.1.1".getBytes();\r
+ byte[] result;\r
+\r
+ doNothing().when(ethernet).setRawPayload(any(byte[].class));\r
+ when(ethernet.serialize()).thenReturn(byteArray);\r
+ when(arp.serialize()).thenReturn(byteArray);\r
+\r
+ result = (byte[]) method.invoke(flowUtils,ethernet,arp);\r
+ Assert.assertTrue(result.equals(byteArray));\r
+ }\r
+ @Test\r
+ public void testSendPacketOut() throws Exception{\r
+ }\r
+ @Test\r
+ public void testCreateMatch_getMatchItem() throws Exception{\r
+ Class<FlowUtils> class1 = FlowUtils.class;\r
+ Method method = class1.getDeclaredMethod("createMatch", new Class[]{UserId.class,\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Flow.class,\r
+ PhysicalPort.class});\r
+ method.setAccessible(true);\r
+\r
+ UserId userId = mock(UserId.class);\r
+ Match result;\r
+ MatchItemValue matchItemValue = mock(MatchItemValue.class);\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Flow\r
+ nemoFlow = mock(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Flow.class);\r
+ PhysicalPort physicalPort = mock(PhysicalPort.class);\r
+ MatchItem matchItem = mock(MatchItem.class);\r
+ PhysicalPortId physicalPortId = mock(PhysicalPortId.class);\r
+ List<MatchItem> matchItems = new ArrayList<MatchItem>();\r
+\r
+ matchItems.add(matchItem);\r
+\r
+ when(nemoFlow.getMatchItem()).thenReturn(matchItems);\r
+\r
+ //get into method "getMatchItem" args(matchitem src-ip) args(matchitem dst-ip)\r
+ when(matchItem.getMatchItemName())\r
+ .thenReturn(new MatchItemName("src-ip")) //test src\r
+ .thenReturn(new MatchItemName("dst-ip"));//test dst\r
+\r
+ //return out\r
+ when(matchItem.getMatchItemValue()).thenReturn(matchItemValue);\r
+ when(matchItemValue.getStringValue()).thenReturn(new String("192.168.1.1/24"));\r
+ when(physicalPort.getPortId()).thenReturn(physicalPortId);\r
+ when(physicalPortId.getValue()).thenReturn(new String("test"));\r
+\r
+ result = (Match)method.invoke(flowUtils,null,nemoFlow,physicalPort);\r
+ Assert.assertTrue(result != null);\r
+ }\r
+ @Test\r
+ public void testConfigFlowTableEntryForOperation() throws Exception{\r
+ Class<FlowUtils> class1 = FlowUtils.class;\r
+ Method method = class1.getDeclaredMethod("configFlowTableEntryForOperation",\r
+ new Class[]{UserId.class,\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Flow.class,\r
+ PhysicalPort.class,\r
+ PhysicalPath.class,\r
+ short.class,\r
+ boolean.class});\r
+ method.setAccessible(true);\r
+\r
+ UserId userId = mock(UserId.class);\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Flow\r
+ nemoFlow = mock(org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.Flow.class);\r
+ PhysicalPort inPhysicalPort = mock(PhysicalPort.class);\r
+ PhysicalPath outPhysicalPath = mock(PhysicalPath.class);\r
+ short operationPriority ;\r
+ boolean layer3Forwarding;\r
+\r
+ }\r
+}
\ No newline at end of file