Bug 5540 - ActionConvertor, ActionResponseConvertor
[openflowplugin.git] / openflowplugin / src / test / java / org / opendaylight / openflowplugin / openflow / md / core / sal / convertor / action / ActionConvertorV10Test.java
@@ -6,25 +6,30 @@
  * 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
+package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action;\r
 \r
 import java.math.BigInteger;\r
 import java.util.ArrayList;\r
+import java.util.Collections;\r
 import java.util.List;\r
-\r
+import java.util.Optional;\r
 import org.junit.Assert;\r
 import org.junit.Test;\r
-import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;\r
-import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;\r
+import org.opendaylight.openflowplugin.api.OFConstants;\r
 import org.opendaylight.openflowplugin.extension.api.path.ActionPath;\r
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManager;\r
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action.data.ActionConvertorData;\r
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action.data.ActionResponseConvertorData;\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.rev130715.IpVersion;\r
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;\r
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;\r
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCase;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionCaseBuilder;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlDstActionCaseBuilder;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlSrcActionCaseBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetFieldCaseBuilder;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwDstActionCaseBuilder;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwSrcActionCaseBuilder;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwTosActionCaseBuilder;\r
@@ -35,6 +40,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.acti
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.StripVlanActionCaseBuilder;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.dl.dst.action._case.SetDlDstActionBuilder;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.dl.src.action._case.SetDlSrcActionBuilder;\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.action.set.nw.dst.action._case.SetNwDstActionBuilder;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.src.action._case.SetNwSrcActionBuilder;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.tos.action._case.SetNwTosActionBuilder;\r
@@ -46,11 +52,14 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.acti
 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.action.types.rev131112.address.address.Ipv4Builder;\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.types.rev131026.flow.MatchBuilder;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanPcp;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.IpMatchBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.VlanMatchBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.vlan.match.fields.VlanIdBuilder;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.OutputActionCaseBuilder;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetDlDstCase;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetDlSrcCase;\r
