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