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