Bump mdsal to 5.0.2
[openflowplugin.git] / openflowplugin / src / test / java / org / opendaylight / openflowplugin / openflow / md / core / sal / convertor / action / ActionConvertorV13Test.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.Ipv4Prefix;
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv6Prefix;
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCase;
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.PopMplsActionCase;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushMplsActionCase;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushPbbActionCase;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushVlanActionCase;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlDstActionCaseBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetDlSrcActionCaseBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetFieldCase;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetMplsTtlActionCase;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwDstActionCaseBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwSrcActionCaseBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwTosActionCaseBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwTtlActionCase;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetQueueActionCase;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetTpDstActionCaseBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetTpSrcActionCaseBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanIdActionCaseBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetVlanPcpActionCaseBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.StripVlanActionCaseBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.dl.dst.action._case.SetDlDstActionBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.dl.src.action._case.SetDlSrcActionBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.dst.action._case.SetNwDstActionBuilder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.src.action._case.SetNwSrcActionBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.tos.action._case.SetNwTosActionBuilder;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.tp.dst.action._case.SetTpDstActionBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.tp.src.action._case.SetTpSrcActionBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.vlan.id.action._case.SetVlanIdActionBuilder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.vlan.pcp.action._case.SetVlanPcpActionBuilder;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.strip.vlan.action._case.StripVlanActionBuilder;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.address.address.Ipv4Builder;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.address.address.Ipv6Builder;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.Flow;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.tables.table.FlowBuilder;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanPcp;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.IpMatchBuilder;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.CopyTtlInCaseBuilder;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.CopyTtlOutCaseBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.DecMplsTtlCaseBuilder;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.DecNwTtlCaseBuilder;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.GroupCaseBuilder;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.OutputActionCaseBuilder;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PopMplsCaseBuilder;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PopPbbCaseBuilder;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PopVlanCaseBuilder;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PushMplsCaseBuilder;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PushPbbCaseBuilder;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PushVlanCaseBuilder;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetFieldCaseBuilder;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetMplsTtlCaseBuilder;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetNwDstCaseBuilder;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetNwTtlCaseBuilder;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetQueueCaseBuilder;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.StripVlanCaseBuilder;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.group._case.GroupActionBuilder;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.output.action._case.OutputActionBuilder;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.pop.mpls._case.PopMplsActionBuilder;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.push.mpls._case.PushMplsActionBuilder;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.push.pbb._case.PushPbbActionBuilder;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.push.vlan._case.PushVlanActionBuilder;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.set.field._case.SetFieldActionBuilder;
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.set.mpls.ttl._case.SetMplsTtlActionBuilder;
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.set.nw.ttl._case.SetNwTtlActionBuilder;
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.set.queue._case.SetQueueActionBuilder;
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.ActionBuilder;
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.EtherType;
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.InPort;
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.MatchField;
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OpenflowBasicClass;
101 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntry;
102 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntryBuilder;
103 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.EthDstCase;
104 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.EthSrcCase;
105 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.InPortCaseBuilder;
106 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.IpDscpCase;
107 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv4DstCase;
108 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv4SrcCase;
109 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6DstCase;
110 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.Ipv6SrcCase;
111 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.TcpDstCase;
112 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.TcpSrcCase;
113 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.VlanPcpCase;
114 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.VlanVidCase;
115 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.in.port._case.InPortBuilder;
116 import org.opendaylight.yangtools.yang.common.Uint64;
117
118 /**
119  * Unit tests for v1.3 action converters.
120  *
121  * @author michal.polkorab
122  */
123 public class ActionConvertorV13Test {
124     private ConvertorManager convertorManager;
125
126     @Before
127     public void setUp() {
128         convertorManager = ConvertorManagerFactory.createDefaultManager();
129     }
130
131     /**
132      * Test {@link ActionResponseConvertor#convert(List, ActionResponseConvertorData)}}.
133      */
134     @Test
135     public void testToMDSalActions() {
136         List<Action> actions = new ArrayList<>();
137         ActionResponseConvertorData data = new ActionResponseConvertorData(OFConstants.OFP_VERSION_1_3);
138         data.setActionPath(ActionPath.FLOWS_STATISTICS_UPDATE_APPLY_ACTIONS);
139
140         Optional<List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action
141                 .Action>> mdSalActions = convertorManager.convert(actions, data);
142
143         Assert.assertEquals("Wrong number of output actions", 0, mdSalActions.orElse(Collections.emptyList()).size());
144     }
145
146     /**
147      * Test {@link ActionConvertor#convert(List, ActionConvertorData)}}.
148      */
149     //@Test
150     public void testToMDSalActions2() {
151         OutputActionCaseBuilder caseBuilder = new OutputActionCaseBuilder();
152         OutputActionBuilder outputBuilder = new OutputActionBuilder();
153         outputBuilder.setPort(new PortNumber(42L));
154         outputBuilder.setMaxLength(52);
155         caseBuilder.setOutputAction(outputBuilder.build());
156
157         ActionBuilder actionBuilder = new ActionBuilder();
158         actionBuilder.setActionChoice(caseBuilder.build());
159
160         List<Action> actions = new ArrayList<>();
161         actions.add(actionBuilder.build());
162
163         actionBuilder = new ActionBuilder();
164         actionBuilder.setActionChoice(new CopyTtlOutCaseBuilder().build());
165         actions.add(actionBuilder.build());
166
167         actionBuilder = new ActionBuilder();
168         actionBuilder.setActionChoice(new CopyTtlInCaseBuilder().build());
169         actions.add(actionBuilder.build());
170
171         actionBuilder = new ActionBuilder();
172         SetMplsTtlCaseBuilder setMplsTtlCaseBuilder = new SetMplsTtlCaseBuilder();
173         SetMplsTtlActionBuilder setMplsTtlBuilder = new SetMplsTtlActionBuilder();
174         setMplsTtlBuilder.setMplsTtl((short) 4);
175         setMplsTtlCaseBuilder.setSetMplsTtlAction(setMplsTtlBuilder.build());
176         actionBuilder.setActionChoice(setMplsTtlCaseBuilder.build());
177         actions.add(actionBuilder.build());
178
179         actionBuilder = new ActionBuilder();
180         actionBuilder.setActionChoice(new DecMplsTtlCaseBuilder().build());
181         actions.add(actionBuilder.build());
182
183         actionBuilder = new ActionBuilder();
184         PushVlanCaseBuilder pushVlanCaseBuilder = new PushVlanCaseBuilder();
185         PushVlanActionBuilder pushVlanBuilder = new PushVlanActionBuilder();
186         pushVlanBuilder.setEthertype(new EtherType(new EtherType(16)));
187         pushVlanCaseBuilder.setPushVlanAction(pushVlanBuilder.build());
188         actionBuilder.setActionChoice(pushVlanCaseBuilder.build());
189         actions.add(actionBuilder.build());
190
191         actionBuilder = new ActionBuilder();
192         actionBuilder.setActionChoice(new PopVlanCaseBuilder().build());
193         actions.add(actionBuilder.build());
194
195         actionBuilder = new ActionBuilder();
196         PushMplsCaseBuilder pushMplsCaseBuilder = new PushMplsCaseBuilder();
197         PushMplsActionBuilder pushMplsBuilder = new PushMplsActionBuilder();
198         pushMplsBuilder.setEthertype(new EtherType(new EtherType(17)));
199         pushMplsCaseBuilder.setPushMplsAction(pushMplsBuilder.build());
200         actionBuilder.setActionChoice(pushMplsCaseBuilder.build());
201         actions.add(actionBuilder.build());
202
203         actionBuilder = new ActionBuilder();
204         PopMplsCaseBuilder popMplsCaseBuilder = new PopMplsCaseBuilder();
205         PopMplsActionBuilder popMplsBuilder = new PopMplsActionBuilder();
206         popMplsBuilder.setEthertype(new EtherType(new EtherType(18)));
207         popMplsCaseBuilder.setPopMplsAction(popMplsBuilder.build());
208         actionBuilder.setActionChoice(popMplsCaseBuilder.build());
209         actions.add(actionBuilder.build());
210
211         actionBuilder = new ActionBuilder();
212         SetQueueCaseBuilder setQueueCaseBuilder = new SetQueueCaseBuilder();
213         SetQueueActionBuilder setQueueBuilder = new SetQueueActionBuilder();
214         setQueueBuilder.setQueueId(1234L);
215         setQueueCaseBuilder.setSetQueueAction(setQueueBuilder.build());
216         actionBuilder.setActionChoice(setQueueCaseBuilder.build());
217         actions.add(actionBuilder.build());
218
219         actionBuilder = new ActionBuilder();
220         GroupCaseBuilder groupCaseBuilder = new GroupCaseBuilder();
221         GroupActionBuilder groupActionBuilder = new GroupActionBuilder();
222         groupActionBuilder.setGroupId(555L);
223         groupCaseBuilder.setGroupAction(groupActionBuilder.build());
224         actionBuilder.setActionChoice(groupCaseBuilder.build());
225         actions.add(actionBuilder.build());
226
227         actionBuilder = new ActionBuilder();
228         SetNwTtlCaseBuilder nwTtlCaseBuilder = new SetNwTtlCaseBuilder();
229         SetNwTtlActionBuilder nwTtlBuilder = new SetNwTtlActionBuilder();
230         nwTtlBuilder.setNwTtl((short) 8);
231         nwTtlCaseBuilder.setSetNwTtlAction(nwTtlBuilder.build());
232         actionBuilder.setActionChoice(nwTtlCaseBuilder.build());
233         actions.add(actionBuilder.build());
234
235         actionBuilder = new ActionBuilder();
236         actionBuilder.setActionChoice(new DecNwTtlCaseBuilder().build());
237         actions.add(actionBuilder.build());
238
239         actionBuilder = new ActionBuilder();
240         MatchEntryBuilder matchBuilder = new MatchEntryBuilder();
241         matchBuilder.setOxmClass(OpenflowBasicClass.class);
242         matchBuilder.setOxmMatchField(InPort.class);
243         matchBuilder.setHasMask(false);
244         InPortCaseBuilder inPortCaseBuilder = new InPortCaseBuilder();
245         InPortBuilder inPortBuilder = new InPortBuilder();
246         inPortBuilder.setPortNumber(new PortNumber(1L));
247         inPortCaseBuilder.setInPort(inPortBuilder.build());
248         matchBuilder.setMatchEntryValue(inPortCaseBuilder.build());
249
250         List<MatchEntry> entries = new ArrayList<>();
251         entries.add(matchBuilder.build());
252
253         SetFieldActionBuilder setFieldBuilder = new SetFieldActionBuilder();
254         setFieldBuilder.setMatchEntry(entries);
255
256         SetFieldCaseBuilder setFieldCaseBuilder = new SetFieldCaseBuilder();
257         setFieldCaseBuilder.setSetFieldAction(setFieldBuilder.build());
258         actionBuilder.setActionChoice(setFieldCaseBuilder.build());
259         actions.add(actionBuilder.build());
260
261         actionBuilder = new ActionBuilder();
262         PushPbbCaseBuilder pushPbbCaseBuilder = new PushPbbCaseBuilder();
263         PushPbbActionBuilder pushPbbBuilder = new PushPbbActionBuilder();
264         pushPbbBuilder.setEthertype(new EtherType(new EtherType(19)));
265         pushPbbCaseBuilder.setPushPbbAction(pushPbbBuilder.build());
266         actionBuilder.setActionChoice(pushPbbCaseBuilder.build());
267         actions.add(actionBuilder.build());
268
269         actionBuilder = new ActionBuilder();
270         actionBuilder.setActionChoice(new PopPbbCaseBuilder().build());
271         actions.add(actionBuilder.build());
272
273         // Add some unsupported actions and check if they are missing from results
274         actionBuilder = new ActionBuilder();
275         actionBuilder.setActionChoice(new SetNwDstCaseBuilder().build());
276         actions.add(actionBuilder.build());
277
278         actionBuilder = new ActionBuilder();
279         actionBuilder.setActionChoice(new StripVlanCaseBuilder().build());
280         actions.add(actionBuilder.build());
281
282         ActionResponseConvertorData data = new ActionResponseConvertorData(OFConstants.OFP_VERSION_1_3);
283         data.setActionPath(ActionPath.FLOWS_STATISTICS_UPDATE_APPLY_ACTIONS);
284
285         Optional<List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action
286                 .Action>> mdSalActionsOptional = convertorManager.convert(actions, data);
287
288         List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action
289                 .Action> mdSalActions = mdSalActionsOptional.orElse(Collections.emptyList());
290
291         Assert.assertEquals("Wrong number of output actions", 16, mdSalActions.size());
292         org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action = mdSalActions.get(0);
293         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types"
294                 + ".rev131112.action.action.OutputActionCase", action.implementedInterface().getName());
295         OutputActionCase output = (OutputActionCase) action;
296         Assert.assertEquals("Wrong output port", "42", output.getOutputAction().getOutputNodeConnector().getValue());
297         Assert.assertEquals("Wrong max length", 52, output.getOutputAction().getMaxLength().intValue());
298         action = mdSalActions.get(1);
299         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types"
300                 + ".rev131112.action.action.CopyTtlOutCase", action.implementedInterface().getName());
301         action = mdSalActions.get(2);
302         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types"
303                 + ".rev131112.action.action.CopyTtlInCase", action.implementedInterface().getName());
304         action = mdSalActions.get(3);
305         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types"
306                 + ".rev131112.action.action.SetMplsTtlActionCase", action.implementedInterface().getName());
307         SetMplsTtlActionCase setMplsTtl = (SetMplsTtlActionCase) action;
308         Assert.assertEquals("Wrong mpls ttl", 4, setMplsTtl.getSetMplsTtlAction().getMplsTtl().intValue());
309         action = mdSalActions.get(4);
310         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types"
311                 + ".rev131112.action.action.DecMplsTtlCase", action.implementedInterface().getName());
312         action = mdSalActions.get(5);
313         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types"
314                 + ".rev131112.action.action.PushVlanActionCase", action.implementedInterface().getName());
315         PushVlanActionCase pushVlan = (PushVlanActionCase) action;
316         Assert.assertEquals("Wrong ethertype", 16, pushVlan.getPushVlanAction().getEthernetType().intValue());
317         action = mdSalActions.get(6);
318         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types"
319                 + ".rev131112.action.action.PopVlanActionCase", action.implementedInterface().getName());
320         action = mdSalActions.get(7);
321         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types"
322                 + ".rev131112.action.action.PushMplsActionCase", action.implementedInterface().getName());
323         PushMplsActionCase pushMpls = (PushMplsActionCase) action;
324         Assert.assertEquals("Wrong ethertype", 17, pushMpls.getPushMplsAction().getEthernetType().intValue());
325         action = mdSalActions.get(8);
326         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types"
327                 + ".rev131112.action.action.PopMplsActionCase", action.implementedInterface().getName());
328         PopMplsActionCase popMpls = (PopMplsActionCase) action;
329         Assert.assertEquals("Wrong ethertype", 18, popMpls.getPopMplsAction().getEthernetType().intValue());
330         action = mdSalActions.get(9);
331         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types"
332                 + ".rev131112.action.action.SetQueueActionCase", action.implementedInterface().getName());
333         SetQueueActionCase setQueue = (SetQueueActionCase) action;
334         Assert.assertEquals("Wrong queue-id", 1234, setQueue.getSetQueueAction().getQueueId().intValue());
335         action = mdSalActions.get(10);
336         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types"
337                 + ".rev131112.action.action.GroupActionCase", action.implementedInterface().getName());
338         GroupActionCase groupAction = (GroupActionCase) action;
339         Assert.assertEquals("Wrong group-id", 555, groupAction.getGroupAction().getGroupId().intValue());
340         action = mdSalActions.get(11);
341         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types"
342                 + ".rev131112.action.action.SetNwTtlActionCase", action.implementedInterface().getName());
343         SetNwTtlActionCase setNwTtl = (SetNwTtlActionCase) action;
344         Assert.assertEquals("Wrong nw ttl", 8, setNwTtl.getSetNwTtlAction().getNwTtl().intValue());
345         action = mdSalActions.get(12);
346         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types"
347                 + ".rev131112.action.action.DecNwTtlCase", action.implementedInterface().getName());
348         action = mdSalActions.get(13);
349         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types"
350                 + ".rev131112.action.action.SetFieldCase", action.implementedInterface().getName());
351         SetFieldCase setField = (SetFieldCase) action;
352         Assert.assertEquals("Wrong in port", "openflow:null:1", setField.getSetField().getInPort().getValue());
353         action = mdSalActions.get(14);
354         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types"
355                 + ".rev131112.action.action.PushPbbActionCase", action.implementedInterface().getName());
356         PushPbbActionCase pushPbb = (PushPbbActionCase) action;
357         Assert.assertEquals("Wrong ethertype", 19, pushPbb.getPushPbbAction().getEthernetType().intValue());
358         action = mdSalActions.get(15);
359         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types"
360                 + ".rev131112.action.action.PopPbbActionCase", action.implementedInterface().getName());
361     }
362
363     /**
364      * Test {@link ActionConvertor#convert(List, ActionConvertorData)} }.
365      */
366     @Test
367     public void testGetActions() {
368         org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list
369                 .ActionBuilder actionBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112
370                 .action.list.ActionBuilder();
371
372         SetVlanPcpActionCaseBuilder vlanPcpCaseBuilder = new SetVlanPcpActionCaseBuilder();
373         SetVlanPcpActionBuilder pcpBuilder = new SetVlanPcpActionBuilder();
374         pcpBuilder.setVlanPcp(new VlanPcp((short) 7));
375         vlanPcpCaseBuilder.setSetVlanPcpAction(pcpBuilder.build());
376         actionBuilder.setAction(vlanPcpCaseBuilder.build());
377         actionBuilder.setOrder(0);
378
379         List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action>
380             salActions = new ArrayList<>();
381         salActions.add(actionBuilder.build());
382
383         actionBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112
384                 .action.list.ActionBuilder();
385         StripVlanActionCaseBuilder stripCaseBuilder = new StripVlanActionCaseBuilder();
386         StripVlanActionBuilder stripBuilder = new StripVlanActionBuilder();
387         stripCaseBuilder.setStripVlanAction(stripBuilder.build());
388         actionBuilder.setAction(stripCaseBuilder.build());
389         actionBuilder.setOrder(1);
390         salActions.add(actionBuilder.build());
391
392         actionBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112
393                 .action.list.ActionBuilder();
394         SetDlDstActionCaseBuilder dlDstCaseBuilder = new SetDlDstActionCaseBuilder();
395         SetDlDstActionBuilder dlDstBuilder = new SetDlDstActionBuilder();
396         dlDstBuilder.setAddress(new MacAddress("00:00:00:00:00:06"));
397         dlDstCaseBuilder.setSetDlDstAction(dlDstBuilder.build());
398         actionBuilder.setAction(dlDstCaseBuilder.build());
399         actionBuilder.setOrder(2);
400         salActions.add(actionBuilder.build());
401
402         actionBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112
403                 .action.list.ActionBuilder();
404         SetDlSrcActionCaseBuilder dlSrcCaseBuilder = new SetDlSrcActionCaseBuilder();
405         SetDlSrcActionBuilder dlSrcBuilder = new SetDlSrcActionBuilder();
406         dlSrcBuilder.setAddress(new MacAddress("00:00:00:00:00:05"));
407         dlSrcCaseBuilder.setSetDlSrcAction(dlSrcBuilder.build());
408         actionBuilder.setAction(dlSrcCaseBuilder.build());
409         actionBuilder.setOrder(3);
410         salActions.add(actionBuilder.build());
411
412         actionBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112
413                 .action.list.ActionBuilder();
414         SetNwSrcActionCaseBuilder nwSrcCaseBuilder = new SetNwSrcActionCaseBuilder();
415         SetNwSrcActionBuilder nwSrcBuilder = new SetNwSrcActionBuilder();
416         Ipv4Builder ipv4Builder = new Ipv4Builder();
417         /* Correct canonical form for v4 prefix!!! */
418         ipv4Builder.setIpv4Address(new Ipv4Prefix("10.0.0.0/24"));
419         nwSrcBuilder.setAddress(ipv4Builder.build());
420         nwSrcCaseBuilder.setSetNwSrcAction(nwSrcBuilder.build());
421         actionBuilder.setAction(nwSrcCaseBuilder.build());
422         actionBuilder.setOrder(4);
423         salActions.add(actionBuilder.build());
424
425         actionBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112
426                 .action.list.ActionBuilder();
427         SetNwDstActionBuilder nwDstBuilder = new SetNwDstActionBuilder();
428         ipv4Builder = new Ipv4Builder();
429         ipv4Builder.setIpv4Address(new Ipv4Prefix("10.0.0.2/32"));
430         nwDstBuilder.setAddress(ipv4Builder.build());
431
432         SetNwDstActionCaseBuilder nwDstCaseBuilder = new SetNwDstActionCaseBuilder();
433         nwDstCaseBuilder.setSetNwDstAction(nwDstBuilder.build());
434         actionBuilder.setAction(nwDstCaseBuilder.build());
435         actionBuilder.setOrder(5);
436         salActions.add(actionBuilder.build());
437
438         actionBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112
439                 .action.list.ActionBuilder();
440         SetTpSrcActionCaseBuilder tpSrcCaseBuilder = new SetTpSrcActionCaseBuilder();
441         SetTpSrcActionBuilder tpSrcBuilder = new SetTpSrcActionBuilder();
442         tpSrcBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types
443                 .rev130715.PortNumber(54));
444         tpSrcCaseBuilder.setSetTpSrcAction(tpSrcBuilder.build());
445         actionBuilder.setAction(tpSrcCaseBuilder.build());
446         actionBuilder.setOrder(6);
447         salActions.add(actionBuilder.build());
448
449         actionBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112
450                 .action.list.ActionBuilder();
451         SetTpDstActionCaseBuilder tpDstCaseBuilder = new SetTpDstActionCaseBuilder();
452         SetTpDstActionBuilder tpDstBuilder = new SetTpDstActionBuilder();
453         tpDstBuilder.setPort(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types
454                 .rev130715.PortNumber(45));
455         tpDstCaseBuilder.setSetTpDstAction(tpDstBuilder.build());
456         actionBuilder.setAction(tpDstCaseBuilder.build());
457         actionBuilder.setOrder(7);
458         salActions.add(actionBuilder.build());
459
460         actionBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112
461                 .action.list.ActionBuilder();
462         SetNwTosActionCaseBuilder tosCaseBuilder = new SetNwTosActionCaseBuilder();
463         SetNwTosActionBuilder tosBuilder = new SetNwTosActionBuilder();
464         tosBuilder.setTos(16);
465         tosCaseBuilder.setSetNwTosAction(tosBuilder.build());
466         actionBuilder.setAction(tosCaseBuilder.build());
467         actionBuilder.setOrder(8);
468         salActions.add(actionBuilder.build());
469
470         actionBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112
471                 .action.list.ActionBuilder();
472         SetVlanIdActionCaseBuilder vlanIdCaseBuilder = new SetVlanIdActionCaseBuilder();
473         SetVlanIdActionBuilder vlanIdBuilder = new SetVlanIdActionBuilder();
474         vlanIdBuilder.setVlanId(new VlanId(22));
475         vlanIdCaseBuilder.setSetVlanIdAction(vlanIdBuilder.build());
476         actionBuilder.setAction(vlanIdCaseBuilder.build());
477         actionBuilder.setOrder(9);
478         salActions.add(actionBuilder.build());
479
480         actionBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112
481                 .action.list.ActionBuilder();
482         nwSrcCaseBuilder = new SetNwSrcActionCaseBuilder();
483         nwSrcBuilder = new SetNwSrcActionBuilder();
484         Ipv6Builder ipv6Builder = new Ipv6Builder();
485         /* Use canonical form, 00:00:0000 is not a valid v6 notation */
486         ipv6Builder.setIpv6Address(new Ipv6Prefix("::5/128"));
487         nwSrcBuilder.setAddress(ipv6Builder.build());
488         nwSrcCaseBuilder.setSetNwSrcAction(nwSrcBuilder.build());
489         actionBuilder.setAction(nwSrcCaseBuilder.build());
490         actionBuilder.setOrder(10);
491         salActions.add(actionBuilder.build());
492
493         actionBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112
494                 .action.list.ActionBuilder();
495         nwDstCaseBuilder = new SetNwDstActionCaseBuilder();
496         nwDstBuilder = new SetNwDstActionBuilder();
497         ipv6Builder = new Ipv6Builder();
498         /* Use canonical form, 00:00:0006/64 is not a valid v6 notation - this equates to ::/64 */
499         ipv6Builder.setIpv6Address(new Ipv6Prefix("::/64"));
500         nwDstBuilder.setAddress(ipv6Builder.build());
501         nwDstCaseBuilder.setSetNwDstAction(nwDstBuilder.build());
502         actionBuilder.setAction(nwDstCaseBuilder.build());
503         actionBuilder.setOrder(11);
504         salActions.add(actionBuilder.build());
505
506         IpMatchBuilder ipMatchBld = new IpMatchBuilder().setIpProtocol((short) 6);
507         MatchBuilder matchBld = new MatchBuilder().setIpMatch(ipMatchBld.build());
508         FlowBuilder flowBld = new FlowBuilder().setMatch(matchBld.build());
509         Flow flow = flowBld.build();
510
511         ActionConvertorData data = new ActionConvertorData(OFConstants.OFP_VERSION_1_3);
512         data.setDatapathId(Uint64.valueOf(42));
513         data.setIpProtocol(FlowConvertorUtil.getIpProtocolFromFlow(flow));
514
515         Optional<List<Action>> actionsOptional = convertorManager.convert(salActions, data);
516         List<Action> actions = actionsOptional.orElse(Collections.emptyList());
517
518         Assert.assertEquals("Wrong number of actions", 12, actions.size());
519         Action action = actions.get(0);
520         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"
521                 + ".action.rev150203.action.grouping.action.choice.SetFieldCase",
522                 action.getActionChoice().implementedInterface().getName());
523         org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice
524             .SetFieldCase setFieldCase =
525                 (org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping
526                         .action.choice.SetFieldCase) action.getActionChoice();
527         MatchEntry entry = setFieldCase.getSetFieldAction().getMatchEntry().get(0);
528         checkEntryHeader(entry,
529                 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.VlanPcp.class, false);
530         Assert.assertEquals("Wrong vlan pcp", 7, ((VlanPcpCase) entry.getMatchEntryValue()).getVlanPcp().getVlanPcp()
531                 .intValue());
532
533         action = actions.get(1);
534         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"
535                 + ".action.rev150203.action.grouping.action.choice.SetFieldCase",
536                 action.getActionChoice().implementedInterface().getName());
537         setFieldCase = (org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping
538                 .action.choice.SetFieldCase) action.getActionChoice();
539         entry = setFieldCase.getSetFieldAction().getMatchEntry().get(0);
540         checkEntryHeader(entry,
541                 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.VlanVid.class, false);
542         Assert.assertEquals("Wrong vlan vid", 0, ((VlanVidCase) entry.getMatchEntryValue()).getVlanVid().getVlanVid()
543                 .intValue());
544         Assert.assertEquals("Wrong cfi bit", true, ((VlanVidCase) entry.getMatchEntryValue()).getVlanVid().isCfiBit());
545
546         action = actions.get(2);
547         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"
548                 + ".action.rev150203.action.grouping.action.choice.SetFieldCase",
549                 action.getActionChoice().implementedInterface().getName());
550         setFieldCase = (org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping
551                 .action.choice.SetFieldCase) action.getActionChoice();
552         entry = setFieldCase.getSetFieldAction().getMatchEntry().get(0);
553         checkEntryHeader(entry,
554                 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.EthDst.class, false);
555         Assert.assertEquals("Wrong dl dst", "00:00:00:00:00:06", ((EthDstCase) entry.getMatchEntryValue()).getEthDst()
556                 .getMacAddress().getValue());
557
558         action = actions.get(3);
559         setFieldCase = (org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping
560                 .action.choice.SetFieldCase) action.getActionChoice();
561         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"
562                 + ".action.rev150203.action.grouping.action.choice.SetFieldCase",
563                 action.getActionChoice().implementedInterface().getName());
564         entry = setFieldCase.getSetFieldAction().getMatchEntry().get(0);
565         checkEntryHeader(entry,
566                 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.EthSrc.class, false);
567         Assert.assertEquals("Wrong dl src", "00:00:00:00:00:05", ((EthSrcCase) entry.getMatchEntryValue()).getEthSrc()
568                 .getMacAddress().getValue());
569
570         action = actions.get(4);
571         setFieldCase = (org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping
572                 .action.choice.SetFieldCase) action.getActionChoice();
573         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"
574                 + ".action.rev150203.action.grouping.action.choice.SetFieldCase",
575                 action.getActionChoice().implementedInterface().getName());
576         entry = setFieldCase.getSetFieldAction().getMatchEntry().get(0);
577         checkEntryHeader(entry,
578                 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv4Src.class, false);
579         Assert.assertEquals("Wrong ipv4 src", "10.0.0.0", ((Ipv4SrcCase) entry.getMatchEntryValue()).getIpv4Src()
580                 .getIpv4Address().getValue());
581
582         action = actions.get(5);
583         setFieldCase = (org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping
584                 .action.choice.SetFieldCase) action.getActionChoice();
585         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"
586                 + ".action.rev150203.action.grouping.action.choice.SetFieldCase",
587                 action.getActionChoice().implementedInterface().getName());
588         entry = setFieldCase.getSetFieldAction().getMatchEntry().get(0);
589         checkEntryHeader(entry,
590                 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv4Dst.class, false);
591         Assert.assertEquals("Wrong ipv4 dst", "10.0.0.2", ((Ipv4DstCase) entry.getMatchEntryValue()).getIpv4Dst()
592                 .getIpv4Address().getValue());
593
594         action = actions.get(6);
595         setFieldCase = (org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping
596                 .action.choice.SetFieldCase) action.getActionChoice();
597         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"
598                 + ".action.rev150203.action.grouping.action.choice.SetFieldCase",
599                 action.getActionChoice().implementedInterface().getName());
600         entry = setFieldCase.getSetFieldAction().getMatchEntry().get(0);
601         checkEntryHeader(entry,
602                 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.TcpSrc.class, false);
603         Assert.assertEquals("Wrong tcp src", 54, ((TcpSrcCase) entry.getMatchEntryValue()).getTcpSrc()
604                 .getPort().getValue().intValue());
605
606         action = actions.get(7);
607         setFieldCase = (org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping
608                 .action.choice.SetFieldCase) action.getActionChoice();
609         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"
610                 + ".action.rev150203.action.grouping.action.choice.SetFieldCase",
611                 action.getActionChoice().implementedInterface().getName());
612         entry = setFieldCase.getSetFieldAction().getMatchEntry().get(0);
613         checkEntryHeader(entry,
614                 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.TcpDst.class, false);
615         Assert.assertEquals("Wrong tcp dst", 45, ((TcpDstCase) entry.getMatchEntryValue()).getTcpDst()
616                 .getPort().getValue().intValue());
617
618         action = actions.get(8);
619         setFieldCase = (org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping
620                 .action.choice.SetFieldCase) action.getActionChoice();
621         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"
622                 + ".action.rev150203.action.grouping.action.choice.SetFieldCase",
623                 action.getActionChoice().implementedInterface().getName());
624         entry = setFieldCase.getSetFieldAction().getMatchEntry().get(0);
625         checkEntryHeader(entry,
626                 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.IpDscp.class, false);
627         Assert.assertEquals("Wrong ip dscp", 4, ((IpDscpCase) entry.getMatchEntryValue()).getIpDscp()
628                 .getDscp().getValue().intValue());
629
630         action = actions.get(9);
631         setFieldCase = (org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping
632                 .action.choice.SetFieldCase) action.getActionChoice();
633         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"
634                 + ".action.rev150203.action.grouping.action.choice.SetFieldCase",
635                 action.getActionChoice().implementedInterface().getName());
636         entry = setFieldCase.getSetFieldAction().getMatchEntry().get(0);
637         checkEntryHeader(entry,
638                 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.VlanVid.class, false);
639         Assert.assertEquals("Wrong vlan id", 22, ((VlanVidCase) entry.getMatchEntryValue()).getVlanVid()
640                 .getVlanVid().intValue());
641         Assert.assertEquals("Wrong cfi bit", true, ((VlanVidCase) entry.getMatchEntryValue()).getVlanVid()
642                 .isCfiBit());
643
644         action = actions.get(10);
645         setFieldCase = (org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping
646                 .action.choice.SetFieldCase) action.getActionChoice();
647         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"
648                 + ".action.rev150203.action.grouping.action.choice.SetFieldCase",
649                 action.getActionChoice().implementedInterface().getName());
650         entry = setFieldCase.getSetFieldAction().getMatchEntry().get(0);
651         checkEntryHeader(entry,
652                 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Src.class, false);
653         Assert.assertEquals("Wrong ipv6 src", "::5",
654                 ((Ipv6SrcCase) entry.getMatchEntryValue()).getIpv6Src().getIpv6Address().getValue());
655
656         action = actions.get(11);
657         setFieldCase = (org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping
658                 .action.choice.SetFieldCase) action.getActionChoice();
659         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common"
660                 + ".action.rev150203.action.grouping.action.choice.SetFieldCase",
661                 action.getActionChoice().implementedInterface().getName());
662         entry = setFieldCase.getSetFieldAction().getMatchEntry().get(0);
663         checkEntryHeader(entry,
664                 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Dst.class, false);
665         Assert.assertEquals("Wrong ipv6 dst", "::",
666                 ((Ipv6DstCase) entry.getMatchEntryValue()).getIpv6Dst().getIpv6Address().getValue());
667     }
668
669     private static void checkEntryHeader(final MatchEntry entry, final Class<? extends MatchField> field,
670             final boolean hasMask) {
671         Assert.assertEquals("Wrong oxm class", OpenflowBasicClass.class, entry.getOxmClass());
672         Assert.assertEquals("Wrong oxm field", field, entry.getOxmMatchField());
673         Assert.assertEquals("Wrong hasMask", hasMask, entry.isHasMask());
674     }
675 }