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