Bug 5540 - ActionConvertor, ActionResponseConvertor
[openflowplugin.git] / openflowplugin / src / test / java / org / opendaylight / openflowplugin / openflow / md / core / sal / convertor / action / ActionConvertorV13Test.java
@@ -6,17 +6,20 @@
  * 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.Ipv4Prefix;\r
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix;\r
@@ -53,6 +56,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.strip.vlan.action._case.StripVlanActionBuilder;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.address.address.Ipv4Builder;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.address.address.Ipv6Builder;\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
@@ -72,8 +76,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev1
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PushVlanCaseBuilder;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetFieldCaseBuilder;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetMplsTtlCaseBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetNwDstCaseBuilder;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetNwTtlCaseBuilder;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetQueueCaseBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.StripVlanCaseBuilder;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.group._case.GroupActionBuilder;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.output.action._case.OutputActionBuilder;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.pop.mpls._case.PopMplsActionBuilder;\r
@@ -112,20 +118,22 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.matc
  */\r
 public class ActionConvertorV13Test {\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
         List<Action> actions = new ArrayList<>();\r
-        List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action\r
-                .Action> mdSalActions = ActionConvertor.toMDSalActions(actions, OpenflowVersion.OF13,\r
-                ActionPath.FLOWSSTATISTICSUPDATE_FLOWANDSTATISTICSMAPLIST_INSTRUCTIONS_INSTRUCTION_INSTRUCTION_APPLYACTIONSCASE_APPLYACTIONS_ACTION_ACTION);\r
+        ActionResponseConvertorData data = new ActionResponseConvertorData(OFConstants.OFP_VERSION_1_3);\r
+        data.setActionPath(ActionPath.FLOWSSTATISTICSUPDATE_FLOWANDSTATISTICSMAPLIST_INSTRUCTIONS_INSTRUCTION_INSTRUCTION_APPLYACTIONSCASE_APPLYACTIONS_ACTION_ACTION);\r
 \r
-        Assert.assertEquals("Wrong number of output actions", 0, mdSalActions.size());\r
+        Optional<List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action\r
+                .Action>> mdSalActions = ConvertorManager.getInstance().convert(actions, data);\r
+\r
+        Assert.assertEquals("Wrong number of output actions", 0, mdSalActions.orElse(Collections.emptyList()).size());\r
     }\r
 \r
     /**\r
-     * Test {@link ActionConvertor#toMDSalActions(List, OpenflowVersion, ActionPath)}\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 testToMDSalActions2() {\r
@@ -248,11 +256,24 @@ public class ActionConvertorV13Test {
         actionBuilder.setActionChoice(new PopPbbCaseBuilder().build());\r
         actions.add(actionBuilder.build());\r
 \r
+        actionBuilder = new ActionBuilder();\r
+        actionBuilder.setActionChoice(new SetNwDstCaseBuilder().build());\r
+        actions.add(actionBuilder.build());\r
+\r
+        actionBuilder = new ActionBuilder();\r
+        actionBuilder.setActionChoice(new StripVlanCaseBuilder().build());\r
+        actions.add(actionBuilder.build());\r
+\r
+        ActionResponseConvertorData data = new ActionResponseConvertorData(OFConstants.OFP_VERSION_1_3);\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 = ConvertorManager.getInstance().convert(actions, data);\r
+\r
         List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action\r
-                .Action> mdSalActions = ActionConvertor.toMDSalActions(actions, OpenflowVersion.OF13,\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", 16, mdSalActions.size());\r
+        Assert.assertEquals("Wrong number of output actions", 18, mdSalActions.size());\r
         org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action = mdSalActions.get(0);\r
         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types"\r
                 + ".rev131112.action.action.OutputActionCase", action.getImplementedInterface().getName());\r
@@ -322,10 +343,16 @@ public class ActionConvertorV13Test {
         action = mdSalActions.get(15);\r
         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types"\r
                 + ".rev131112.action.action.PopPbbActionCase", action.getImplementedInterface().getName());\r
+        action = mdSalActions.get(16);\r
+        Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types"\r
+                + ".rev131112.action.action.SetNwDstActionCase", action.getImplementedInterface().getName());\r
+        action = mdSalActions.get(17);\r
+        Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types"\r
+                + ".rev131112.action.action.PopVlanActionCase", action.getImplementedInterface().getName());\r
     }\r
 \r
     /**\r
-     * Test {@link ActionConvertor#getActions(java.util.List, short, java.math.BigInteger, org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.Flow)}\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
@@ -468,8 +495,17 @@ public class ActionConvertorV13Test {
         IpMatchBuilder ipMatchBld = new IpMatchBuilder().setIpProtocol((short) 6);\r
         MatchBuilder matchBld = new MatchBuilder().setIpMatch(ipMatchBld.build());\r
         FlowBuilder flowBld = new FlowBuilder().setMatch(matchBld.build());\r
+        Flow flow = flowBld.build();\r
+\r
+        ActionConvertorData data = new ActionConvertorData(OFConstants.OFP_VERSION_1_3);\r
+        data.setDatapathId(new BigInteger("42"));\r
+\r
+        if (flow.getMatch() != null && flow.getMatch().getIpMatch() != null) {\r
+            data.setIpProtocol(flow.getMatch().getIpMatch().getIpProtocol());\r
+        }\r
 \r
-        List<Action> actions = ActionConvertor.getActions(salActions, EncodeConstants.OF13_VERSION_ID, new BigInteger("42"), flowBld.build());\r
+        Optional<List<Action>> actionsOptional = ConvertorManager.getInstance().convert(salActions, data);\r
+        List<Action> actions = actionsOptional.orElse(Collections.emptyList());\r
 \r
         Assert.assertEquals("Wrong number of actions", 12, actions.size());\r
         Action action = actions.get(0);\r