Fixup Augmentable and Identifiable methods changing
[openflowplugin.git] / openflowplugin / src / test / java / org / opendaylight / openflowplugin / openflow / md / core / sal / convertor / PacketOutConvertorTest.java
index 9f0409efb8472e0e5c8df51d0d55763f6f1155bc..416ce84673760cff8d33c42a42242cb9f14eeffb 100644 (file)
-/*\r
- * Copyright (c) 2014 Cisco Systems, 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
-\r
-package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;\r
-\r
-import java.math.BigInteger;\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-import org.junit.Assert;\r
-import org.junit.Before;\r
-import org.junit.Test;\r
-import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;\r
-import org.opendaylight.openflowplugin.api.OFConstants;\r
-import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;\r
-import org.opendaylight.openflowplugin.openflow.md.util.InventoryDataServiceUtil;\r
-import org.opendaylight.openflowplugin.openflow.md.util.OpenflowPortsUtil;\r
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCaseBuilder;\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.list.ActionKey;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.OutputPortValues;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRef;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;\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.openflow.common.action.rev150203.actions.grouping.Action;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.ActionBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PacketOutInput;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.ConnectionCookie;\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.yangtools.yang.binding.InstanceIdentifier;\r
-\r
-/**\r
- * Created by Jakub Toth jatoth@cisco.com on 9/23/14.\r
- */\r
-\r
-public class PacketOutConvertorTest {\r
-\r
-    @Before\r
-    public void init() {\r
-        OpenflowPortsUtil.init();\r
-    }\r
-\r
-    /**\r
-     * Test for {@link PacketOutConvertor} with null parameters\r
-     */\r
-    @Test\r
-    public void toPacketOutInputAllParmNullTest() {\r
-\r
-        TransmitPacketInputBuilder transmitPacketInputBuilder = new TransmitPacketInputBuilder();\r
-\r
-        Long bufferId = null;\r
-\r
-        String NODE_ID = "0";\r
-        String port = "0";\r
-\r
-        NodeRef ref = createNodeRef(NODE_ID);\r
-        NodeConnectorKey nodeConnKey = PacketOutConvertorTest.createNodeConnKey(NODE_ID, port);\r
-        NodeConnectorRef nEgressConfRef = new NodeConnectorRef(\r
-                createNodeConnRef(NODE_ID, nodeConnKey));\r
-\r
-        transmitPacketInputBuilder.setBufferId(bufferId);\r
-        transmitPacketInputBuilder.setConnectionCookie(null);\r
-        transmitPacketInputBuilder.setAction(null);\r
-        transmitPacketInputBuilder.setNode(ref);\r
-        transmitPacketInputBuilder.setPayload(null);\r
-        transmitPacketInputBuilder.setEgress(nEgressConfRef);\r
-        transmitPacketInputBuilder.setIngress(null);\r
-        TransmitPacketInput transmitPacketInput = transmitPacketInputBuilder\r
-                .build();\r
-\r
-        Short version = (short) 0x04;\r
-        Long xid = null;\r
-        PacketOutInput message = PacketOutConvertor.toPacketOutInput(\r
-                transmitPacketInput, version, null, null);\r
-\r
-        //FIXME : this has to be fixed along with actions changed in openflowjava\r
-\r
-        Assert.assertEquals(PacketOutConvertorTest.buildActionForNullTransmitPacketInputAction(nodeConnKey,\r
-                version), message.getAction());\r
-\r
-        Assert.assertEquals(OFConstants.OFP_NO_BUFFER, message.getBufferId());\r
-        Assert.assertEquals(new PortNumber(0xfffffffdL), message.getInPort());\r
-        Assert.assertEquals(version, message.getVersion());\r
-        Assert.assertEquals(xid, message.getXid());\r
-        Assert.assertArrayEquals(transmitPacketInput.getPayload(), message.getData());\r
-    }\r
-\r
-    /**\r
-     * Test for PacketOutConvertor\r
-     */\r
-    @Test\r
-    public void toPacketOutInputAllParmTest() {\r
-        TransmitPacketInputBuilder transmitPacketInputBuilder = new TransmitPacketInputBuilder();\r
-\r
-        List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action> actionList = new ArrayList<>();\r
-        org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder ab = new org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder();\r
-\r
-        OutputActionBuilder output = new OutputActionBuilder();\r
-        output.setMaxLength(OFConstants.OFPCML_NO_BUFFER);\r
-        Uri value = new Uri(OutputPortValues.CONTROLLER.toString());\r
-        output.setOutputNodeConnector(value);\r
-        ab.setAction(new OutputActionCaseBuilder().setOutputAction(\r
-                output.build()).build());\r
-        ab.setOrder(0);\r
-        ab.setKey(new ActionKey(0));\r
-        actionList.add(ab.build());\r
-\r
-        Long bufferId = 0xfL;\r
-\r
-        Long valueForCookie = 0xeL;\r
-        ConnectionCookie connCook = new ConnectionCookie(valueForCookie);\r
-\r
-        String NODE_ID = "node:1";\r
-\r
-        NodeRef ref = createNodeRef(NODE_ID);\r
-\r
-        String portO = "0xfffffffd";\r
-        NodeConnectorKey nEgrConKey = PacketOutConvertorTest.createNodeConnKey(NODE_ID, portO);\r
-        NodeConnectorRef nEgressConfRef = new NodeConnectorRef(\r
-                createNodeConnRef(NODE_ID, nEgrConKey));\r
-\r
-        String inPort = "2";\r
-        NodeConnectorKey nIngrConKey = PacketOutConvertorTest.createNodeConnKey(NODE_ID, inPort);\r
-        NodeConnectorRef nIngressConRef = new NodeConnectorRef(\r
-                createNodeConnRef(NODE_ID, nIngrConKey));\r
-\r
-        String _string = new String("sendOutputMsg_TEST");\r
-        byte[] msg = _string.getBytes();\r
-\r
-        byte[] payload = msg;\r
-\r
-        transmitPacketInputBuilder.setAction(actionList);\r
-        transmitPacketInputBuilder.setBufferId(bufferId);\r
-        transmitPacketInputBuilder.setConnectionCookie(connCook);\r
-        transmitPacketInputBuilder.setEgress(nEgressConfRef);\r
-        transmitPacketInputBuilder.setIngress(nIngressConRef);\r
-        transmitPacketInputBuilder.setNode(ref);\r
-        transmitPacketInputBuilder.setPayload(payload);\r
-\r
-        TransmitPacketInput transmitPacketInput = transmitPacketInputBuilder\r
-                .build();\r
-\r
-        short version = (short) 0x04;\r
-        byte[] datapathIdByte = new byte[EncodeConstants.SIZE_OF_LONG_IN_BYTES];\r
-        for (int i = 0; i < datapathIdByte.length; i++) {\r
-            datapathIdByte[i] = 1;\r
-        }\r
-        BigInteger datapathId = new BigInteger(1, datapathIdByte);\r
-        Long xid = 0xfffffL;\r
-\r
-        OpenflowPortsUtil.init();\r
-\r
-        PacketOutInput message = PacketOutConvertor.toPacketOutInput(\r
-                transmitPacketInput, version, xid, datapathId);\r
-\r
-        Assert.assertEquals(transmitPacketInput.getBufferId(),\r
-                message.getBufferId());\r
-        Assert.assertEquals("PortNumber [_value=" + inPort + "]", message\r
-                .getInPort().toString());\r
-        Assert.assertEquals((Object) version,\r
-                Short.valueOf(message.getVersion()));\r
-        Assert.assertEquals(xid, message.getXid());\r
-        Assert.assertEquals(\r
-                ActionConvertor.getActions(actionList, version, datapathId, null),\r
-                message.getAction());\r
-        Assert.assertArrayEquals(transmitPacketInput.getPayload(), message.getData());\r
-    }\r
-\r
-    /**\r
-     * create action\r
-     *\r
-     * @param nConKey\r
-     * @param version\r
-     * @return\r
-     */\r
-    private static List<Action> buildActionForNullTransmitPacketInputAction(\r
-            final NodeConnectorKey nConKey, final short version) {\r
-\r
-        PortNumber outPort = getPortNumber(nConKey, version);\r
-        List<Action> actions = new ArrayList<>();\r
-        ActionBuilder aBuild = new ActionBuilder();\r
-\r
-        org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.OutputActionCaseBuilder outputActionCaseBuilder =\r
-                new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.OutputActionCaseBuilder();\r
-\r
-        org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.output.action._case.OutputActionBuilder outputActionBuilder =\r
-                new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.output.action._case.OutputActionBuilder();\r
-\r
-        outputActionBuilder.setPort(outPort);\r
-        outputActionBuilder.setMaxLength(0xffff);\r
-        outputActionCaseBuilder.setOutputAction(outputActionBuilder.build());\r
-        aBuild.setActionChoice(outputActionCaseBuilder.build());\r
-        actions.add(aBuild.build());\r
-        return actions;\r
-    }\r
-\r
-    /**\r
-     * create PortNumber\r
-     *\r
-     * @param nConKey\r
-     * @param ofVersion\r
-     * @return\r
-     */\r
-    private static PortNumber getPortNumber(final NodeConnectorKey nConKey,\r
-                                            final Short ofVersion) {\r
-        Long port = InventoryDataServiceUtil.portNumberfromNodeConnectorId(\r
-                OpenflowVersion.get(ofVersion), nConKey.getId());\r
-        return new PortNumber(port);\r
-    }\r
-\r
-    /**\r
-     * create NodeConnectorRef\r
-     *\r
-     * @param nodeId\r
-     * @param nConKey\r
-     * @return\r
-     */\r
-    private static NodeConnectorRef createNodeConnRef(final String nodeId,\r
-                                                      final NodeConnectorKey nConKey) {\r
-\r
-        InstanceIdentifier<NodeConnector> path = InstanceIdentifier\r
-                .<Nodes>builder(Nodes.class)\r
-                .<Node, NodeKey>child(Node.class,\r
-                        new NodeKey(new NodeId(nodeId)))\r
-                .<NodeConnector, NodeConnectorKey>child(NodeConnector.class,\r
-                        nConKey).build();\r
-\r
-        return new NodeConnectorRef(path);\r
-    }\r
-\r
-    /**\r
-     * create NodeConnectorKey\r
-     *\r
-     * @param nodeId\r
-     * @param port\r
-     * @return\r
-     */\r
-    private static NodeConnectorKey createNodeConnKey(final String nodeId,\r
-                                                      final String port) {\r
-        StringBuilder sBuild = new StringBuilder(nodeId).append(':').append(\r
-                port);\r
-\r
-        return new NodeConnectorKey(new NodeConnectorId(sBuild.toString()));\r
-    }\r
-\r
-    /**\r
-     * create NodeRef\r
-     *\r
-     * @param nodeId\r
-     * @return\r
-     */\r
-    private static NodeRef createNodeRef(final String nodeId) {\r
-        NodeKey key = new NodeKey(new NodeId(nodeId));\r
-        InstanceIdentifier<Node> path = InstanceIdentifier\r
-                .<Nodes>builder(Nodes.class)\r
-                .<Node, NodeKey>child(Node.class, key).build();\r
-        return new NodeRef(path);\r
-    }\r
-}\r
+/*
+ * Copyright (c) 2014 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.openflowplugin.openflow.md.core.sal.convertor;
+
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
+import org.opendaylight.openflowplugin.api.OFConstants;
+import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action.data.ActionConvertorData;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.PacketOutConvertorData;
+import org.opendaylight.openflowplugin.openflow.md.util.InventoryDataServiceUtil;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.output.action._case.OutputActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.OutputPortValues;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRef;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey;
+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.openflow.common.action.rev150203.actions.grouping.Action;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.ActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PacketOutInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.ConnectionCookie;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.TransmitPacketInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.packet.service.rev130709.TransmitPacketInputBuilder;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+
+/**
+ * Created by Jakub Toth jatoth@cisco.com on 9/23/14.
+ */
+
+public class PacketOutConvertorTest {
+
+    private ConvertorManager convertorManager;
+
+    @Before
+    public void setUp() {
+        convertorManager = ConvertorManagerFactory.createDefaultManager();
+    }
+
+    /**
+     * Test for {@link PacketOutConvertor} with null parameters.
+     */
+    @Test
+    public void toPacketOutInputAllParmNullTest() {
+
+        TransmitPacketInputBuilder transmitPacketInputBuilder = new TransmitPacketInputBuilder();
+
+        Long bufferId = null;
+
+        String nodeId = "0";
+        String port = "0";
+
+        NodeRef ref = createNodeRef(nodeId);
+        NodeConnectorKey nodeConnKey = PacketOutConvertorTest.createNodeConnKey(nodeId, port);
+        NodeConnectorRef egressConfRef = new NodeConnectorRef(
+                createNodeConnRef(nodeId, nodeConnKey));
+
+        transmitPacketInputBuilder.setBufferId(bufferId);
+        transmitPacketInputBuilder.setConnectionCookie(null);
+        transmitPacketInputBuilder.setAction(null);
+        transmitPacketInputBuilder.setNode(ref);
+        transmitPacketInputBuilder.setPayload(null);
+        transmitPacketInputBuilder.setEgress(egressConfRef);
+        transmitPacketInputBuilder.setIngress(null);
+        TransmitPacketInput transmitPacketInput = transmitPacketInputBuilder
+                .build();
+
+        Short version = (short) 0x04;
+        Long xid = null;
+        PacketOutConvertorData data = new PacketOutConvertorData(version);
+        PacketOutInput message = convert(transmitPacketInput, data);
+
+        //FIXME : this has to be fixed along with actions changed in openflowjava
+
+        Assert.assertEquals(buildActionForNullTransmitPacketInputAction(nodeConnKey, version), message.getAction());
+
+        Assert.assertEquals(OFConstants.OFP_NO_BUFFER, message.getBufferId());
+        Assert.assertEquals(new PortNumber(0xfffffffdL), message.getInPort());
+        Assert.assertEquals(version, message.getVersion());
+        Assert.assertEquals(xid, message.getXid());
+        Assert.assertArrayEquals(transmitPacketInput.getPayload(), message.getData());
+    }
+
+    /**
+     * Test for PacketOutConvertor.
+     */
+    @Test
+    public void toPacketOutInputAllParmTest() {
+        org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder ab =
+                new org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder();
+
+        OutputActionBuilder output = new OutputActionBuilder();
+        output.setMaxLength(OFConstants.OFPCML_NO_BUFFER);
+        Uri value = new Uri(OutputPortValues.CONTROLLER.toString());
+        output.setOutputNodeConnector(value);
+        ab.setAction(new OutputActionCaseBuilder().setOutputAction(
+                output.build()).build());
+        ab.setOrder(0);
+        ab.withKey(new ActionKey(0));
+
+        List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action> actionList =
+                new ArrayList<>();
+        actionList.add(ab.build());
+
+        Long bufferId = 0xfL;
+
+        Long valueForCookie = 0xeL;
+        ConnectionCookie connCook = new ConnectionCookie(valueForCookie);
+
+        String nodeId = "node:1";
+
+        NodeRef ref = createNodeRef(nodeId);
+
+        String portO = "0xfffffffd";
+        NodeConnectorKey egrConKey = PacketOutConvertorTest.createNodeConnKey(nodeId, portO);
+        NodeConnectorRef egressConfRef = new NodeConnectorRef(
+                createNodeConnRef(nodeId, egrConKey));
+
+        String inPort = "2";
+        NodeConnectorKey ingrConKey = PacketOutConvertorTest.createNodeConnKey(nodeId, inPort);
+        NodeConnectorRef ingressConRef = new NodeConnectorRef(
+                createNodeConnRef(nodeId, ingrConKey));
+
+        String string = new String("sendOutputMsg_TEST");
+        byte[] msg = string.getBytes();
+
+        byte[] payload = msg;
+
+        TransmitPacketInputBuilder transmitPacketInputBuilder = new TransmitPacketInputBuilder();
+        transmitPacketInputBuilder.setAction(actionList);
+        transmitPacketInputBuilder.setBufferId(bufferId);
+        transmitPacketInputBuilder.setConnectionCookie(connCook);
+        transmitPacketInputBuilder.setEgress(egressConfRef);
+        transmitPacketInputBuilder.setIngress(ingressConRef);
+        transmitPacketInputBuilder.setNode(ref);
+        transmitPacketInputBuilder.setPayload(payload);
+
+        final TransmitPacketInput transmitPacketInput = transmitPacketInputBuilder.build();
+
+        Short version = (short) 0x04;
+        byte[] datapathIdByte = new byte[EncodeConstants.SIZE_OF_LONG_IN_BYTES];
+        for (int i = 0; i < datapathIdByte.length; i++) {
+            datapathIdByte[i] = 1;
+        }
+        BigInteger datapathId = new BigInteger(1, datapathIdByte);
+        Long xid = 0xfffffL;
+
+        PacketOutConvertorData data = new PacketOutConvertorData(version);
+        data.setXid(xid);
+        data.setDatapathId(datapathId);
+        PacketOutInput message = convert(transmitPacketInput, data);
+
+        Assert.assertEquals(transmitPacketInput.getBufferId(), message.getBufferId());
+        Assert.assertEquals(Long.valueOf(inPort), message.getInPort().getValue());
+        Assert.assertEquals(version, message.getVersion());
+        Assert.assertEquals(xid, message.getXid());
+
+        ActionConvertorData actionConvertorData = new ActionConvertorData(version);
+        actionConvertorData.setDatapathId(datapathId);
+
+        Optional<List<Action>> actionsOptional = convertorManager.convert(actionList, actionConvertorData);
+
+        List<Action> actions = actionsOptional.orElse(Collections.emptyList());
+        Assert.assertEquals(actions, message.getAction());
+        Assert.assertArrayEquals(transmitPacketInput.getPayload(), message.getData());
+    }
+
+    private static List<Action> buildActionForNullTransmitPacketInputAction(
+            final NodeConnectorKey nodeConKey, final short version) {
+
+        PortNumber outPort = getPortNumber(nodeConKey, version);
+
+        org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice
+            .OutputActionCaseBuilder outputActionCaseBuilder =
+                new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping
+                    .action.choice.OutputActionCaseBuilder();
+
+        org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice
+            .output.action._case.OutputActionBuilder outputActionBuilder =
+                new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping
+                    .action.choice.output.action._case.OutputActionBuilder();
+
+        outputActionBuilder.setPort(outPort);
+        outputActionBuilder.setMaxLength(0xffff);
+        outputActionCaseBuilder.setOutputAction(outputActionBuilder.build());
+        ActionBuilder actionBuilder = new ActionBuilder();
+        actionBuilder.setActionChoice(outputActionCaseBuilder.build());
+
+        List<Action> actions = new ArrayList<>();
+        actions.add(actionBuilder.build());
+        return actions;
+    }
+
+    private static PortNumber getPortNumber(final NodeConnectorKey nodeConKey, final Short ofVersion) {
+        Long port = InventoryDataServiceUtil.portNumberfromNodeConnectorId(OpenflowVersion.get(ofVersion),
+                nodeConKey.getId());
+        return new PortNumber(port);
+    }
+
+    private static NodeConnectorRef createNodeConnRef(final String nodeId, final NodeConnectorKey nodeConKey) {
+        InstanceIdentifier<NodeConnector> path = InstanceIdentifier
+                .<Nodes>builder(Nodes.class)
+                .<Node, NodeKey>child(Node.class,
+                        new NodeKey(new NodeId(nodeId)))
+                .<NodeConnector, NodeConnectorKey>child(NodeConnector.class,
+                        nodeConKey).build();
+
+        return new NodeConnectorRef(path);
+    }
+
+    private static NodeConnectorKey createNodeConnKey(final String nodeId, final String port) {
+        StringBuilder builder = new StringBuilder(nodeId).append(':').append(port);
+
+        return new NodeConnectorKey(new NodeConnectorId(builder.toString()));
+    }
+
+    private static NodeRef createNodeRef(final String nodeId) {
+        NodeKey key = new NodeKey(new NodeId(nodeId));
+        InstanceIdentifier<Node> path = InstanceIdentifier
+                .<Nodes>builder(Nodes.class)
+                .<Node, NodeKey>child(Node.class, key).build();
+        return new NodeRef(path);
+    }
+
+    private PacketOutInput convert(TransmitPacketInput transmitPacketInput, PacketOutConvertorData data) {
+        Optional<PacketOutInput> messageOptional = convertorManager.convert(transmitPacketInput, data);
+        return messageOptional.orElse(PacketOutConvertor.defaultResult(data.getVersion()));
+    }
+}