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