2 * Copyright (c) 2014 Pantheon Technologies s.r.o. and others. All rights reserved.
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
9 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action;
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;
78 * Unit tests for v1.0 action converters.
80 * @author michal.polkorab
82 public class ActionConvertorV10Test {
83 private ConvertorManager convertorManager;
87 convertorManager = ConvertorManagerFactory.createDefaultManager();
91 * Test {@link ActionConvertor#convert(List, ActionConvertorData)}}.
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);
103 List<Action> salActions = new ArrayList<>();
104 salActions.add(actionBuilder.build());
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());
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());
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());
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());
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());
150 SetNwDstActionCaseBuilder nwDstCaseBuilder = new SetNwDstActionCaseBuilder();
151 nwDstCaseBuilder.setSetNwDstAction(nwDstBuilder.build());
152 actionBuilder.setAction(nwDstCaseBuilder.build());
153 actionBuilder.setOrder(5);
154 salActions.add(actionBuilder.build());
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());
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());
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());
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());
192 actionBuilder = new ActionBuilder();
193 PopVlanActionCaseBuilder popVlanActionCaseBuilder = new PopVlanActionCaseBuilder();
194 actionBuilder.setAction(popVlanActionCaseBuilder.build());
195 actionBuilder.setOrder(10);
196 salActions.add(actionBuilder.build());
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());
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();
214 ActionConvertorData data = new ActionConvertorData(OFConstants.OFP_VERSION_1_0);
215 data.setDatapathId(Uint64.valueOf(42));
216 data.setIpProtocol(FlowConvertorUtil.getIpProtocolFromFlow(flow));
218 Optional<List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping
219 .Action>> actionsOptional = convertorManager.convert(salActions, data);
221 List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action>
222 actions = actionsOptional.orElse(Collections.emptyList());
224 Assert.assertEquals("Wrong number of actions", 12, actions.size());
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());
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());
311 * Test {@link ActionResponseConvertor#convert(List, ActionResponseConvertorData)}}.
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());
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());
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());
331 ActionResponseConvertorData data = new ActionResponseConvertorData(OFConstants.OFP_VERSION_1_0);
332 data.setActionPath(ActionPath.FLOWS_STATISTICS_UPDATE_APPLY_ACTIONS);
334 Optional<List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action>>
335 mdSalActionsOptional = convertorManager.convert(actions, data);
337 List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action
338 .Action> mdSalActions = mdSalActionsOptional.orElse(Collections.emptyList());
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());