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