Update MRI projects for Aluminium
[openflowplugin.git] / openflowplugin / src / test / java / org / opendaylight / openflowplugin / openflow / md / core / sal / convertor / flow / FlowConvertorTest.java
index 5cf33ef4091c4811486365c494b861e7230896a2..e8d20f28c50035f9cbda76985add5a6ebdae34dd 100644 (file)
-/*\r
- * Copyright (c) 2014 Pantheon Technologies s.r.o. 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.flow;\r
-\r
-import java.math.BigInteger;\r
-import java.util.ArrayList;\r
-import java.util.Collections;\r
-import java.util.List;\r
-import java.util.Optional;\r
-import org.junit.Assert;\r
-import org.junit.Test;\r
-import org.opendaylight.openflowplugin.api.OFConstants;\r
-import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManager;\r
-import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData;\r
-import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanIdActionCaseBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.vlan.id.action._case.SetVlanIdActionBuilder;\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.service.rev130819.AddFlowInput;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInputBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.FlowTableRef;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.RemoveFlowInput;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.RemoveFlowInputBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.flow.update.UpdatedFlow;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.flow.update.UpdatedFlowBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.Flow;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowRef;\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.ApplyActionsCaseBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ClearActionsCaseBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.GoToTableCaseBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.MeterCaseBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.WriteActionsCaseBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.WriteMetadataCaseBuilder;\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.clear.actions._case.ClearActionsBuilder;\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.meter._case.MeterBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.write.actions._case.WriteActionsBuilder;\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;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.EtherType;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId;\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.EthernetMatch;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatchBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.ApplyActionsCase;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.GotoTableCase;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.MeterCase;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.WriteActionsCase;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.WriteMetadataCase;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowModCommand;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowModFlags;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowModInputBuilder;\r
-import org.opendaylight.yangtools.yang.binding.Augmentation;\r
-import org.opendaylight.yangtools.yang.binding.DataContainer;\r
-\r
-/**\r
- * @author michal.polkorab\r
- *\r
- */\r
-public class FlowConvertorTest {\r
-\r
-    /**\r
-     * Tests {@link org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.flow.FlowConvertor#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.Flow, org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData)} }\r
-     */\r
-    @Test\r
-    public void test() {\r
-        RemoveFlowInputBuilder flowBuilder = new RemoveFlowInputBuilder();\r
-        flowBuilder.setBarrier(false);\r
-        flowBuilder.setCookie(new FlowCookie(new BigInteger("4")));\r
-        flowBuilder.setCookieMask(new FlowCookie(new BigInteger("5")));\r
-        flowBuilder.setTableId((short) 6);\r
-        flowBuilder.setStrict(true);\r
-        flowBuilder.setIdleTimeout(50);\r
-        flowBuilder.setHardTimeout(500);\r
-        flowBuilder.setPriority(40);\r
-        flowBuilder.setBufferId(18L);\r
-        flowBuilder.setOutPort(new BigInteger("65535"));\r
-        flowBuilder.setOutGroup(5000L);\r
-        flowBuilder.setFlags(null);\r
-        flowBuilder.setMatch(null);\r
-        RemoveFlowInput flow = flowBuilder.build();\r
-\r
-        VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData(OFConstants.OFP_VERSION_1_3);\r
-        data.setDatapathId(new BigInteger("42"));\r
-\r
-        List<FlowModInputBuilder> flowMod = convert(flow, data);\r
-\r
-        Assert.assertEquals("Wrong version", 4, flowMod.get(0).getVersion().intValue());\r
-        Assert.assertEquals("Wrong cookie", 4, flowMod.get(0).getCookie().intValue());\r
-        Assert.assertEquals("Wrong cookie mask", 5, flowMod.get(0).getCookieMask().intValue());\r
-        Assert.assertEquals("Wrong table id", 6, flowMod.get(0).getTableId().getValue().intValue());\r
-        Assert.assertEquals("Wrong command", FlowModCommand.OFPFCDELETESTRICT, flowMod.get(0).getCommand());\r
-        Assert.assertEquals("Wrong idle timeout", 50, flowMod.get(0).getIdleTimeout().intValue());\r
-        Assert.assertEquals("Wrong hard timeout", 500, flowMod.get(0).getHardTimeout().intValue());\r
-        Assert.assertEquals("Wrong priority", 40, flowMod.get(0).getPriority().intValue());\r
-        Assert.assertEquals("Wrong buffer id", 18, flowMod.get(0).getBufferId().intValue());\r
-        Assert.assertEquals("Wrong out port", 65535, flowMod.get(0).getOutPort().getValue().intValue());\r
-        Assert.assertEquals("Wrong out group", 5000, flowMod.get(0).getOutGroup().intValue());\r
-        Assert.assertEquals("Wrong flags", new FlowModFlags(false, false, false, false, false), flowMod.get(0).getFlags());\r
-        Assert.assertEquals("Wrong match", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OxmMatchType",\r
-                flowMod.get(0).getMatch().getType().getName());\r
-        Assert.assertEquals("Wrong match entries size", 0, flowMod.get(0).getMatch().getMatchEntry().size());\r
-    }\r
-\r
-    /**\r
-     * Tests {@link org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.flow.FlowConvertor#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.Flow, org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData)} }\r
-     */\r
-    @Test\r
-    public void testOnlyModifyStrictCommand() {\r
-        UpdatedFlowBuilder flowBuilder = new UpdatedFlowBuilder();\r
-        flowBuilder.setStrict(true);\r
-        UpdatedFlow flow = flowBuilder.build();\r
-\r
-        VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData(OFConstants.OFP_VERSION_1_0);\r
-        data.setDatapathId(new BigInteger("42"));\r
-\r
-        List<FlowModInputBuilder> flowMod = convert(flow, data);\r
-\r
-        Assert.assertEquals("Wrong version", 1, flowMod.get(0).getVersion().intValue());\r
-        Assert.assertEquals("Wrong command", FlowModCommand.OFPFCADD, flowMod.get(0).getCommand());\r
-    }\r
-\r
-    /**\r
-     * Tests {@link org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.flow.FlowConvertor#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.Flow, org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData)} }\r
-     */\r
-    @Test\r
-    public void testInstructionsTranslation() {\r
-        AddFlowInputBuilder flowBuilder = new AddFlowInputBuilder();\r
-        InstructionsBuilder instructionsBuilder = new InstructionsBuilder();\r
-        List<Instruction> instructions = new ArrayList<>();\r
-        InstructionBuilder instructionBuilder = new InstructionBuilder();\r
-        GoToTableCaseBuilder goToCaseBuilder = new GoToTableCaseBuilder();\r
-        GoToTableBuilder goToBuilder = new GoToTableBuilder();\r
-        goToBuilder.setTableId((short) 1);\r
-        goToCaseBuilder.setGoToTable(goToBuilder.build());\r
-        instructionBuilder.setInstruction(goToCaseBuilder.build());\r
-        instructionBuilder.setOrder(0);\r
-        instructions.add(instructionBuilder.build());\r
-        instructionBuilder = new InstructionBuilder();\r
-        WriteMetadataCaseBuilder metaCaseBuilder = new WriteMetadataCaseBuilder();\r
-        WriteMetadataBuilder metaBuilder = new WriteMetadataBuilder();\r
-        metaBuilder.setMetadata(new BigInteger("2"));\r
-        metaBuilder.setMetadataMask(new BigInteger("3"));\r
-        metaCaseBuilder.setWriteMetadata(metaBuilder.build());\r
-        instructionBuilder.setInstruction(metaCaseBuilder.build());\r
-        instructionBuilder.setOrder(1);\r
-        instructions.add(instructionBuilder.build());\r
-        instructionBuilder = new InstructionBuilder();\r
-        WriteActionsCaseBuilder writeCaseBuilder = new WriteActionsCaseBuilder();\r
-        WriteActionsBuilder writeBuilder = new WriteActionsBuilder();\r
-        List<Action> actions = new ArrayList<>();\r
-        writeBuilder.setAction(actions);\r
-        writeCaseBuilder.setWriteActions(writeBuilder.build());\r
-        instructionBuilder.setInstruction(writeCaseBuilder.build());\r
-        instructionBuilder.setOrder(2);\r
-        instructions.add(instructionBuilder.build());\r
-        instructionBuilder = new InstructionBuilder();\r
-        ApplyActionsCaseBuilder applyCaseBuilder = new ApplyActionsCaseBuilder();\r
-        ApplyActionsBuilder applyBuilder = new ApplyActionsBuilder();\r
-        actions = new ArrayList<>();\r
-        applyBuilder.setAction(actions);\r
-        applyCaseBuilder.setApplyActions(applyBuilder.build());\r
-        instructionBuilder.setInstruction(applyCaseBuilder.build());\r
-        instructionBuilder.setOrder(3);\r
-        instructions.add(instructionBuilder.build());\r
-        instructionBuilder = new InstructionBuilder();\r
-        ClearActionsCaseBuilder clearCaseBuilder = new ClearActionsCaseBuilder();\r
-        ClearActionsBuilder clearBuilder = new ClearActionsBuilder();\r
-        actions = new ArrayList<>();\r
-        clearBuilder.setAction(actions);\r
-        clearCaseBuilder.setClearActions(clearBuilder.build());\r
-        instructionBuilder.setInstruction(clearCaseBuilder.build());\r
-        instructionBuilder.setOrder(4);\r
-        instructions.add(instructionBuilder.build());\r
-        instructionBuilder = new InstructionBuilder();\r
-        MeterCaseBuilder meterCaseBuilder = new MeterCaseBuilder();\r
-        MeterBuilder meterBuilder = new MeterBuilder();\r
-        meterBuilder.setMeterId(new MeterId(5L));\r
-        meterCaseBuilder.setMeter(meterBuilder.build());\r
-        instructionBuilder.setInstruction(meterCaseBuilder.build());\r
-        instructionBuilder.setOrder(5);\r
-        instructions.add(instructionBuilder.build());\r
-        instructionsBuilder.setInstruction(instructions);\r
-        flowBuilder.setInstructions(instructionsBuilder.build());\r
-        AddFlowInput flow = flowBuilder.build();\r
-\r
-        VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData(OFConstants.OFP_VERSION_1_0);\r
-        data.setDatapathId(new BigInteger("42"));\r
-        List<FlowModInputBuilder> flowMod = convert(flow, data);\r
-\r
-        Assert.assertEquals("Wrong version", 1, flowMod.get(0).getVersion().intValue());\r
-        Assert.assertEquals("Wrong command", FlowModCommand.OFPFCADD, flowMod.get(0).getCommand());\r
-        Assert.assertEquals("Wrong instructions size", 6, flowMod.get(0).getInstruction().size());\r
-        org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions\r
-        .grouping.Instruction instruction = flowMod.get(0).getInstruction().get(0);\r
-        Assert.assertEquals("Wrong type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"\r
-                + ".instruction.rev130731.instruction.grouping.instruction.choice.GotoTableCase", instruction.getInstructionChoice().getImplementedInterface().getName());\r
-        GotoTableCase gotoTableCase = (GotoTableCase) instruction.getInstructionChoice();\r
-        Assert.assertEquals("Wrong table id", 1, gotoTableCase.getGotoTable().getTableId().intValue());\r
-        instruction = flowMod.get(0).getInstruction().get(1);\r
-        Assert.assertEquals("Wrong type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"\r
-                + ".instruction.rev130731.instruction.grouping.instruction.choice.WriteMetadataCase", instruction.getInstructionChoice().getImplementedInterface().getName());\r
-        WriteMetadataCase writeMetadataCase = (WriteMetadataCase) instruction.getInstructionChoice();\r
-        Assert.assertArrayEquals("Wrong metadata", new byte[]{0, 0, 0, 0, 0, 0, 0, 2},\r
-                writeMetadataCase.getWriteMetadata().getMetadata());\r
-        Assert.assertArrayEquals("Wrong metadata mask", new byte[]{0, 0, 0, 0, 0, 0, 0, 3},\r
-                writeMetadataCase.getWriteMetadata().getMetadataMask());\r
-        \r
-        instruction = flowMod.get(0).getInstruction().get(2);\r
-        Assert.assertEquals("Wrong type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"\r
-                + ".instruction.rev130731.instruction.grouping.instruction.choice.WriteActionsCase", instruction.getInstructionChoice().getImplementedInterface().getName());\r
-        WriteActionsCase writeActionsCase = (WriteActionsCase) instruction.getInstructionChoice();\r
-        Assert.assertEquals("Wrong actions size", 0, writeActionsCase.getWriteActions().getAction().size());\r
-        instruction = flowMod.get(0).getInstruction().get(3);\r
-        Assert.assertEquals("Wrong type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"\r
-                + ".instruction.rev130731.instruction.grouping.instruction.choice.ApplyActionsCase", instruction.getInstructionChoice().getImplementedInterface().getName());\r
-        ApplyActionsCase applyActionsCase =  (ApplyActionsCase) instruction.getInstructionChoice();\r
-        Assert.assertEquals("Wrong actions size", 0, applyActionsCase.getApplyActions().getAction().size());\r
-        instruction = flowMod.get(0).getInstruction().get(4);\r
-        Assert.assertEquals("Wrong type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"\r
-                + ".instruction.rev130731.instruction.grouping.instruction.choice.ClearActionsCase", instruction.getInstructionChoice().getImplementedInterface().getName());\r
-        instruction = flowMod.get(0).getInstruction().get(5);\r
-        Assert.assertEquals("Wrong type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"\r
-                + ".instruction.rev130731.instruction.grouping.instruction.choice.MeterCase", instruction.getInstructionChoice().getImplementedInterface().getName());\r
-        MeterCase meterCase = (MeterCase) instruction.getInstructionChoice();\r
-        Assert.assertEquals("Wrong meter id", 5, meterCase.getMeter().getMeterId().intValue());\r
-    }\r
-\r
-    @Test\r
-    public void testCloneAndAugmentFlowWithSetVlanId() {\r
-        MockFlow mockFlow = new MockFlow();\r
-        Action action1 = createAction(\r
-                new SetVlanIdActionCaseBuilder().setSetVlanIdAction(\r
-                        new SetVlanIdActionBuilder().setVlanId(new VlanId(10)).build())\r
-                        .build(),\r
-                0);\r
-\r
-        mockFlow.setMatch(new MatchBuilder().setEthernetMatch(createEthernetMatch()).build());\r
-        mockFlow.setInstructions(toApplyInstruction(Collections.singletonList(action1)));\r
-\r
-        VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData(OFConstants.OFP_VERSION_1_3);\r
-        data.setDatapathId(BigInteger.ONE);\r
-\r
-        List<FlowModInputBuilder> flowModInputBuilders = convert(mockFlow, data);\r
-\r
-        Assert.assertEquals(2, flowModInputBuilders.size());\r
-\r
-    }\r
-\r
-    private List<FlowModInputBuilder> convert(Flow flow, VersionDatapathIdConvertorData data) {\r
-        Optional<List<FlowModInputBuilder>> flowModOptional = ConvertorManager.getInstance().convert(flow, data);\r
-        Assert.assertTrue("Flow convertor not found", flowModOptional.isPresent());\r
-        return flowModOptional.get();\r
-    }\r
-\r
-    private static Action createAction(final org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action actionCase,\r
-                                       final int order) {\r
-        Action action = new ActionBuilder().setOrder(order).setAction(actionCase).build();\r
-        return action;\r
-    }\r
-\r
-    private static EthernetMatch createEthernetMatch() {\r
-        EthernetMatchBuilder ethernetMatchBuilder = new EthernetMatchBuilder();\r
-        ethernetMatchBuilder.setEthernetType(new EthernetTypeBuilder().setType(new EtherType(33024L)).build());\r
-        return ethernetMatchBuilder.build();\r
-    }\r
-\r
-    private static Instructions toApplyInstruction(\r
-            final List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action> actions) {\r
-        return new InstructionsBuilder()\r
-                .setInstruction(\r
-                        Collections.singletonList(\r
-                                new InstructionBuilder()\r
-                                        .setOrder(0)\r
-                                        .setInstruction(\r
-                                                new ApplyActionsCaseBuilder()\r
-                                                        .setApplyActions((new ApplyActionsBuilder()).setAction(actions).build())\r
-                                                        .build()\r
-                                        ).build())\r
-                ).build();\r
-    }\r
-\r
-    private static class MockFlow implements AddFlowInput {\r
-        private Instructions instructions;\r
-        private Match match;\r
-\r
-        public void setInstructions(final Instructions instructions) {\r
-            this.instructions = instructions;\r
-        }\r
-\r
-        public void setMatch(final Match match) {\r
-            this.match = match;\r
-        }\r
-\r
-\r
-        @Override\r
-        public FlowRef getFlowRef() {\r
-            return null;\r
-        }\r
-\r
-        @Override\r
-        public <E extends Augmentation<AddFlowInput>> E getAugmentation(final Class<E> augmentationType) {\r
-            return null;\r
-        }\r
-\r
-        @Override\r
-        public FlowTableRef getFlowTable() {\r
-            return null;\r
-        }\r
-\r
-        @Override\r
-        public Match getMatch() {\r
-            return match;\r
-        }\r
-\r
-        @Override\r
-        public Instructions getInstructions() {\r
-            return instructions;\r
-        }\r
-\r
-        @Override\r
-        public String getContainerName() {\r
-            return null;\r
-        }\r
-\r
-        @Override\r
-        public FlowCookie getCookieMask() {\r
-            return null;\r
-        }\r
-\r
-        @Override\r
-        public Long getBufferId() {\r
-            return null;\r
-        }\r
-\r
-        @Override\r
-        public BigInteger getOutPort() {\r
-            return null;\r
-        }\r
-\r
-        @Override\r
-        public Long getOutGroup() {\r
-            return null;\r
-        }\r
-\r
-        @Override\r
-        public org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowModFlags getFlags() {\r
-            return null;\r
-        }\r
-\r
-        @Override\r
-        public String getFlowName() {\r
-            return null;\r
-        }\r
-\r
-        @Override\r
-        public Boolean isInstallHw() {\r
-            return null;\r
-        }\r
-\r
-        @Override\r
-        public Boolean isBarrier() {\r
-            return null;\r
-        }\r
-\r
-        @Override\r
-        public Boolean isStrict() {\r
-            return null;\r
-        }\r
-\r
-        @Override\r
-        public Integer getPriority() {\r
-            return null;\r
-        }\r
-\r
-        @Override\r
-        public Integer getIdleTimeout() {\r
-            return null;\r
-        }\r
-\r
-        @Override\r
-        public Integer getHardTimeout() {\r
-            return null;\r
-        }\r
-\r
-        @Override\r
-        public FlowCookie getCookie() {\r
-            return null;\r
-        }\r
-\r
-        @Override\r
-        public Short getTableId() {\r
-            return null;\r
-        }\r
-\r
-        @Override\r
-        public NodeRef getNode() {\r
-            return null;\r
-        }\r
-\r
-        @Override\r
-        public Uri getTransactionUri() {\r
-            return null;\r
-        }\r
-\r
-        @Override\r
-        public Class<? extends DataContainer> getImplementedInterface() {\r
-            return Flow.class;\r
-        }\r
-    }\r
-}
\ No newline at end of file
+/*
+ * Copyright (c) 2014 Pantheon Technologies s.r.o. 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.flow;
+
+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.openflowplugin.api.OFConstants;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManager;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManagerFactory;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData;
+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.SetVlanIdActionCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.vlan.id.action._case.SetVlanIdActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.AddFlowInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.FlowTableRef;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.RemoveFlowInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.RemoveFlowInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.flow.update.UpdatedFlow;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.service.rev130819.flow.update.UpdatedFlowBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.Flow;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowRef;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Instructions;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.InstructionsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ClearActionsCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.GoToTableCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.MeterCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.WriteActionsCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.WriteMetadataCaseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.apply.actions._case.ApplyActionsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.clear.actions._case.ClearActionsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.go.to.table._case.GoToTableBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.meter._case.MeterBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.write.actions._case.WriteActionsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.write.metadata._case.WriteMetadataBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.EtherType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetTypeBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatch;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatchBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.ApplyActionsCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.GotoTableCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.MeterCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.WriteActionsCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.WriteMetadataCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowModCommand;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowModFlags;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowModInputBuilder;
+import org.opendaylight.yangtools.yang.binding.Augmentation;
+import org.opendaylight.yangtools.yang.common.Uint16;
+import org.opendaylight.yangtools.yang.common.Uint32;
+import org.opendaylight.yangtools.yang.common.Uint64;
+import org.opendaylight.yangtools.yang.common.Uint8;
+
+/**
+ * Unit tests for flow conversion.
+ *
+ * @author michal.polkorab
+ */
+public class FlowConvertorTest {
+    private ConvertorManager convertorManager;
+
+    @Before
+    public void setUp() {
+        convertorManager = ConvertorManagerFactory.createDefaultManager();
+    }
+
+    /**
+     * Tests {@link FlowConvertor#convert(Flow, VersionDatapathIdConvertorData)} }.
+     */
+    @Test
+    public void test() {
+        RemoveFlowInputBuilder flowBuilder = new RemoveFlowInputBuilder();
+        flowBuilder.setBarrier(false);
+        flowBuilder.setCookie(new FlowCookie(new BigInteger("4")));
+        flowBuilder.setCookieMask(new FlowCookie(new BigInteger("5")));
+        flowBuilder.setTableId((short) 6);
+        flowBuilder.setStrict(true);
+        flowBuilder.setIdleTimeout(50);
+        flowBuilder.setHardTimeout(500);
+        flowBuilder.setPriority(40);
+        flowBuilder.setBufferId(18L);
+        flowBuilder.setOutPort(new BigInteger("65535"));
+        flowBuilder.setOutGroup(5000L);
+        flowBuilder.setFlags(null);
+        flowBuilder.setMatch(null);
+        RemoveFlowInput flow = flowBuilder.build();
+
+        VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData(OFConstants.OFP_VERSION_1_3);
+        data.setDatapathId(Uint64.valueOf(42));
+
+        List<FlowModInputBuilder> flowMod = convert(flow, data);
+
+        Assert.assertEquals("Wrong version", 4, flowMod.get(0).getVersion().intValue());
+        Assert.assertEquals("Wrong cookie", 4, flowMod.get(0).getCookie().intValue());
+        Assert.assertEquals("Wrong cookie mask", 5, flowMod.get(0).getCookieMask().intValue());
+        Assert.assertEquals("Wrong table id", 6, flowMod.get(0).getTableId().getValue().intValue());
+        Assert.assertEquals("Wrong command", FlowModCommand.OFPFCDELETESTRICT, flowMod.get(0).getCommand());
+        Assert.assertEquals("Wrong idle timeout", 50, flowMod.get(0).getIdleTimeout().intValue());
+        Assert.assertEquals("Wrong hard timeout", 500, flowMod.get(0).getHardTimeout().intValue());
+        Assert.assertEquals("Wrong priority", 40, flowMod.get(0).getPriority().intValue());
+        Assert.assertEquals("Wrong buffer id", 18, flowMod.get(0).getBufferId().intValue());
+        Assert.assertEquals("Wrong out port", 65535, flowMod.get(0).getOutPort().getValue().intValue());
+        Assert.assertEquals("Wrong out group", 5000, flowMod.get(0).getOutGroup().intValue());
+        Assert.assertEquals("Wrong flags", new FlowModFlags(false, false, false, false, false),
+                flowMod.get(0).getFlags());
+        Assert.assertEquals("Wrong match",
+                "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OxmMatchType",
+                flowMod.get(0).getMatch().getType().getName());
+        Assert.assertEquals("Wrong match entries size", 0, flowMod.get(0).getMatch().nonnullMatchEntry().size());
+    }
+
+    /**
+     * Tests {@link FlowConvertor#convert(Flow, VersionDatapathIdConvertorData)} }.
+     */
+    @Test
+    public void testOnlyModifyStrictCommand() {
+        UpdatedFlowBuilder flowBuilder = new UpdatedFlowBuilder();
+        flowBuilder.setStrict(true);
+        UpdatedFlow flow = flowBuilder.build();
+
+        VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData(OFConstants.OFP_VERSION_1_0);
+        data.setDatapathId(Uint64.valueOf(42));
+
+        List<FlowModInputBuilder> flowMod = convert(flow, data);
+
+        Assert.assertEquals("Wrong version", 1, flowMod.get(0).getVersion().intValue());
+        Assert.assertEquals("Wrong command", FlowModCommand.OFPFCADD, flowMod.get(0).getCommand());
+    }
+
+    /**
+     * Tests {@link FlowConvertor#convert(Flow, VersionDatapathIdConvertorData)} }.
+     */
+    @Test
+    public void testInstructionsTranslation() {
+        InstructionBuilder instructionBuilder = new InstructionBuilder();
+        GoToTableCaseBuilder goToCaseBuilder = new GoToTableCaseBuilder();
+        GoToTableBuilder goToBuilder = new GoToTableBuilder();
+        goToBuilder.setTableId((short) 1);
+        goToCaseBuilder.setGoToTable(goToBuilder.build());
+        instructionBuilder.setInstruction(goToCaseBuilder.build());
+        instructionBuilder.setOrder(0);
+
+        List<Instruction> instructions = new ArrayList<>();
+        instructions.add(instructionBuilder.build());
+        instructionBuilder = new InstructionBuilder();
+        WriteMetadataCaseBuilder metaCaseBuilder = new WriteMetadataCaseBuilder();
+        WriteMetadataBuilder metaBuilder = new WriteMetadataBuilder();
+        metaBuilder.setMetadata(new BigInteger("2"));
+        metaBuilder.setMetadataMask(new BigInteger("3"));
+        metaCaseBuilder.setWriteMetadata(metaBuilder.build());
+        instructionBuilder.setInstruction(metaCaseBuilder.build());
+        instructionBuilder.setOrder(1);
+        instructions.add(instructionBuilder.build());
+        instructionBuilder = new InstructionBuilder();
+        WriteActionsCaseBuilder writeCaseBuilder = new WriteActionsCaseBuilder();
+        WriteActionsBuilder writeBuilder = new WriteActionsBuilder();
+        List<Action> actions = new ArrayList<>();
+        writeBuilder.setAction(actions);
+        writeCaseBuilder.setWriteActions(writeBuilder.build());
+        instructionBuilder.setInstruction(writeCaseBuilder.build());
+        instructionBuilder.setOrder(2);
+        instructions.add(instructionBuilder.build());
+        instructionBuilder = new InstructionBuilder();
+        ApplyActionsCaseBuilder applyCaseBuilder = new ApplyActionsCaseBuilder();
+        ApplyActionsBuilder applyBuilder = new ApplyActionsBuilder();
+        actions = new ArrayList<>();
+        applyBuilder.setAction(actions);
+        applyCaseBuilder.setApplyActions(applyBuilder.build());
+        instructionBuilder.setInstruction(applyCaseBuilder.build());
+        instructionBuilder.setOrder(3);
+        instructions.add(instructionBuilder.build());
+        instructionBuilder = new InstructionBuilder();
+        ClearActionsCaseBuilder clearCaseBuilder = new ClearActionsCaseBuilder();
+        ClearActionsBuilder clearBuilder = new ClearActionsBuilder();
+        actions = new ArrayList<>();
+        clearBuilder.setAction(actions);
+        clearCaseBuilder.setClearActions(clearBuilder.build());
+        instructionBuilder.setInstruction(clearCaseBuilder.build());
+        instructionBuilder.setOrder(4);
+        instructions.add(instructionBuilder.build());
+        instructionBuilder = new InstructionBuilder();
+        MeterCaseBuilder meterCaseBuilder = new MeterCaseBuilder();
+        MeterBuilder meterBuilder = new MeterBuilder();
+        meterBuilder.setMeterId(new MeterId(5L));
+        meterCaseBuilder.setMeter(meterBuilder.build());
+        instructionBuilder.setInstruction(meterCaseBuilder.build());
+        instructionBuilder.setOrder(5);
+        instructions.add(instructionBuilder.build());
+
+        InstructionsBuilder instructionsBuilder = new InstructionsBuilder();
+        instructionsBuilder.setInstruction(instructions);
+
+        AddFlowInputBuilder flowBuilder = new AddFlowInputBuilder();
+        flowBuilder.setInstructions(instructionsBuilder.build());
+        AddFlowInput flow = flowBuilder.build();
+
+        VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData(OFConstants.OFP_VERSION_1_0);
+        data.setDatapathId(Uint64.valueOf(42));
+        List<FlowModInputBuilder> flowMod = convert(flow, data);
+
+        Assert.assertEquals("Wrong version", 1, flowMod.get(0).getVersion().intValue());
+        Assert.assertEquals("Wrong command", FlowModCommand.OFPFCADD, flowMod.get(0).getCommand());
+        Assert.assertEquals("Wrong instructions size", 6, flowMod.get(0).getInstruction().size());
+        org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions
+            .grouping.Instruction instruction = flowMod.get(0).getInstruction().get(0);
+        Assert.assertEquals("Wrong type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"
+                + ".instruction.rev130731.instruction.grouping.instruction.choice.GotoTableCase",
+                instruction.getInstructionChoice().implementedInterface().getName());
+        GotoTableCase gotoTableCase = (GotoTableCase) instruction.getInstructionChoice();
+        Assert.assertEquals("Wrong table id", 1, gotoTableCase.getGotoTable().getTableId().intValue());
+        instruction = flowMod.get(0).getInstruction().get(1);
+        Assert.assertEquals("Wrong type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"
+                + ".instruction.rev130731.instruction.grouping.instruction.choice.WriteMetadataCase",
+                instruction.getInstructionChoice().implementedInterface().getName());
+        WriteMetadataCase writeMetadataCase = (WriteMetadataCase) instruction.getInstructionChoice();
+        Assert.assertArrayEquals("Wrong metadata", new byte[]{0, 0, 0, 0, 0, 0, 0, 2},
+                writeMetadataCase.getWriteMetadata().getMetadata());
+        Assert.assertArrayEquals("Wrong metadata mask", new byte[]{0, 0, 0, 0, 0, 0, 0, 3},
+                writeMetadataCase.getWriteMetadata().getMetadataMask());
+
+        instruction = flowMod.get(0).getInstruction().get(2);
+        Assert.assertEquals("Wrong type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"
+                + ".instruction.rev130731.instruction.grouping.instruction.choice.WriteActionsCase",
+                instruction.getInstructionChoice().implementedInterface().getName());
+        WriteActionsCase writeActionsCase = (WriteActionsCase) instruction.getInstructionChoice();
+        Assert.assertEquals("Wrong actions size", 0, writeActionsCase.getWriteActions().nonnullAction().size());
+        instruction = flowMod.get(0).getInstruction().get(3);
+        Assert.assertEquals("Wrong type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"
+                + ".instruction.rev130731.instruction.grouping.instruction.choice.ApplyActionsCase",
+                instruction.getInstructionChoice().implementedInterface().getName());
+        ApplyActionsCase applyActionsCase =  (ApplyActionsCase) instruction.getInstructionChoice();
+        Assert.assertEquals("Wrong actions size", 0, applyActionsCase.getApplyActions().nonnullAction().size());
+        instruction = flowMod.get(0).getInstruction().get(4);
+        Assert.assertEquals("Wrong type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"
+                + ".instruction.rev130731.instruction.grouping.instruction.choice.ClearActionsCase",
+                instruction.getInstructionChoice().implementedInterface().getName());
+        instruction = flowMod.get(0).getInstruction().get(5);
+        Assert.assertEquals("Wrong type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"
+                + ".instruction.rev130731.instruction.grouping.instruction.choice.MeterCase",
+                instruction.getInstructionChoice().implementedInterface().getName());
+        MeterCase meterCase = (MeterCase) instruction.getInstructionChoice();
+        Assert.assertEquals("Wrong meter id", 5, meterCase.getMeter().getMeterId().intValue());
+    }
+
+    @Test
+    public void testCloneAndAugmentFlowWithSetVlanId() {
+        MockFlow mockFlow = new MockFlow();
+        Action action1 = createAction(
+                new SetVlanIdActionCaseBuilder().setSetVlanIdAction(
+                        new SetVlanIdActionBuilder().setVlanId(new VlanId(10)).build())
+                        .build(),
+                0);
+
+        mockFlow.setMatch(new MatchBuilder().setEthernetMatch(createEthernetMatch()).build());
+        mockFlow.setInstructions(toApplyInstruction(Collections.singletonList(action1)));
+
+        VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData(OFConstants.OFP_VERSION_1_3);
+        data.setDatapathId(Uint64.ONE);
+
+        List<FlowModInputBuilder> flowModInputBuilders = convert(mockFlow, data);
+
+        Assert.assertEquals(2, flowModInputBuilders.size());
+
+    }
+
+    private List<FlowModInputBuilder> convert(final Flow flow, final VersionDatapathIdConvertorData data) {
+        Optional<List<FlowModInputBuilder>> flowModOptional = convertorManager.convert(flow, data);
+        Assert.assertTrue("Flow convertor not found", flowModOptional.isPresent());
+        return flowModOptional.get();
+    }
+
+    private static Action createAction(
+            final org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action actionCase,
+            final int order) {
+        Action action = new ActionBuilder().setOrder(order).setAction(actionCase).build();
+        return action;
+    }
+
+    private static EthernetMatch createEthernetMatch() {
+        EthernetMatchBuilder ethernetMatchBuilder = new EthernetMatchBuilder();
+        ethernetMatchBuilder.setEthernetType(new EthernetTypeBuilder().setType(new EtherType(33024L)).build());
+        return ethernetMatchBuilder.build();
+    }
+
+    private static Instructions toApplyInstruction(
+            final List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list
+                .Action> actions) {
+        return new InstructionsBuilder().setInstruction(Collections.singletonList(new InstructionBuilder().setOrder(0)
+                .setInstruction(new ApplyActionsCaseBuilder()
+                        .setApplyActions(new ApplyActionsBuilder().setAction(actions).build()).build())
+                .build())).build();
+    }
+
+    private static class MockFlow implements AddFlowInput {
+        private Instructions instructions;
+        private Match match;
+
+        public void setInstructions(final Instructions instructions) {
+            this.instructions = instructions;
+        }
+
+        public void setMatch(final Match match) {
+            this.match = match;
+        }
+
+
+        @Override
+        public FlowRef getFlowRef() {
+            return null;
+        }
+
+        @Override
+        public <E extends Augmentation<AddFlowInput>> E augmentation(final Class<E> augmentationType) {
+            return null;
+        }
+
+        @Override
+        public FlowTableRef getFlowTable() {
+            return null;
+        }
+
+        @Override
+        public Match getMatch() {
+            return match;
+        }
+
+        @Override
+        public Instructions getInstructions() {
+            return instructions;
+        }
+
+        @Override
+        public String getContainerName() {
+            return null;
+        }
+
+        @Override
+        public FlowCookie getCookieMask() {
+            return null;
+        }
+
+        @Override
+        public Uint32 getBufferId() {
+            return null;
+        }
+
+        @Override
+        public Uint64 getOutPort() {
+            return null;
+        }
+
+        @Override
+        public Uint32 getOutGroup() {
+            return null;
+        }
+
+        @Override
+        public org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowModFlags getFlags() {
+            return null;
+        }
+
+        @Override
+        public String getFlowName() {
+            return null;
+        }
+
+        @Override
+        public Boolean isInstallHw() {
+            return null;
+        }
+
+        @Override
+        public Boolean isBarrier() {
+            return null;
+        }
+
+        @Override
+        public Boolean isStrict() {
+            return null;
+        }
+
+        @Override
+        public Uint16 getPriority() {
+            return null;
+        }
+
+        @Override
+        public Uint16 getIdleTimeout() {
+            return null;
+        }
+
+        @Override
+        public Uint16 getHardTimeout() {
+            return null;
+        }
+
+        @Override
+        public FlowCookie getCookie() {
+            return null;
+        }
+
+        @Override
+        public Uint8 getTableId() {
+            return null;
+        }
+
+        @Override
+        public NodeRef getNode() {
+            return null;
+        }
+
+        @Override
+        public Uri getTransactionUri() {
+            return null;
+        }
+
+        @Override
+        public Class<AddFlowInput> implementedInterface() {
+            return AddFlowInput.class;
+        }
+    }
+}