@@ -70,7 +79,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev1
 public class ActionConvertorV10Test {\r
 \r
     /**\r
-     * Test {@link ActionConvertor#getActions(List, short, BigInteger)}\r
+     * Test {@link org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action.ActionConvertor#convert(java.util.List, org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action.data.ActionConvertorData)}}\r
      */\r
     @Test\r
     public void testGetActions() {\r
@@ -83,6 +92,7 @@ public class ActionConvertorV10Test {
         actionBuilder.setAction(vlanPcpCaseBuilder.build());\r
         actionBuilder.setOrder(0);\r
         salActions.add(actionBuilder.build());\r
+\r
         actionBuilder = new ActionBuilder();\r
         StripVlanActionCaseBuilder stripCaseBuilder = new StripVlanActionCaseBuilder();\r
         StripVlanActionBuilder stripBuilder = new StripVlanActionBuilder();\r
@@ -90,6 +100,7 @@ public class ActionConvertorV10Test {
         actionBuilder.setAction(stripCaseBuilder.build());\r
         actionBuilder.setOrder(1);\r
         salActions.add(actionBuilder.build());\r
+\r
         actionBuilder = new ActionBuilder();\r
         SetDlDstActionCaseBuilder dlDstCaseBuilder = new SetDlDstActionCaseBuilder();\r
         SetDlDstActionBuilder dlDstBuilder = new SetDlDstActionBuilder();\r
@@ -98,6 +109,7 @@ public class ActionConvertorV10Test {
         actionBuilder.setAction(dlDstCaseBuilder.build());\r
         actionBuilder.setOrder(2);\r
         salActions.add(actionBuilder.build());\r
+\r
         actionBuilder = new ActionBuilder();\r
         SetDlSrcActionCaseBuilder dlSrcCaseBuilder = new SetDlSrcActionCaseBuilder();\r
         SetDlSrcActionBuilder dlSrcBuilder = new SetDlSrcActionBuilder();\r
@@ -129,6 +141,7 @@ public class ActionConvertorV10Test {
         actionBuilder.setAction(nwDstCaseBuilder.build());\r
         actionBuilder.setOrder(5);\r
         salActions.add(actionBuilder.build());\r
+\r
         actionBuilder = new ActionBuilder();\r
         SetTpSrcActionCaseBuilder tpSrcCaseBuilder = new SetTpSrcActionCaseBuilder();\r
         SetTpSrcActionBuilder tpSrcBuilder = new SetTpSrcActionBuilder();\r
@@ -137,6 +150,7 @@ public class ActionConvertorV10Test {
         actionBuilder.setAction(tpSrcCaseBuilder.build());\r
         actionBuilder.setOrder(6);\r
         salActions.add(actionBuilder.build());\r
+\r
         actionBuilder = new ActionBuilder();\r
         SetTpDstActionCaseBuilder tpDstCaseBuilder = new SetTpDstActionCaseBuilder();\r
         SetTpDstActionBuilder tpDstBuilder = new SetTpDstActionBuilder();\r
@@ -145,6 +159,7 @@ public class ActionConvertorV10Test {
         actionBuilder.setAction(tpDstCaseBuilder.build());\r
         actionBuilder.setOrder(7);\r
         salActions.add(actionBuilder.build());\r
+\r
         actionBuilder = new ActionBuilder();\r
         SetNwTosActionCaseBuilder tosCaseBuilder = new SetNwTosActionCaseBuilder();\r
         SetNwTosActionBuilder tosBuilder = new SetNwTosActionBuilder();\r
@@ -153,6 +168,7 @@ public class ActionConvertorV10Test {
         actionBuilder.setAction(tosCaseBuilder.build());\r
         actionBuilder.setOrder(8);\r
         salActions.add(actionBuilder.build());\r
+\r
         actionBuilder = new ActionBuilder();\r
         SetVlanIdActionCaseBuilder vlanIdCaseBuilder = new SetVlanIdActionCaseBuilder();\r
         SetVlanIdActionBuilder vlanIdBuilder = new SetVlanIdActionBuilder();\r
@@ -161,13 +177,41 @@ public class ActionConvertorV10Test {
         actionBuilder.setAction(vlanIdCaseBuilder.build());\r
         actionBuilder.setOrder(9);\r
         salActions.add(actionBuilder.build());\r
+\r
+        actionBuilder = new ActionBuilder();\r
+        PopVlanActionCaseBuilder popVlanActionCaseBuilder = new PopVlanActionCaseBuilder();\r
+        actionBuilder.setAction(popVlanActionCaseBuilder.build());\r
+        actionBuilder.setOrder(10);\r
+        salActions.add(actionBuilder.build());\r
+\r
+        actionBuilder = new ActionBuilder();\r
+        SetFieldCaseBuilder setFieldCaseBuilder = new SetFieldCaseBuilder();\r
+        SetFieldBuilder setFieldBuilder = new SetFieldBuilder();\r
+        VlanMatchBuilder vlanMatchBuilder = new VlanMatchBuilder();\r
+        vlanMatchBuilder.setVlanId(new VlanIdBuilder().setVlanId(new VlanId(22)).build());\r
+        setFieldBuilder.setVlanMatch(vlanMatchBuilder.build());\r
+        setFieldCaseBuilder.setSetField(setFieldBuilder.build());\r
+        actionBuilder.setAction(setFieldCaseBuilder.build());\r
+        actionBuilder.setOrder(11);\r
+        salActions.add(actionBuilder.build());\r
         \r
         IpMatchBuilder ipMatchBld = new IpMatchBuilder().setIpProto(IpVersion.Ipv4);\r
         MatchBuilder matchBld = new MatchBuilder().setIpMatch(ipMatchBld.build());\r
         FlowBuilder flowBld = new FlowBuilder().setMatch(matchBld.build());\r
-        List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action> actions = ActionConvertor.getActions(salActions, EncodeConstants.OF10_VERSION_ID, new BigInteger("42"), flowBld.build());\r
+        Flow flow = flowBld.build();\r
+\r
+        ActionConvertorData data = new ActionConvertorData(OFConstants.OFP_VERSION_1_0);\r
+        data.setDatapathId(new BigInteger("42"));\r
+        if (flow.getMatch() != null && flow.getMatch().getIpMatch() != null) {\r
+            data.setIpProtocol(flow.getMatch().getIpMatch().getIpProtocol());\r
+        }\r
+\r
+        Optional<List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action>> actionsOptional =\r
+                ConvertorManager.getInstance().convert(salActions, data);\r
+\r
+        List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action> actions = actionsOptional.orElse(Collections.emptyList());\r
         \r
-        Assert.assertEquals("Wrong number of actions", 10, actions.size());\r
+        Assert.assertEquals("Wrong number of actions", 12, actions.size());\r
         \r
         org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action action = actions.get(0);\r
         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"\r
@@ -226,10 +270,20 @@ public class ActionConvertorV10Test {
                 + ".action.rev150203.action.grouping.action.choice.SetVlanVidCase", action.getActionChoice().getImplementedInterface().getName());\r
         SetVlanVidCase setVlanVidCase = (SetVlanVidCase) action.getActionChoice();\r
         Assert.assertEquals("Wrong vlan id", 22, setVlanVidCase.getSetVlanVidAction().getVlanVid().intValue());\r
+\r
+        action = actions.get(10);\r
+        Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"\r
+                + ".action.rev150203.action.grouping.action.choice.StripVlanCase", action.getActionChoice().getImplementedInterface().getName());\r
+\r
+        action = actions.get(11);\r
+        Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"\r
+                + ".action.rev150203.action.grouping.action.choice.SetVlanVidCase", action.getActionChoice().getImplementedInterface().getName());\r
+        setVlanVidCase = (SetVlanVidCase) action.getActionChoice();\r
+        Assert.assertEquals("Wrong vlan id", 22, setVlanVidCase.getSetVlanVidAction().getVlanVid().intValue());\r
     }\r
 \r
     /**\r
-     * Test {@link ActionConvertor#toMDSalActions(List, OpenflowVersion, ActionPath)}\r
+     * Test {@link org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action.ActionResponseConvertor#convert(java.util.List, org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action.data.ActionResponseConvertorData)}}\r
      */\r
     @Test\r
     public void testToMDSalActions() {\r
@@ -245,19 +299,18 @@ public class ActionConvertorV10Test {
         outputBuilder.setMaxLength(555);\r
         caseBuilder.setOutputAction(outputBuilder.build());\r
         actionbuilder.setActionChoice(caseBuilder.build());\r
-        \r
-//        actionbuilder.setType(Output.class);\r
-//        PortActionBuilder portBuilder = new PortActionBuilder();\r
-//        portBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber(14L));\r
-//        actionbuilder.addAugmentation(PortAction.class, portBuilder.build());\r
-//        MaxLengthActionBuilder lengthBuilder = new MaxLengthActionBuilder();\r
-//        lengthBuilder.setMaxLength(555);\r
-//        actionbuilder.addAugmentation(MaxLengthAction.class, lengthBuilder.build());\r
         actions.add(actionbuilder.build());\r
 \r
+        ActionResponseConvertorData data = new ActionResponseConvertorData(OFConstants.OFP_VERSION_1_0);\r
+        data.setActionPath(ActionPath.FLOWSSTATISTICSUPDATE_FLOWANDSTATISTICSMAPLIST_INSTRUCTIONS_INSTRUCTION_INSTRUCTION_APPLYACTIONSCASE_APPLYACTIONS_ACTION_ACTION);\r
+\r
+        Optional<List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action\r
+        .Action>> mdSalActionsOptional =\r
+                ConvertorManager.getInstance().convert(\r
+                        actions, data);\r
+\r
         List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action\r
-        .Action> mdSalActions = ActionConvertor.toMDSalActions(actions, OpenflowVersion.OF10,\r
-                ActionPath.FLOWSSTATISTICSUPDATE_FLOWANDSTATISTICSMAPLIST_INSTRUCTIONS_INSTRUCTION_INSTRUCTION_APPLYACTIONSCASE_APPLYACTIONS_ACTION_ACTION);\r
+                .Action> mdSalActions = mdSalActionsOptional.orElse(Collections.emptyList());\r
 \r
         Assert.assertEquals("Wrong number of output actions", 1, mdSalActions.size());\r
         org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action = mdSalActions.get(0);\r