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