2 * Copyright (c) 2014 Pantheon Technologies s.r.o. and others. All rights reserved.
\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
9 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action;
\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
119 * @author michal.polkorab
\r
121 public class ActionConvertorV13Test {
\r
122 private ConvertorManager convertorManager;
\r
125 public void setUp() {
\r
126 convertorManager = ConvertorManagerFactory.createDefaultManager();
\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
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
138 Optional<List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action
\r
139 .Action>> mdSalActions = convertorManager.convert(actions, data);
\r
141 Assert.assertEquals("Wrong number of output actions", 0, mdSalActions.orElse(Collections.emptyList()).size());
\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
148 public void testToMDSalActions2() {
\r
149 List<Action> actions = new ArrayList<>();
\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
160 actionBuilder = new ActionBuilder();
\r
161 actionBuilder.setActionChoice(new CopyTtlOutCaseBuilder().build());
\r
162 actions.add(actionBuilder.build());
\r
164 actionBuilder = new ActionBuilder();
\r
165 actionBuilder.setActionChoice(new CopyTtlInCaseBuilder().build());
\r
166 actions.add(actionBuilder.build());
\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
176 actionBuilder = new ActionBuilder();
\r
177 actionBuilder.setActionChoice(new DecMplsTtlCaseBuilder().build());
\r
178 actions.add(actionBuilder.build());
\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
188 actionBuilder = new ActionBuilder();
\r
189 actionBuilder.setActionChoice(new PopVlanCaseBuilder().build());
\r
190 actions.add(actionBuilder.build());
\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
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
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
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
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
232 actionBuilder = new ActionBuilder();
\r
233 actionBuilder.setActionChoice(new DecNwTtlCaseBuilder().build());
\r
234 actions.add(actionBuilder.build());
\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
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
263 actionBuilder = new ActionBuilder();
\r
264 actionBuilder.setActionChoice(new PopPbbCaseBuilder().build());
\r
265 actions.add(actionBuilder.build());
\r
267 actionBuilder = new ActionBuilder();
\r
268 actionBuilder.setActionChoice(new SetNwDstCaseBuilder().build());
\r
269 actions.add(actionBuilder.build());
\r
271 actionBuilder = new ActionBuilder();
\r
272 actionBuilder.setActionChoice(new StripVlanCaseBuilder().build());
\r
273 actions.add(actionBuilder.build());
\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
278 Optional<List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action
\r
279 .Action>> mdSalActionsOptional = convertorManager.convert(actions, data);
\r
281 List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action
\r
282 .Action> mdSalActions = mdSalActionsOptional.orElse(Collections.emptyList());
\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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
512 Optional<List<Action>> actionsOptional = convertorManager.convert(salActions, data);
\r
513 List<Action> actions = actionsOptional.orElse(Collections.emptyList());
\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
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
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
535 Assert.assertEquals("Wrong cfi bit", true, ((VlanVidCase) entry.getMatchEntryValue()).getVlanVid().isCfiBit());
\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
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
547 action = actions.get(3);
\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
557 action = actions.get(4);
\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
567 action = actions.get(5);
\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
577 action = actions.get(6);
\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
587 action = actions.get(7);
\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
597 action = actions.get(8);
\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
607 action = actions.get(9);
\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
619 action = actions.get(10);
\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
629 action = actions.get(11);
\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
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