2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertNotNull;
14 import java.math.BigInteger;
15 import java.util.ArrayList;
16 import java.util.HashMap;
17 import java.util.List;
19 import java.util.Map.Entry;
20 import java.util.Optional;
21 import org.junit.Before;
22 import org.junit.Test;
23 import org.opendaylight.openflowplugin.api.OFConstants;
24 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionConvertorData;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlInCaseBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlOutCaseBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecMplsTtlCaseBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecNwTtlCaseBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCaseBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCaseBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopMplsActionCaseBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopPbbActionCaseBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionCaseBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushMplsActionCaseBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushPbbActionCaseBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushVlanActionCaseBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetFieldCaseBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetMplsTtlActionCaseBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwTtlActionCaseBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetQueueActionCaseBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCaseBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ClearActionsCaseBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.GoToTableCaseBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.MeterCaseBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.WriteActionsCaseBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.WriteMetadataCaseBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.service.rev131026.table.update.UpdatedTableBuilder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TableConfig;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TableFeatures;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.set.field.match.SetFieldMatchBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.TableFeaturePropType;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplyActions;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplyActionsBuilder;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplyActionsMiss;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplyActionsMissBuilder;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplySetfield;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplySetfieldBuilder;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplySetfieldMiss;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplySetfieldMissBuilder;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.Instructions;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.InstructionsBuilder;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.InstructionsMiss;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.InstructionsMissBuilder;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.Match;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.MatchBuilder;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.NextTable;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.NextTableBuilder;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.NextTableMiss;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.NextTableMissBuilder;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.Wildcards;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WildcardsBuilder;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteActions;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteActionsBuilder;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteActionsMiss;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteActionsMissBuilder;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteSetfield;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteSetfieldBuilder;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteSetfieldMiss;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteSetfieldMissBuilder;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.table.features.TableProperties;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.table.features.TablePropertiesBuilder;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.table.features.table.properties.TableFeatureProperties;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.table.features.table.properties.TableFeaturePropertiesBuilder;
88 public class TableFeaturesConvertorTest {
89 private static final TablePropertiesBuilder TABLE_PROPERTIES_BUILDER = new TablePropertiesBuilder();
90 private static final Map<Class<? extends TableFeaturePropType>, TableFeaturePropType> AUGMENTATIONS_MAP =
92 private static final List<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction
93 .Instruction> INSTRUCTIONS_LIST = new ArrayList<>();
94 private static final List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list
95 .Action> ACTIONS = new ArrayList<>();
96 private static final List<org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.set.field.match
97 .SetFieldMatch> FIELD_TABLE_FEATURES = new ArrayList<>();
99 private static void setupInstructionsList() {
100 INSTRUCTIONS_LIST.add(new GoToTableCaseBuilder().build());
101 INSTRUCTIONS_LIST.add(new WriteMetadataCaseBuilder().build());
102 INSTRUCTIONS_LIST.add(new WriteActionsCaseBuilder().build());
103 INSTRUCTIONS_LIST.add(new ApplyActionsCaseBuilder().build());
104 INSTRUCTIONS_LIST.add(new ClearActionsCaseBuilder().build());
105 INSTRUCTIONS_LIST.add(new MeterCaseBuilder().build());
108 private static void setupFieldTableFeatures() {
109 SetFieldMatchBuilder setFieldMatchBuilder = new SetFieldMatchBuilder();
110 setFieldMatchBuilder.setHasMask(true);
112 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.ArpOp.class);
113 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
115 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.ArpSha.class);
116 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
118 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.ArpSpa.class);
119 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
121 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.ArpTha.class);
122 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
124 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.ArpTpa.class);
125 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
127 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.EthDst.class);
128 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
130 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.EthSrc.class);
131 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
133 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.EthType.class);
134 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
136 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Icmpv4Code.class);
137 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
139 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Icmpv4Type.class);
140 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
142 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Icmpv6Code.class);
143 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
145 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Icmpv6Type.class);
146 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
148 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.InPhyPort.class);
149 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
151 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.InPort.class);
152 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
154 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.IpDscp.class);
155 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
157 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.IpEcn.class);
158 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
160 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.IpProto.class);
161 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
163 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv4Dst.class);
164 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
166 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv4Src.class);
167 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
169 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv6Dst.class);
170 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
172 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv6Exthdr.class);
173 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
175 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv6Flabel.class);
176 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
178 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv6NdSll.class);
179 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
181 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv6NdTarget.class);
182 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
184 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv6NdTll.class);
185 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
187 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv6Src.class);
188 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
190 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Metadata.class);
191 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
193 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.MplsBos.class);
194 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
196 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.MplsLabel.class);
197 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
199 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.MplsTc.class);
200 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
202 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.PbbIsid.class);
203 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
205 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.SctpDst.class);
206 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
208 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.SctpSrc.class);
209 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
211 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TcpDst.class);
212 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
214 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TcpSrc.class);
215 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
217 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TunnelId.class);
218 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
220 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.UdpDst.class);
221 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
223 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.UdpDst.class);
224 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
226 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.VlanPcp.class);
227 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
229 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.VlanVid.class);
230 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
232 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TcpFlags.class);
233 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
235 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TunnelIpv4Dst.class);
236 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
238 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TunnelIpv4Src.class);
239 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
242 private static void setupActions() {
243 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder actionBuilder =
246 OutputActionCaseBuilder outputActionCaseBuilder = new OutputActionCaseBuilder();
247 ACTIONS.add(actionBuilder.setAction(outputActionCaseBuilder.build()).build());
249 GroupActionCaseBuilder groupActionCaseBuilder = new GroupActionCaseBuilder();
250 ACTIONS.add(actionBuilder.setAction(groupActionCaseBuilder.build()).build());
252 CopyTtlOutCaseBuilder copyTtlOutCaseBuilder = new CopyTtlOutCaseBuilder();
253 ACTIONS.add(actionBuilder.setAction(copyTtlOutCaseBuilder.build()).build());
255 CopyTtlInCaseBuilder copyTtlInCaseBuilder = new CopyTtlInCaseBuilder();
256 ACTIONS.add(actionBuilder.setAction(copyTtlInCaseBuilder.build()).build());
258 SetMplsTtlActionCaseBuilder setMplsTtlActionCaseBuilder = new SetMplsTtlActionCaseBuilder();
259 ACTIONS.add(actionBuilder.setAction(setMplsTtlActionCaseBuilder.build()).build());
261 DecMplsTtlCaseBuilder decMplsTtlCaseBuilder = new DecMplsTtlCaseBuilder();
262 ACTIONS.add(actionBuilder.setAction(decMplsTtlCaseBuilder.build()).build());
264 PushVlanActionCaseBuilder pushVlanActionCaseBuilder = new PushVlanActionCaseBuilder();
265 ACTIONS.add(actionBuilder.setAction(pushVlanActionCaseBuilder.build()).build());
267 PopVlanActionCaseBuilder popVlanActionCaseBuilder = new PopVlanActionCaseBuilder();
268 ACTIONS.add(actionBuilder.setAction(popVlanActionCaseBuilder.build()).build());
270 PushMplsActionCaseBuilder pushMplsActionCaseBuilder = new PushMplsActionCaseBuilder();
271 ACTIONS.add(actionBuilder.setAction(pushMplsActionCaseBuilder.build()).build());
273 PopMplsActionCaseBuilder popMplsActionCaseBuilder = new PopMplsActionCaseBuilder();
274 ACTIONS.add(actionBuilder.setAction(popMplsActionCaseBuilder.build()).build());
276 SetQueueActionCaseBuilder setQueueActionCaseBuilder = new SetQueueActionCaseBuilder();
277 ACTIONS.add(actionBuilder.setAction(setQueueActionCaseBuilder.build()).build());
279 SetNwTtlActionCaseBuilder setNwTtlActionCaseBuilder = new SetNwTtlActionCaseBuilder();
280 ACTIONS.add(actionBuilder.setAction(setNwTtlActionCaseBuilder.build()).build());
282 DecNwTtlCaseBuilder decNwTtlCaseBuilder = new DecNwTtlCaseBuilder();
283 ACTIONS.add(actionBuilder.setAction(decNwTtlCaseBuilder.build()).build());
285 SetFieldCaseBuilder setFieldCaseBuilder = new SetFieldCaseBuilder();
286 ACTIONS.add(actionBuilder.setAction(setFieldCaseBuilder.build()).build());
288 PushPbbActionCaseBuilder pushPbbActionCaseBuilder = new PushPbbActionCaseBuilder();
289 ACTIONS.add(actionBuilder.setAction(pushPbbActionCaseBuilder.build()).build());
291 PopPbbActionCaseBuilder popPbbActionCaseBuilder = new PopPbbActionCaseBuilder();
292 ACTIONS.add(actionBuilder.setAction(popPbbActionCaseBuilder.build()).build());
297 public void setupTest() {
298 setupInstructionsList();
300 setupFieldTableFeatures();
301 InstructionsBuilder instructionsBuilder = new InstructionsBuilder();
302 List<Instruction> instructions = new ArrayList<>();
303 for (int i = 0; i < INSTRUCTIONS_LIST.size(); i++) {
304 InstructionBuilder instructionBuilder = new InstructionBuilder();
305 instructionBuilder.setInstruction(INSTRUCTIONS_LIST.get(i));
306 instructions.add(instructionBuilder.build());
308 org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature
309 .prop.type.instructions.InstructionsBuilder instructionsBuilder1 =
310 new org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table
311 .feature.prop.type.instructions.InstructionsBuilder();
312 instructionsBuilder1.setInstruction(instructions);
313 instructionsBuilder.setInstructions(instructionsBuilder1.build());
315 AUGMENTATIONS_MAP.put(Instructions.class, instructionsBuilder.build());
317 InstructionsMissBuilder instructionsMissBuilder = new InstructionsMissBuilder();
318 org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop
319 .type.instructions.miss.InstructionsMissBuilder instructionsMissBuilder1 =
320 new org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table
321 .feature.prop.type.instructions.miss.InstructionsMissBuilder();
322 instructionsMissBuilder1.setInstruction(instructions);
323 instructionsMissBuilder.setInstructionsMiss(instructionsMissBuilder1.build());
324 AUGMENTATIONS_MAP.put(InstructionsMiss.class, instructionsMissBuilder.build());
326 NextTableBuilder nextTableBuilder = new NextTableBuilder();
327 AUGMENTATIONS_MAP.put(NextTable.class, nextTableBuilder.build());
329 NextTableMissBuilder nextTableMissBuilder = new NextTableMissBuilder();
330 AUGMENTATIONS_MAP.put(NextTableMiss.class, nextTableMissBuilder.build());
332 WriteActionsBuilder writeActionsBuilder = new WriteActionsBuilder();
333 AUGMENTATIONS_MAP.put(WriteActions.class, writeActionsBuilder.build());
335 WriteActionsMissBuilder writeActionsMissBuilder = new WriteActionsMissBuilder();
336 AUGMENTATIONS_MAP.put(WriteActionsMiss.class, writeActionsMissBuilder.build());
338 ApplyActionsBuilder applyActionsBuilder = new ApplyActionsBuilder();
339 AUGMENTATIONS_MAP.put(ApplyActions.class, applyActionsBuilder.build());
341 ApplyActionsMissBuilder applyActionsMissBuilder = new ApplyActionsMissBuilder();
342 org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop
343 .type.apply.actions.miss.ApplyActionsMissBuilder applyActionsMissBuilder1 =
344 new org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table
345 .feature.prop.type.apply.actions.miss.ApplyActionsMissBuilder();
346 applyActionsMissBuilder1.setAction(ACTIONS);
347 applyActionsMissBuilder.setApplyActionsMiss(applyActionsMissBuilder1.build());
348 AUGMENTATIONS_MAP.put(ApplyActionsMiss.class, applyActionsMissBuilder.build());
350 MatchBuilder matchBuilder = new MatchBuilder();
351 AUGMENTATIONS_MAP.put(Match.class, matchBuilder.build());
353 WildcardsBuilder wildcardsBuilder = new WildcardsBuilder();
354 AUGMENTATIONS_MAP.put(Wildcards.class, wildcardsBuilder.build());
356 WriteSetfieldBuilder writeSetfieldBuilder = new WriteSetfieldBuilder();
357 AUGMENTATIONS_MAP.put(WriteSetfield.class, writeSetfieldBuilder.build());
359 WriteSetfieldMissBuilder writeSetfieldMissBuilder = new WriteSetfieldMissBuilder();
360 AUGMENTATIONS_MAP.put(WriteSetfieldMiss.class, writeSetfieldMissBuilder.build());
362 ApplySetfieldBuilder applySetfieldBuilder = new ApplySetfieldBuilder();
363 org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop
364 .type.apply.setfield.ApplySetfieldBuilder applySetfieldBuilder1 =
365 new org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table
366 .feature.prop.type.apply.setfield.ApplySetfieldBuilder();
367 applySetfieldBuilder1.setSetFieldMatch(FIELD_TABLE_FEATURES);
368 applySetfieldBuilder.setApplySetfield(applySetfieldBuilder1.build());
369 AUGMENTATIONS_MAP.put(ApplySetfield.class, applySetfieldBuilder.build());
371 ApplySetfieldMissBuilder applySetfieldMissBuilder = new ApplySetfieldMissBuilder();
372 AUGMENTATIONS_MAP.put(ApplySetfieldMiss.class, applySetfieldMissBuilder.build());
376 public void testToTableFeaturesRequest() {
377 List<org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.TableFeatures>
378 tableFeaturesList = new ArrayList<>();
379 org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.TableFeaturesBuilder
380 tableFeaturesBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table
381 .features.TableFeaturesBuilder();
382 for (int i = 0; i < 10; i++) {
383 tableFeaturesBuilder.setTableId((short) i);
384 tableFeaturesBuilder.setName(String.format("table:%d", i));
385 tableFeaturesBuilder.setMetadataMatch(BigInteger.ONE);
386 tableFeaturesBuilder.setMetadataWrite(BigInteger.ONE);
387 tableFeaturesBuilder.setMaxEntries((long) 1 + 10 * i);
388 tableFeaturesBuilder.setConfig(new TableConfig(false));
389 tableFeaturesBuilder.setTableProperties(getTableProperties());
390 tableFeaturesList.add(tableFeaturesBuilder.build());
393 TableFeatures tableFeatures = new UpdatedTableBuilder()
394 .setTableFeatures(tableFeaturesList)
397 final ConvertorManager convertorManager = ConvertorManagerFactory.createDefaultManager();
399 Optional<List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request
400 .multipart.request.body.multipart.request.table.features._case.multipart.request.table.features
401 .TableFeatures>> tableFeaturesesOptional =
402 convertorManager.convert(tableFeatures, new VersionConvertorData(OFConstants.OFP_VERSION_1_3));
404 assertNotNull(tableFeatures);
405 assertEquals(10, tableFeatures.getTableFeatures().size());
406 List<TableFeatureProperties> tableFeaturePropertieses = tableFeatures.getTableFeatures().get(0)
407 .getTableProperties().getTableFeatureProperties();
408 assertEquals(AUGMENTATIONS_MAP.size() + 1, tableFeaturePropertieses.size());
410 org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature
411 .prop.type.ApplyActionsMiss applyActionsMiss = null;
412 for (int i = 0; i < tableFeaturePropertieses.size(); i++) {
413 if (tableFeaturePropertieses.get(i).getTableFeaturePropType().implementedInterface().isAssignableFrom(
414 org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table
415 .feature.prop.type.ApplyActionsMiss.class)) {
416 applyActionsMiss = (org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature
417 .prop.type.table.feature.prop.type.ApplyActionsMiss) tableFeaturePropertieses.get(i)
418 .getTableFeaturePropType();
423 assertNotNull(applyActionsMiss);
424 assertEquals(ACTIONS.size(), applyActionsMiss.getApplyActionsMiss().getAction().size());
428 private static TableProperties getTableProperties() {
429 TableFeaturePropertiesBuilder tableFeaturePropertiesBuilder = new TableFeaturePropertiesBuilder();
430 List<TableFeatureProperties> tableFeaturePropertieses = new ArrayList<>();
432 for (Entry<Class<? extends TableFeaturePropType>, TableFeaturePropType> entry : AUGMENTATIONS_MAP.entrySet()) {
434 tableFeaturePropertiesBuilder.setTableFeaturePropType(entry.getValue());
435 tableFeaturePropertiesBuilder.setOrder(counter);
436 tableFeaturePropertieses.add(tableFeaturePropertiesBuilder.build());
438 tableFeaturePropertieses.add(tableFeaturePropertiesBuilder.build());
439 TABLE_PROPERTIES_BUILDER.setTableFeatureProperties(tableFeaturePropertieses);
440 return TABLE_PROPERTIES_BUILDER.build();