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.Collection;
17 import java.util.HashMap;
18 import java.util.List;
20 import java.util.Map.Entry;
21 import java.util.Optional;
22 import org.junit.Before;
23 import org.junit.Test;
24 import org.opendaylight.openflowplugin.api.OFConstants;
25 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionConvertorData;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlInCaseBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlOutCaseBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecMplsTtlCaseBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecNwTtlCaseBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCaseBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCaseBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopMplsActionCaseBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopPbbActionCaseBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionCaseBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushMplsActionCaseBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushPbbActionCaseBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushVlanActionCaseBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetFieldCaseBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetMplsTtlActionCaseBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwTtlActionCaseBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetQueueActionCaseBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCaseBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ClearActionsCaseBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.GoToTableCaseBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.MeterCaseBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.WriteActionsCaseBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.WriteMetadataCaseBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionBuilder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.service.rev131026.table.update.UpdatedTableBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TableConfig;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TableFeatures;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.set.field.match.SetFieldMatchBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.TableFeaturePropType;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplyActions;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplyActionsBuilder;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplyActionsMiss;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplyActionsMissBuilder;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplySetfield;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplySetfieldBuilder;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplySetfieldMiss;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplySetfieldMissBuilder;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.Instructions;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.InstructionsBuilder;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.InstructionsMiss;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.InstructionsMissBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.Match;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.MatchBuilder;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.NextTable;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.NextTableBuilder;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.NextTableMiss;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.NextTableMissBuilder;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.Wildcards;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WildcardsBuilder;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteActions;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteActionsBuilder;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteActionsMiss;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteActionsMissBuilder;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteSetfield;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteSetfieldBuilder;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteSetfieldMiss;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteSetfieldMissBuilder;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.table.features.TableProperties;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.table.features.TablePropertiesBuilder;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.table.features.table.properties.TableFeatureProperties;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.table.features.table.properties.TableFeaturePropertiesBuilder;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.table.features.table.properties.TableFeaturePropertiesKey;
90 public class TableFeaturesConvertorTest {
91 private static final TablePropertiesBuilder TABLE_PROPERTIES_BUILDER = new TablePropertiesBuilder();
92 private static final Map<Class<? extends TableFeaturePropType>, TableFeaturePropType> AUGMENTATIONS_MAP =
94 private static final List<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction
95 .Instruction> INSTRUCTIONS_LIST = new ArrayList<>();
96 private static final List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list
97 .Action> ACTIONS = new ArrayList<>();
98 private static final List<org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.set.field.match
99 .SetFieldMatch> FIELD_TABLE_FEATURES = new ArrayList<>();
101 private static void setupInstructionsList() {
102 INSTRUCTIONS_LIST.add(new GoToTableCaseBuilder().build());
103 INSTRUCTIONS_LIST.add(new WriteMetadataCaseBuilder().build());
104 INSTRUCTIONS_LIST.add(new WriteActionsCaseBuilder().build());
105 INSTRUCTIONS_LIST.add(new ApplyActionsCaseBuilder().build());
106 INSTRUCTIONS_LIST.add(new ClearActionsCaseBuilder().build());
107 INSTRUCTIONS_LIST.add(new MeterCaseBuilder().build());
110 private static void setupFieldTableFeatures() {
112 SetFieldMatchBuilder setFieldMatchBuilder = new SetFieldMatchBuilder();
113 setFieldMatchBuilder.setHasMask(true);
115 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.ArpOp.class);
116 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
118 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.ArpSha.class);
119 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
121 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.ArpSpa.class);
122 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
124 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.ArpTha.class);
125 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
127 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.ArpTpa.class);
128 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
130 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.EthDst.class);
131 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
133 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.EthSrc.class);
134 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
136 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.EthType.class);
137 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
139 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Icmpv4Code.class);
140 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
142 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Icmpv4Type.class);
143 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
145 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Icmpv6Code.class);
146 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
148 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Icmpv6Type.class);
149 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
151 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.InPhyPort.class);
152 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
154 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.InPort.class);
155 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
157 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.IpDscp.class);
158 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
160 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.IpEcn.class);
161 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
163 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.IpProto.class);
164 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
166 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv4Dst.class);
167 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
169 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv4Src.class);
170 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
172 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv6Dst.class);
173 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
175 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv6Exthdr.class);
176 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
178 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv6Flabel.class);
179 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
181 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv6NdSll.class);
182 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
184 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv6NdTarget.class);
185 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
187 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv6NdTll.class);
188 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
190 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv6Src.class);
191 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
193 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Metadata.class);
194 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
196 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.MplsBos.class);
197 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
199 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.MplsLabel.class);
200 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
202 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.MplsTc.class);
203 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
205 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.PbbIsid.class);
206 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
208 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.SctpDst.class);
209 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
211 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.SctpSrc.class);
212 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
214 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TcpDst.class);
215 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
217 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TcpSrc.class);
218 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
220 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TunnelId.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.UdpSrc.class);
227 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
229 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.VlanPcp.class);
230 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
232 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.VlanVid.class);
233 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
235 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TcpFlags.class);
236 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
238 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TunnelIpv4Dst.class);
239 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
241 .setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TunnelIpv4Src.class);
242 FIELD_TABLE_FEATURES.add(setFieldMatchBuilder.build());
245 private static void setupActions() {
246 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder actionBuilder =
250 OutputActionCaseBuilder outputActionCaseBuilder = new OutputActionCaseBuilder();
251 ACTIONS.add(actionBuilder.setOrder(order++).setAction(outputActionCaseBuilder.build()).build());
253 GroupActionCaseBuilder groupActionCaseBuilder = new GroupActionCaseBuilder();
254 ACTIONS.add(actionBuilder.setOrder(order++).setAction(groupActionCaseBuilder.build()).build());
256 CopyTtlOutCaseBuilder copyTtlOutCaseBuilder = new CopyTtlOutCaseBuilder();
257 ACTIONS.add(actionBuilder.setOrder(order++).setAction(copyTtlOutCaseBuilder.build()).build());
259 CopyTtlInCaseBuilder copyTtlInCaseBuilder = new CopyTtlInCaseBuilder();
260 ACTIONS.add(actionBuilder.setOrder(order++).setAction(copyTtlInCaseBuilder.build()).build());
262 SetMplsTtlActionCaseBuilder setMplsTtlActionCaseBuilder = new SetMplsTtlActionCaseBuilder();
263 ACTIONS.add(actionBuilder.setOrder(order++).setAction(setMplsTtlActionCaseBuilder.build()).build());
265 DecMplsTtlCaseBuilder decMplsTtlCaseBuilder = new DecMplsTtlCaseBuilder();
266 ACTIONS.add(actionBuilder.setOrder(order++).setAction(decMplsTtlCaseBuilder.build()).build());
268 PushVlanActionCaseBuilder pushVlanActionCaseBuilder = new PushVlanActionCaseBuilder();
269 ACTIONS.add(actionBuilder.setOrder(order++).setAction(pushVlanActionCaseBuilder.build()).build());
271 PopVlanActionCaseBuilder popVlanActionCaseBuilder = new PopVlanActionCaseBuilder();
272 ACTIONS.add(actionBuilder.setOrder(order++).setAction(popVlanActionCaseBuilder.build()).build());
274 PushMplsActionCaseBuilder pushMplsActionCaseBuilder = new PushMplsActionCaseBuilder();
275 ACTIONS.add(actionBuilder.setOrder(order++).setAction(pushMplsActionCaseBuilder.build()).build());
277 PopMplsActionCaseBuilder popMplsActionCaseBuilder = new PopMplsActionCaseBuilder();
278 ACTIONS.add(actionBuilder.setOrder(order++).setAction(popMplsActionCaseBuilder.build()).build());
280 SetQueueActionCaseBuilder setQueueActionCaseBuilder = new SetQueueActionCaseBuilder();
281 ACTIONS.add(actionBuilder.setOrder(order++).setAction(setQueueActionCaseBuilder.build()).build());
283 SetNwTtlActionCaseBuilder setNwTtlActionCaseBuilder = new SetNwTtlActionCaseBuilder();
284 ACTIONS.add(actionBuilder.setOrder(order++).setAction(setNwTtlActionCaseBuilder.build()).build());
286 DecNwTtlCaseBuilder decNwTtlCaseBuilder = new DecNwTtlCaseBuilder();
287 ACTIONS.add(actionBuilder.setOrder(order++).setAction(decNwTtlCaseBuilder.build()).build());
289 SetFieldCaseBuilder setFieldCaseBuilder = new SetFieldCaseBuilder();
290 ACTIONS.add(actionBuilder.setOrder(order++).setAction(setFieldCaseBuilder.build()).build());
292 PushPbbActionCaseBuilder pushPbbActionCaseBuilder = new PushPbbActionCaseBuilder();
293 ACTIONS.add(actionBuilder.setOrder(order++).setAction(pushPbbActionCaseBuilder.build()).build());
295 PopPbbActionCaseBuilder popPbbActionCaseBuilder = new PopPbbActionCaseBuilder();
296 ACTIONS.add(actionBuilder.setOrder(order++).setAction(popPbbActionCaseBuilder.build()).build());
301 public void setupTest() {
302 setupInstructionsList();
304 setupFieldTableFeatures();
305 InstructionsBuilder instructionsBuilder = new InstructionsBuilder();
306 List<Instruction> instructions = new ArrayList<>();
308 for (var element : INSTRUCTIONS_LIST) {
309 instructions.add(new InstructionBuilder()
311 .setInstruction(element).build());
313 org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature
314 .prop.type.instructions.InstructionsBuilder instructionsBuilder1 =
315 new org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table
316 .feature.prop.type.instructions.InstructionsBuilder();
317 instructionsBuilder1.setInstruction(instructions);
318 instructionsBuilder.setInstructions(instructionsBuilder1.build());
320 AUGMENTATIONS_MAP.put(Instructions.class, instructionsBuilder.build());
322 InstructionsMissBuilder instructionsMissBuilder = new InstructionsMissBuilder();
323 org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop
324 .type.instructions.miss.InstructionsMissBuilder instructionsMissBuilder1 =
325 new org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table
326 .feature.prop.type.instructions.miss.InstructionsMissBuilder();
327 instructionsMissBuilder1.setInstruction(instructions);
328 instructionsMissBuilder.setInstructionsMiss(instructionsMissBuilder1.build());
329 AUGMENTATIONS_MAP.put(InstructionsMiss.class, instructionsMissBuilder.build());
331 NextTableBuilder nextTableBuilder = new NextTableBuilder();
332 AUGMENTATIONS_MAP.put(NextTable.class, nextTableBuilder.build());
334 NextTableMissBuilder nextTableMissBuilder = new NextTableMissBuilder();
335 AUGMENTATIONS_MAP.put(NextTableMiss.class, nextTableMissBuilder.build());
337 WriteActionsBuilder writeActionsBuilder = new WriteActionsBuilder();
338 AUGMENTATIONS_MAP.put(WriteActions.class, writeActionsBuilder.build());
340 WriteActionsMissBuilder writeActionsMissBuilder = new WriteActionsMissBuilder();
341 AUGMENTATIONS_MAP.put(WriteActionsMiss.class, writeActionsMissBuilder.build());
343 ApplyActionsBuilder applyActionsBuilder = new ApplyActionsBuilder();
344 AUGMENTATIONS_MAP.put(ApplyActions.class, applyActionsBuilder.build());
346 ApplyActionsMissBuilder applyActionsMissBuilder = new ApplyActionsMissBuilder();
347 org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop
348 .type.apply.actions.miss.ApplyActionsMissBuilder applyActionsMissBuilder1 =
349 new org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table
350 .feature.prop.type.apply.actions.miss.ApplyActionsMissBuilder();
351 applyActionsMissBuilder1.setAction(ACTIONS);
352 applyActionsMissBuilder.setApplyActionsMiss(applyActionsMissBuilder1.build());
353 AUGMENTATIONS_MAP.put(ApplyActionsMiss.class, applyActionsMissBuilder.build());
355 MatchBuilder matchBuilder = new MatchBuilder();
356 AUGMENTATIONS_MAP.put(Match.class, matchBuilder.build());
358 WildcardsBuilder wildcardsBuilder = new WildcardsBuilder();
359 AUGMENTATIONS_MAP.put(Wildcards.class, wildcardsBuilder.build());
361 WriteSetfieldBuilder writeSetfieldBuilder = new WriteSetfieldBuilder();
362 AUGMENTATIONS_MAP.put(WriteSetfield.class, writeSetfieldBuilder.build());
364 WriteSetfieldMissBuilder writeSetfieldMissBuilder = new WriteSetfieldMissBuilder();
365 AUGMENTATIONS_MAP.put(WriteSetfieldMiss.class, writeSetfieldMissBuilder.build());
367 ApplySetfieldBuilder applySetfieldBuilder = new ApplySetfieldBuilder();
368 org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop
369 .type.apply.setfield.ApplySetfieldBuilder applySetfieldBuilder1 =
370 new org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table
371 .feature.prop.type.apply.setfield.ApplySetfieldBuilder();
372 applySetfieldBuilder1.setSetFieldMatch(FIELD_TABLE_FEATURES);
373 applySetfieldBuilder.setApplySetfield(applySetfieldBuilder1.build());
374 AUGMENTATIONS_MAP.put(ApplySetfield.class, applySetfieldBuilder.build());
376 ApplySetfieldMissBuilder applySetfieldMissBuilder = new ApplySetfieldMissBuilder();
377 AUGMENTATIONS_MAP.put(ApplySetfieldMiss.class, applySetfieldMissBuilder.build());
381 public void testToTableFeaturesRequest() {
382 List<org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.TableFeatures>
383 tableFeaturesList = new ArrayList<>();
384 org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.TableFeaturesBuilder
385 tableFeaturesBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table
386 .features.TableFeaturesBuilder();
387 for (int i = 0; i < 10; i++) {
388 tableFeaturesBuilder.setTableId((short) i);
389 tableFeaturesBuilder.setName(String.format("table:%d", i));
390 tableFeaturesBuilder.setMetadataMatch(BigInteger.ONE);
391 tableFeaturesBuilder.setMetadataWrite(BigInteger.ONE);
392 tableFeaturesBuilder.setMaxEntries((long) 1 + 10 * i);
393 tableFeaturesBuilder.setConfig(new TableConfig(false));
394 tableFeaturesBuilder.setTableProperties(getTableProperties());
395 tableFeaturesList.add(tableFeaturesBuilder.build());
398 TableFeatures tableFeatures = new UpdatedTableBuilder()
399 .setTableFeatures(tableFeaturesList)
402 final ConvertorManager convertorManager = ConvertorManagerFactory.createDefaultManager();
404 Optional<List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request
405 .multipart.request.body.multipart.request.table.features._case.multipart.request.table.features
406 .TableFeatures>> tableFeaturesesOptional =
407 convertorManager.convert(tableFeatures, new VersionConvertorData(OFConstants.OFP_VERSION_1_3));
409 assertNotNull(tableFeatures);
410 assertEquals(10, tableFeatures.getTableFeatures().size());
411 Collection<TableFeatureProperties> tableFeaturePropertieses = tableFeatures.nonnullTableFeatures().values()
412 .iterator().next().getTableProperties().nonnullTableFeatureProperties().values();
413 assertEquals(AUGMENTATIONS_MAP.size() + 1, tableFeaturePropertieses.size());
415 org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature
416 .prop.type.ApplyActionsMiss applyActionsMiss = null;
417 for (var featureProp : tableFeaturePropertieses) {
418 var prop = featureProp.getTableFeaturePropType();
419 if (prop.implementedInterface().isAssignableFrom(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types
420 .rev131026.table.feature.prop.type.table.feature.prop.type.ApplyActionsMiss.class)) {
421 applyActionsMiss = (org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature
422 .prop.type.table.feature.prop.type.ApplyActionsMiss) prop;
427 assertNotNull(applyActionsMiss);
428 assertEquals(ACTIONS.size(), applyActionsMiss.getApplyActionsMiss().getAction().size());
432 private static TableProperties getTableProperties() {
433 TableFeaturePropertiesBuilder tableFeaturePropertiesBuilder = new TableFeaturePropertiesBuilder();
434 List<TableFeatureProperties> tableFeaturePropertieses = new ArrayList<>();
437 for (Entry<Class<? extends TableFeaturePropType>, TableFeaturePropType> entry : AUGMENTATIONS_MAP.entrySet()) {
439 tableFeaturePropertiesBuilder.setTableFeaturePropType(entry.getValue());
440 tableFeaturePropertiesBuilder.setOrder(counter);
441 tableFeaturePropertiesBuilder.withKey(new TableFeaturePropertiesKey(order++));
442 tableFeaturePropertieses.add(tableFeaturePropertiesBuilder.build());
444 tableFeaturePropertieses.add(
445 tableFeaturePropertiesBuilder.withKey(new TableFeaturePropertiesKey(order++)).build());
446 TABLE_PROPERTIES_BUILDER.setTableFeatureProperties(tableFeaturePropertieses);
447 return TABLE_PROPERTIES_BUILDER.build();