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