* 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
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
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
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
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
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
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
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
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
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
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
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
+ ".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
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