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