Bug 5540 - FlowConvertor, FlowStatsResponseConvertor, FlowInstructionResponseConvertor
[openflowplugin.git] / openflowplugin / src / test / java / org / opendaylight / openflowplugin / openflow / md / core / sal / convertor / action / ActionConvertorV10Test.java
1 /*\r
2  * Copyright (c) 2014 Pantheon Technologies s.r.o. and others. All rights reserved.\r
3  *\r
4  * This program and the accompanying materials are made available under the\r
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
6  * and is available at http://www.eclipse.org/legal/epl-v10.html\r
7  */\r
8 \r
9 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action;\r
10 \r
11 import java.math.BigInteger;\r
12 import java.util.ArrayList;\r
13 import java.util.Collections;\r
14 import java.util.List;\r
15 import java.util.Optional;\r
16 import org.junit.Assert;\r
17 import org.junit.Test;\r
18 import org.opendaylight.openflowplugin.api.OFConstants;\r
19 import org.opendaylight.openflowplugin.extension.api.path.ActionPath;\r
20 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManager;\r
21 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action.data.ActionConvertorData;\r
22 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action.data.ActionResponseConvertorData;\r
23 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.flow.FlowConvertorUtil;\r
24 import org.opendaylight.openflowplugin.openflow.md.util.OpenflowPortsUtil;\r
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpVersion;\r
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;\r
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.PortNumber;\r
28 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;\r
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCase;\r
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionCaseBuilder;\r
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlDstActionCaseBuilder;\r
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlSrcActionCaseBuilder;\r
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetFieldCaseBuilder;\r
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwDstActionCaseBuilder;\r
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwSrcActionCaseBuilder;\r
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwTosActionCaseBuilder;\r
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetTpDstActionCaseBuilder;\r
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetTpSrcActionCaseBuilder;\r
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanIdActionCaseBuilder;\r
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanPcpActionCaseBuilder;\r
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.StripVlanActionCaseBuilder;\r
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.dl.dst.action._case.SetDlDstActionBuilder;\r
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.dl.src.action._case.SetDlSrcActionBuilder;\r
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.field._case.SetFieldBuilder;\r
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.dst.action._case.SetNwDstActionBuilder;\r
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.src.action._case.SetNwSrcActionBuilder;\r
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.tos.action._case.SetNwTosActionBuilder;\r
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.tp.dst.action._case.SetTpDstActionBuilder;\r
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.tp.src.action._case.SetTpSrcActionBuilder;\r
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.vlan.id.action._case.SetVlanIdActionBuilder;\r
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.vlan.pcp.action._case.SetVlanPcpActionBuilder;\r
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.strip.vlan.action._case.StripVlanActionBuilder;\r
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;\r
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;\r
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.address.address.Ipv4Builder;\r
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow;\r
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder;\r
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;\r
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;\r
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanPcp;\r
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.IpMatchBuilder;\r
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.VlanMatchBuilder;\r
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.vlan.match.fields.VlanIdBuilder;\r
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.OutputActionCaseBuilder;\r
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetDlDstCase;\r
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetDlSrcCase;\r
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetNwDstCase;\r
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetNwSrcCase;\r
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetNwTosCase;\r
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetTpDstCase;\r
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetTpSrcCase;\r
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetVlanPcpCase;\r
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetVlanVidCase;\r
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.output.action._case.OutputActionBuilder;\r
75 \r
76 /**\r
77  * @author michal.polkorab\r
78  *\r
79  */\r
80 public class ActionConvertorV10Test {\r
81 \r
82     /**\r
83      * 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
84      */\r
85     @Test\r
86     public void testGetActions() {\r
87         List<Action> salActions = new ArrayList<>();\r
88         ActionBuilder actionBuilder = new ActionBuilder();\r
89         SetVlanPcpActionCaseBuilder vlanPcpCaseBuilder = new SetVlanPcpActionCaseBuilder();\r
90         SetVlanPcpActionBuilder pcpBuilder = new SetVlanPcpActionBuilder();\r
91         pcpBuilder.setVlanPcp(new VlanPcp((short) 7));\r
92         vlanPcpCaseBuilder.setSetVlanPcpAction(pcpBuilder.build());\r
93         actionBuilder.setAction(vlanPcpCaseBuilder.build());\r
94         actionBuilder.setOrder(0);\r
95         salActions.add(actionBuilder.build());\r
96 \r
97         actionBuilder = new ActionBuilder();\r
98         StripVlanActionCaseBuilder stripCaseBuilder = new StripVlanActionCaseBuilder();\r
99         StripVlanActionBuilder stripBuilder = new StripVlanActionBuilder();\r
100         stripCaseBuilder.setStripVlanAction(stripBuilder.build());\r
101         actionBuilder.setAction(stripCaseBuilder.build());\r
102         actionBuilder.setOrder(1);\r
103         salActions.add(actionBuilder.build());\r
104 \r
105         actionBuilder = new ActionBuilder();\r
106         SetDlDstActionCaseBuilder dlDstCaseBuilder = new SetDlDstActionCaseBuilder();\r
107         SetDlDstActionBuilder dlDstBuilder = new SetDlDstActionBuilder();\r
108         dlDstBuilder.setAddress(new MacAddress("00:00:00:00:00:06"));\r
109         dlDstCaseBuilder.setSetDlDstAction(dlDstBuilder.build());\r
110         actionBuilder.setAction(dlDstCaseBuilder.build());\r
111         actionBuilder.setOrder(2);\r
112         salActions.add(actionBuilder.build());\r
113 \r
114         actionBuilder = new ActionBuilder();\r
115         SetDlSrcActionCaseBuilder dlSrcCaseBuilder = new SetDlSrcActionCaseBuilder();\r
116         SetDlSrcActionBuilder dlSrcBuilder = new SetDlSrcActionBuilder();\r
117         dlSrcBuilder.setAddress(new MacAddress("00:00:00:00:00:05"));\r
118         dlSrcCaseBuilder.setSetDlSrcAction(dlSrcBuilder.build());\r
119         actionBuilder.setAction(dlSrcCaseBuilder.build());\r
120         actionBuilder.setOrder(3);\r
121         salActions.add(actionBuilder.build());\r
122        \r
123         actionBuilder = new ActionBuilder();\r
124         SetNwSrcActionCaseBuilder nwSrcCaseBuilder = new SetNwSrcActionCaseBuilder();\r
125         SetNwSrcActionBuilder nwSrcBuilder = new SetNwSrcActionBuilder();\r
126         Ipv4Builder ipv4Builder = new Ipv4Builder();\r
127         /* Use prefix which is correct in canonical representation in test */\r
128         ipv4Builder.setIpv4Address(new Ipv4Prefix("10.0.0.0/24"));\r
129         nwSrcBuilder.setAddress(ipv4Builder.build());\r
130         nwSrcCaseBuilder.setSetNwSrcAction(nwSrcBuilder.build());\r
131         actionBuilder.setAction(nwSrcCaseBuilder.build());\r
132         actionBuilder.setOrder(4);\r
133         salActions.add(actionBuilder.build());\r
134         \r
135         actionBuilder = new ActionBuilder();\r
136         SetNwDstActionCaseBuilder nwDstCaseBuilder = new SetNwDstActionCaseBuilder();\r
137         SetNwDstActionBuilder nwDstBuilder = new SetNwDstActionBuilder();\r
138         ipv4Builder = new Ipv4Builder();\r
139         ipv4Builder.setIpv4Address(new Ipv4Prefix("10.0.0.2/32"));\r
140         nwDstBuilder.setAddress(ipv4Builder.build());\r
141         nwDstCaseBuilder.setSetNwDstAction(nwDstBuilder.build());\r
142         actionBuilder.setAction(nwDstCaseBuilder.build());\r
143         actionBuilder.setOrder(5);\r
144         salActions.add(actionBuilder.build());\r
145 \r
146         actionBuilder = new ActionBuilder();\r
147         SetTpSrcActionCaseBuilder tpSrcCaseBuilder = new SetTpSrcActionCaseBuilder();\r
148         SetTpSrcActionBuilder tpSrcBuilder = new SetTpSrcActionBuilder();\r
149         tpSrcBuilder.setPort(new PortNumber(54));\r
150         tpSrcCaseBuilder.setSetTpSrcAction(tpSrcBuilder.build());\r
151         actionBuilder.setAction(tpSrcCaseBuilder.build());\r
152         actionBuilder.setOrder(6);\r
153         salActions.add(actionBuilder.build());\r
154 \r
155         actionBuilder = new ActionBuilder();\r
156         SetTpDstActionCaseBuilder tpDstCaseBuilder = new SetTpDstActionCaseBuilder();\r
157         SetTpDstActionBuilder tpDstBuilder = new SetTpDstActionBuilder();\r
158         tpDstBuilder.setPort(new PortNumber(45));\r
159         tpDstCaseBuilder.setSetTpDstAction(tpDstBuilder.build());\r
160         actionBuilder.setAction(tpDstCaseBuilder.build());\r
161         actionBuilder.setOrder(7);\r
162         salActions.add(actionBuilder.build());\r
163 \r
164         actionBuilder = new ActionBuilder();\r
165         SetNwTosActionCaseBuilder tosCaseBuilder = new SetNwTosActionCaseBuilder();\r
166         SetNwTosActionBuilder tosBuilder = new SetNwTosActionBuilder();\r
167         tosBuilder.setTos(18);\r
168         tosCaseBuilder.setSetNwTosAction(tosBuilder.build());\r
169         actionBuilder.setAction(tosCaseBuilder.build());\r
170         actionBuilder.setOrder(8);\r
171         salActions.add(actionBuilder.build());\r
172 \r
173         actionBuilder = new ActionBuilder();\r
174         SetVlanIdActionCaseBuilder vlanIdCaseBuilder = new SetVlanIdActionCaseBuilder();\r
175         SetVlanIdActionBuilder vlanIdBuilder = new SetVlanIdActionBuilder();\r
176         vlanIdBuilder.setVlanId(new VlanId(22));\r
177         vlanIdCaseBuilder.setSetVlanIdAction(vlanIdBuilder.build());\r
178         actionBuilder.setAction(vlanIdCaseBuilder.build());\r
179         actionBuilder.setOrder(9);\r
180         salActions.add(actionBuilder.build());\r
181 \r
182         actionBuilder = new ActionBuilder();\r
183         PopVlanActionCaseBuilder popVlanActionCaseBuilder = new PopVlanActionCaseBuilder();\r
184         actionBuilder.setAction(popVlanActionCaseBuilder.build());\r
185         actionBuilder.setOrder(10);\r
186         salActions.add(actionBuilder.build());\r
187 \r
188         actionBuilder = new ActionBuilder();\r
189         SetFieldCaseBuilder setFieldCaseBuilder = new SetFieldCaseBuilder();\r
190         SetFieldBuilder setFieldBuilder = new SetFieldBuilder();\r
191         VlanMatchBuilder vlanMatchBuilder = new VlanMatchBuilder();\r
192         vlanMatchBuilder.setVlanId(new VlanIdBuilder().setVlanId(new VlanId(22)).build());\r
193         setFieldBuilder.setVlanMatch(vlanMatchBuilder.build());\r
194         setFieldCaseBuilder.setSetField(setFieldBuilder.build());\r
195         actionBuilder.setAction(setFieldCaseBuilder.build());\r
196         actionBuilder.setOrder(11);\r
197         salActions.add(actionBuilder.build());\r
198         \r
199         IpMatchBuilder ipMatchBld = new IpMatchBuilder().setIpProto(IpVersion.Ipv4);\r
200         MatchBuilder matchBld = new MatchBuilder().setIpMatch(ipMatchBld.build());\r
201         FlowBuilder flowBld = new FlowBuilder().setMatch(matchBld.build());\r
202         Flow flow = flowBld.build();\r
203 \r
204         ActionConvertorData data = new ActionConvertorData(OFConstants.OFP_VERSION_1_0);\r
205         data.setDatapathId(new BigInteger("42"));\r
206         data.setIpProtocol(FlowConvertorUtil.getIpProtocolFromFlow(flow));\r
207 \r
208         Optional<List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action>> actionsOptional =\r
209                 ConvertorManager.getInstance().convert(salActions, data);\r
210 \r
211         List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action> actions = actionsOptional.orElse(Collections.emptyList());\r
212         \r
213         Assert.assertEquals("Wrong number of actions", 12, actions.size());\r
214         \r
215         org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action action = actions.get(0);\r
216         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"\r
217                 + ".action.rev150203.action.grouping.action.choice.SetVlanPcpCase", action.getActionChoice().getImplementedInterface().getName());\r
218         SetVlanPcpCase setVlanPcpCase = (SetVlanPcpCase) action.getActionChoice();\r
219         Assert.assertEquals("Wrong vlan pcp", 7, setVlanPcpCase.getSetVlanPcpAction().getVlanPcp().intValue());\r
220         \r
221         action = actions.get(1);\r
222         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"\r
223                 + ".action.rev150203.action.grouping.action.choice.StripVlanCase", action.getActionChoice().getImplementedInterface().getName());\r
224         \r
225         action = actions.get(2);\r
226         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"\r
227                 + ".action.rev150203.action.grouping.action.choice.SetDlDstCase", action.getActionChoice().getImplementedInterface().getName());\r
228         SetDlDstCase setDlDstCase = (SetDlDstCase) action.getActionChoice();\r
229         Assert.assertEquals("Wrong dl dst", "00:00:00:00:00:06", setDlDstCase.getSetDlDstAction().getDlDstAddress().getValue());\r
230         \r
231         action = actions.get(3);\r
232         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"\r
233                 + ".action.rev150203.action.grouping.action.choice.SetDlSrcCase", action.getActionChoice().getImplementedInterface().getName());\r
234         SetDlSrcCase setDlSrcCase = (SetDlSrcCase) action.getActionChoice();\r
235         Assert.assertEquals("Wrong dl src", "00:00:00:00:00:05", setDlSrcCase.getSetDlSrcAction().getDlSrcAddress().getValue());\r
236         \r
237         action = actions.get(4);\r
238         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"\r
239                 + ".action.rev150203.action.grouping.action.choice.SetNwSrcCase", action.getActionChoice().getImplementedInterface().getName());\r
240         SetNwSrcCase setNwSrcCase = (SetNwSrcCase) action.getActionChoice();\r
241         Assert.assertEquals("Wrong nw src", "10.0.0.0", setNwSrcCase.getSetNwSrcAction().getIpAddress().getValue());\r
242         \r
243         action = actions.get(5);\r
244         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"\r
245                 + ".action.rev150203.action.grouping.action.choice.SetNwDstCase", action.getActionChoice().getImplementedInterface().getName());\r
246         SetNwDstCase setNwDstCase = (SetNwDstCase) action.getActionChoice();\r
247         Assert.assertEquals("Wrong nw dst", "10.0.0.2", setNwDstCase.getSetNwDstAction().getIpAddress().getValue());\r
248         \r
249         action = actions.get(6);\r
250         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"\r
251                 + ".action.rev150203.action.grouping.action.choice.SetTpSrcCase", action.getActionChoice().getImplementedInterface().getName());\r
252         SetTpSrcCase setTpSrcCase = (SetTpSrcCase) action.getActionChoice();\r
253         Assert.assertEquals("Wrong tp src", 54, setTpSrcCase.getSetTpSrcAction().getPort().getValue().intValue());\r
254         \r
255         action = actions.get(7);\r
256         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"\r
257                 + ".action.rev150203.action.grouping.action.choice.SetTpDstCase", action.getActionChoice().getImplementedInterface().getName());\r
258         SetTpDstCase setTpDstCase = (SetTpDstCase) action.getActionChoice();\r
259         Assert.assertEquals("Wrong tp dst", 45, setTpDstCase.getSetTpDstAction().getPort().getValue().intValue());\r
260         \r
261         action = actions.get(8);\r
262         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"\r
263                 + ".action.rev150203.action.grouping.action.choice.SetNwTosCase", action.getActionChoice().getImplementedInterface().getName());\r
264         SetNwTosCase setNwTosCase = (SetNwTosCase) action.getActionChoice();\r
265         Assert.assertEquals("Wrong nw tos", 18, setNwTosCase.getSetNwTosAction().getNwTos().intValue());\r
266         \r
267         action = actions.get(9);\r
268         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"\r
269                 + ".action.rev150203.action.grouping.action.choice.SetVlanVidCase", action.getActionChoice().getImplementedInterface().getName());\r
270         SetVlanVidCase setVlanVidCase = (SetVlanVidCase) action.getActionChoice();\r
271         Assert.assertEquals("Wrong vlan id", 22, setVlanVidCase.getSetVlanVidAction().getVlanVid().intValue());\r
272 \r
273         action = actions.get(10);\r
274         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"\r
275                 + ".action.rev150203.action.grouping.action.choice.StripVlanCase", action.getActionChoice().getImplementedInterface().getName());\r
276 \r
277         action = actions.get(11);\r
278         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"\r
279                 + ".action.rev150203.action.grouping.action.choice.SetVlanVidCase", action.getActionChoice().getImplementedInterface().getName());\r
280         setVlanVidCase = (SetVlanVidCase) action.getActionChoice();\r
281         Assert.assertEquals("Wrong vlan id", 22, setVlanVidCase.getSetVlanVidAction().getVlanVid().intValue());\r
282     }\r
283 \r
284     /**\r
285      * 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
286      */\r
287     @Test\r
288     public void testToMDSalActions() {\r
289         OpenflowPortsUtil.init();\r
290 \r
291         List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action> actions = new ArrayList<>();\r
292         org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.ActionBuilder actionbuilder = \r
293                 new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.ActionBuilder();\r
294         \r
295         OutputActionCaseBuilder caseBuilder = new OutputActionCaseBuilder();\r
296         OutputActionBuilder outputBuilder = new OutputActionBuilder();\r
297         outputBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber(14L));\r
298         outputBuilder.setMaxLength(555);\r
299         caseBuilder.setOutputAction(outputBuilder.build());\r
300         actionbuilder.setActionChoice(caseBuilder.build());\r
301         actions.add(actionbuilder.build());\r
302 \r
303         ActionResponseConvertorData data = new ActionResponseConvertorData(OFConstants.OFP_VERSION_1_0);\r
304         data.setActionPath(ActionPath.FLOWSSTATISTICSUPDATE_FLOWANDSTATISTICSMAPLIST_INSTRUCTIONS_INSTRUCTION_INSTRUCTION_APPLYACTIONSCASE_APPLYACTIONS_ACTION_ACTION);\r
305 \r
306         Optional<List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action\r
307         .Action>> mdSalActionsOptional =\r
308                 ConvertorManager.getInstance().convert(\r
309                         actions, data);\r
310 \r
311         List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action\r
312                 .Action> mdSalActions = mdSalActionsOptional.orElse(Collections.emptyList());\r
313 \r
314         Assert.assertEquals("Wrong number of output actions", 1, mdSalActions.size());\r
315         org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action = mdSalActions.get(0);\r
316         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types"\r
317                 + ".rev131112.action.action.OutputActionCase", action.getImplementedInterface().getName());\r
318         OutputActionCase outputAction = (OutputActionCase) action;\r
319         Assert.assertEquals("Wrong output port", "14", outputAction.getOutputAction().getOutputNodeConnector().getValue());\r
320         Assert.assertEquals("Wrong max length", 555, outputAction.getOutputAction().getMaxLength().intValue());\r
321     }\r
322 }\r