2 * Copyright (c) 2014 Pantheon Technologies s.r.o. 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 java.util.ArrayList;
12 import java.util.Collection;
13 import java.util.Collections;
14 import java.util.Iterator;
15 import java.util.List;
16 import java.util.Optional;
17 import org.junit.Assert;
18 import org.junit.Before;
19 import org.junit.Test;
20 import org.opendaylight.openflowplugin.api.OFConstants;
21 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionConvertorData;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev150225.ActionRelatedTableFeatureProperty;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev150225.ActionRelatedTableFeaturePropertyBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev150225.InstructionRelatedTableFeatureProperty;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev150225.InstructionRelatedTableFeaturePropertyBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev150225.NextTableRelatedTableFeatureProperty;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev150225.NextTableRelatedTableFeaturePropertyBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev150225.OxmRelatedTableFeatureProperty;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev150225.OxmRelatedTableFeaturePropertyBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev150225.table.features.properties.container.table.feature.properties.NextTableIds;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev150225.table.features.properties.container.table.feature.properties.NextTableIdsBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.CopyTtlInCase;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.CopyTtlInCaseBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.CopyTtlOutCase;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.CopyTtlOutCaseBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.DecMplsTtlCase;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.DecMplsTtlCaseBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.GroupCase;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.GroupCaseBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PopVlanCase;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PopVlanCaseBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PushPbbCase;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PushPbbCaseBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PushVlanCase;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PushVlanCaseBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetFieldCase;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetFieldCaseBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetMplsTtlCase;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetMplsTtlCaseBuilder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetNwSrcCase;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetNwSrcCaseBuilder;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.group._case.GroupActionBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.push.pbb._case.PushPbbActionBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.push.vlan._case.PushVlanActionBuilder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.set.field._case.SetFieldActionBuilder;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.set.mpls.ttl._case.SetMplsTtlActionBuilder;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.set.nw.src._case.SetNwSrcActionBuilder;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.ActionBuilder;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.ApplyActionsCaseBuilder;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.ClearActionsCaseBuilder;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.GotoTableCaseBuilder;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.MeterCaseBuilder;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.WriteActionsCaseBuilder;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.WriteMetadataCaseBuilder;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice._goto.table._case.GotoTableBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.apply.actions._case.ApplyActionsBuilder;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.meter._case.MeterBuilder;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.write.actions._case.WriteActionsBuilder;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.write.metadata._case.WriteMetadataBuilder;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.Instruction;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.InstructionBuilder;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.EtherType;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.TableConfig;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.TableFeaturesPropType;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.EthDst;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.EthSrc;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.InPhyPort;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.InPort;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.IpEcn;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.IpProto;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Exthdr;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OpenflowBasicClass;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.TcpSrc;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.UdpDst;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.UdpSrc;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.VlanPcp;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.VlanVid;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntry;
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntryBuilder;
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.table.features._case.MultipartReplyTableFeatures;
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.table.features._case.MultipartReplyTableFeaturesBuilder;
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.table.features._case.multipart.reply.table.features.TableFeaturesBuilder;
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.table.features.properties.grouping.TableFeatureProperties;
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.table.features.properties.grouping.TableFeaturePropertiesBuilder;
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.set.field.match.SetFieldMatch;
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplySetfield;
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplySetfieldMiss;
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.Instructions;
101 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.InstructionsMiss;
102 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.Match;
103 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.NextTable;
104 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.NextTableMiss;
105 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.Wildcards;
106 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteSetfield;
107 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteSetfieldMiss;
108 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.TableFeatures;
109 import org.opendaylight.yangtools.yang.common.Uint64;
110 import org.opendaylight.yangtools.yang.common.Uint8;
113 * Unit tests for table features response conversions.
115 * @author michal.polkorab
117 public class TableFeaturesResponseConvertorTest {
118 private ConvertorManager convertorManager;
121 public void setUp() {
122 convertorManager = ConvertorManagerFactory.createDefaultManager();
126 * Incorrect / empty input test.
130 List<TableFeatures> list = convert(null);
131 Assert.assertEquals("Returned list is not empty", 0, list.size());
135 * Incorrect / empty input test.
138 public void test2() {
139 MultipartReplyTableFeaturesBuilder builder = new MultipartReplyTableFeaturesBuilder();
140 List<TableFeatures> list = convert(builder.build());
141 Assert.assertEquals("Returned list is not empty", 0, list.size());
145 * Test correct input - without table properties.
148 public void testWithMPTableFeature() {
149 TableFeaturesBuilder featuresBuilder = new TableFeaturesBuilder();
150 featuresBuilder.setTableId((short) 5);
151 featuresBuilder.setName("Aloha");
152 byte[] metaMatch = new byte[]{0, 1, 2, 3, 4, 5, 6, 7};
153 featuresBuilder.setMetadataMatch(metaMatch);
154 byte[] metaWrite = new byte[]{8, 9, 10, 11, 12, 13, 14, 15};
155 featuresBuilder.setMetadataWrite(metaWrite);
156 featuresBuilder.setConfig(new TableConfig(false));
157 featuresBuilder.setMaxEntries(42L);
159 List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart
160 .reply.multipart.reply.body.multipart.reply.table.features._case.multipart.reply.table.features
161 .TableFeatures> features = new ArrayList<>();
162 features.add(featuresBuilder.build());
164 MultipartReplyTableFeaturesBuilder builder = new MultipartReplyTableFeaturesBuilder();
165 builder.setTableFeatures(features);
166 List<TableFeatures> list = convert(builder.build());
167 Assert.assertEquals("Returned empty list", 1, list.size());
168 TableFeatures feature = list.get(0);
169 Assert.assertEquals("Wrong table-id", 5, feature.getTableId().intValue());
170 Assert.assertEquals("Wrong name", "Aloha", feature.getName());
171 Assert.assertEquals("Wrong metadata match", Uint64.valueOf("0001020304050607", 16), feature.getMetadataMatch());
172 Assert.assertEquals("Wrong metadata write", Uint64.valueOf("08090A0B0C0D0E0F", 16), feature.getMetadataWrite());
173 Assert.assertEquals("Wrong config", false, feature.getConfig().isDEPRECATEDMASK());
174 Assert.assertEquals("Wrong max-entries", 42, feature.getMaxEntries().intValue());
175 Assert.assertEquals("Wrong properties", 0, feature.getTableProperties().nonnullTableFeatureProperties().size());
179 * Test correct input.
182 public void testWithMPTableFeatureWithProperties() {
183 TableFeaturesBuilder featuresBuilder = new TableFeaturesBuilder();
184 featuresBuilder.setTableId((short) 5);
185 featuresBuilder.setName("Aloha");
186 featuresBuilder.setMetadataMatch(new byte[]{0, 1, 2, 3, 4, 5, 6, 7});
187 featuresBuilder.setMetadataWrite(new byte[]{8, 9, 10, 11, 12, 13, 14, 15});
188 featuresBuilder.setConfig(new TableConfig(false));
189 featuresBuilder.setMaxEntries(42L);
191 TableFeaturePropertiesBuilder propBuilder = new TableFeaturePropertiesBuilder();
193 propBuilder.setType(TableFeaturesPropType.OFPTFPTNEXTTABLES);
194 NextTableRelatedTableFeaturePropertyBuilder nextPropBuilder =
195 new NextTableRelatedTableFeaturePropertyBuilder();
196 List<NextTableIds> nextIds = new ArrayList<>();
197 nextIds.add(new NextTableIdsBuilder().setTableId((short) 1).build());
198 nextIds.add(new NextTableIdsBuilder().setTableId((short) 2).build());
199 nextPropBuilder.setNextTableIds(nextIds);
200 propBuilder.addAugmentation(NextTableRelatedTableFeatureProperty.class, nextPropBuilder.build());
202 List<TableFeatureProperties> properties = new ArrayList<>();
203 properties.add(propBuilder.build());
204 propBuilder = new TableFeaturePropertiesBuilder();
206 propBuilder.setType(TableFeaturesPropType.OFPTFPTNEXTTABLESMISS);
207 nextPropBuilder = new NextTableRelatedTableFeaturePropertyBuilder();
208 nextIds = new ArrayList<>();
209 nextIds.add(new NextTableIdsBuilder().setTableId((short) 3).build());
210 nextPropBuilder.setNextTableIds(nextIds);
211 propBuilder.addAugmentation(NextTableRelatedTableFeatureProperty.class, nextPropBuilder.build());
212 properties.add(propBuilder.build());
213 propBuilder = new TableFeaturePropertiesBuilder();
215 propBuilder.setType(TableFeaturesPropType.OFPTFPTINSTRUCTIONS);
217 /* -------------------------------------------------- */
219 List<Action> actions = new ArrayList<>();
220 WriteActionsBuilder writeActionsBuilder = new WriteActionsBuilder();
221 ActionBuilder actionBuilder = new ActionBuilder();
222 actionBuilder.setActionChoice(createSetNwSrcAction());
223 actions.add(actionBuilder.build());
224 writeActionsBuilder.setAction(actions);
226 WriteActionsCaseBuilder writeActionsCaseBuilder = new WriteActionsCaseBuilder();
227 writeActionsCaseBuilder.setWriteActions(writeActionsBuilder.build());
229 InstructionBuilder insBuilder = new InstructionBuilder();
230 insBuilder.setInstructionChoice(writeActionsCaseBuilder.build());
232 List<Instruction> insIds = new ArrayList<>();
233 insIds.add(insBuilder.build());
235 /* -------------------------------------------------- */
237 insBuilder = new InstructionBuilder();
238 GotoTableCaseBuilder gotoCaseBuilder = new GotoTableCaseBuilder();
239 GotoTableBuilder gotoTableBuilder = new GotoTableBuilder();
240 gotoCaseBuilder.setGotoTable(gotoTableBuilder.build());
241 insBuilder.setInstructionChoice(gotoCaseBuilder.build());
242 insIds.add(insBuilder.build());
244 InstructionRelatedTableFeaturePropertyBuilder insPropBuilder =
245 new InstructionRelatedTableFeaturePropertyBuilder();
246 insPropBuilder.setInstruction(insIds);
247 propBuilder.addAugmentation(InstructionRelatedTableFeatureProperty.class, insPropBuilder.build());
248 properties.add(propBuilder.build());
250 /* -------------------------------------------------- */
252 propBuilder = new TableFeaturePropertiesBuilder();
253 propBuilder.setType(TableFeaturesPropType.OFPTFPTINSTRUCTIONSMISS);
254 insPropBuilder = new InstructionRelatedTableFeaturePropertyBuilder();
255 insIds = new ArrayList<>();
256 insBuilder = new InstructionBuilder();
257 WriteMetadataCaseBuilder writeMetadataCaseBuilder = new WriteMetadataCaseBuilder();
258 WriteMetadataBuilder writeMetadataBuilder = new WriteMetadataBuilder();
259 writeMetadataCaseBuilder.setWriteMetadata(writeMetadataBuilder.build());
260 insBuilder.setInstructionChoice(writeMetadataCaseBuilder.build());
261 insIds.add(insBuilder.build());
263 insBuilder = new InstructionBuilder();
264 ApplyActionsCaseBuilder applyActionsCaseBuilder = new ApplyActionsCaseBuilder();
265 ApplyActionsBuilder applyActionsBuilder = new ApplyActionsBuilder();
266 applyActionsCaseBuilder.setApplyActions(applyActionsBuilder.build());
267 insBuilder.setInstructionChoice(applyActionsCaseBuilder.build());
268 insIds.add(insBuilder.build());
270 insBuilder = new InstructionBuilder();
271 MeterCaseBuilder meterCaseBuilder = new MeterCaseBuilder();
272 MeterBuilder meterBuilder = new MeterBuilder();
273 meterCaseBuilder.setMeter(meterBuilder.build());
274 insBuilder.setInstructionChoice(meterCaseBuilder.build());
275 insIds.add(insBuilder.build());
278 insBuilder = new InstructionBuilder();
279 ClearActionsCaseBuilder clearActionsCaseBuilder = new ClearActionsCaseBuilder();
280 insBuilder.setInstructionChoice(clearActionsCaseBuilder.build());
281 insIds.add(insBuilder.build());
284 insBuilder = new InstructionBuilder();
285 GotoTableCaseBuilder gotoCaseBuilder2 = new GotoTableCaseBuilder();
286 GotoTableBuilder gotoTableBuilder2 = new GotoTableBuilder();
287 gotoCaseBuilder2.setGotoTable(gotoTableBuilder2.build());
288 insBuilder.setInstructionChoice(gotoCaseBuilder2.build());
289 insIds.add(insBuilder.build());
291 insPropBuilder.setInstruction(insIds);
292 propBuilder.addAugmentation(InstructionRelatedTableFeatureProperty.class, insPropBuilder.build());
293 properties.add(propBuilder.build());
294 featuresBuilder.setTableFeatureProperties(properties);
296 List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart
297 .reply.multipart.reply.body.multipart.reply.table.features._case.multipart.reply.table.features
298 .TableFeatures> features = new ArrayList<>();
299 features.add(featuresBuilder.build());
300 featuresBuilder = new TableFeaturesBuilder();
301 featuresBuilder.setTableId((short) 6);
302 featuresBuilder.setName("Mahalo");
303 featuresBuilder.setMetadataMatch(new byte[]{8, 9, 10, 11, 12, 13, 14, 15});
304 featuresBuilder.setMetadataWrite(new byte[]{0, 1, 2, 3, 4, 5, 6, 7});
305 featuresBuilder.setConfig(new TableConfig(false));
306 featuresBuilder.setMaxEntries(24L);
308 /* -------------------------------------------------- */
310 properties = new ArrayList<>();
311 propBuilder = new TableFeaturePropertiesBuilder();
312 propBuilder.setType(TableFeaturesPropType.OFPTFPTMATCH);
313 MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();
314 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
315 entriesBuilder.setOxmMatchField(InPhyPort.class);
316 entriesBuilder.setHasMask(false);
318 List<MatchEntry> entries = new ArrayList<>();
319 entries.add(entriesBuilder.build());
320 entriesBuilder = new MatchEntryBuilder();
321 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
322 entriesBuilder.setOxmMatchField(InPort.class);
323 entriesBuilder.setHasMask(false);
324 entries.add(entriesBuilder.build());
326 OxmRelatedTableFeaturePropertyBuilder oxmBuilder = new OxmRelatedTableFeaturePropertyBuilder();
327 oxmBuilder.setMatchEntry(entries);
328 propBuilder.addAugmentation(OxmRelatedTableFeatureProperty.class, oxmBuilder.build());
329 properties.add(propBuilder.build()); //[0]
331 /* -------------------------------------------------- */
333 propBuilder = new TableFeaturePropertiesBuilder();
334 propBuilder.setType(TableFeaturesPropType.OFPTFPTAPPLYSETFIELD);
335 oxmBuilder = new OxmRelatedTableFeaturePropertyBuilder();
336 entries = new ArrayList<>();
337 entriesBuilder = new MatchEntryBuilder();
338 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
339 entriesBuilder.setOxmMatchField(IpProto.class);
340 entriesBuilder.setHasMask(false);
341 entries.add(entriesBuilder.build());
342 entriesBuilder = new MatchEntryBuilder();
343 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
344 entriesBuilder.setOxmMatchField(IpEcn.class);
345 entriesBuilder.setHasMask(false);
346 entries.add(entriesBuilder.build());
347 oxmBuilder.setMatchEntry(entries);
348 propBuilder.addAugmentation(OxmRelatedTableFeatureProperty.class, oxmBuilder.build());
349 properties.add(propBuilder.build());//[1]
351 /* -------------------------------------------------- */
353 propBuilder = new TableFeaturePropertiesBuilder();
354 propBuilder.setType(TableFeaturesPropType.OFPTFPTWRITESETFIELD);
355 oxmBuilder = new OxmRelatedTableFeaturePropertyBuilder();
356 entries = new ArrayList<>();
357 entriesBuilder = new MatchEntryBuilder();
358 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
359 entriesBuilder.setOxmMatchField(Ipv6Exthdr.class);
360 entriesBuilder.setHasMask(false);
361 entries.add(entriesBuilder.build());
362 entriesBuilder = new MatchEntryBuilder();
363 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
364 entriesBuilder.setOxmMatchField(VlanVid.class);
365 entriesBuilder.setHasMask(false);
366 entries.add(entriesBuilder.build());
367 oxmBuilder.setMatchEntry(entries);
368 propBuilder.addAugmentation(OxmRelatedTableFeatureProperty.class, oxmBuilder.build());
369 properties.add(propBuilder.build());//[2]
371 /* -------------------------------------------------- */
373 propBuilder = new TableFeaturePropertiesBuilder();
374 propBuilder.setType(TableFeaturesPropType.OFPTFPTWRITESETFIELDMISS);
375 oxmBuilder = new OxmRelatedTableFeaturePropertyBuilder();
376 entries = new ArrayList<>();
377 entriesBuilder = new MatchEntryBuilder();
378 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
379 entriesBuilder.setOxmMatchField(VlanPcp.class);
380 entriesBuilder.setHasMask(false);
381 entries.add(entriesBuilder.build());
382 entriesBuilder = new MatchEntryBuilder();
383 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
384 entriesBuilder.setOxmMatchField(TcpSrc.class);
385 entriesBuilder.setHasMask(false);
386 entries.add(entriesBuilder.build());
387 oxmBuilder.setMatchEntry(entries);
388 propBuilder.addAugmentation(OxmRelatedTableFeatureProperty.class, oxmBuilder.build());
389 properties.add(propBuilder.build());//[3]
391 /* -------------------------------------------------- */
393 propBuilder = new TableFeaturePropertiesBuilder();
394 propBuilder.setType(TableFeaturesPropType.OFPTFPTAPPLYSETFIELDMISS);
395 oxmBuilder = new OxmRelatedTableFeaturePropertyBuilder();
396 entries = new ArrayList<>();
397 entriesBuilder = new MatchEntryBuilder();
398 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
399 entriesBuilder.setOxmMatchField(UdpSrc.class);
400 entriesBuilder.setHasMask(false);
401 entries.add(entriesBuilder.build());
403 entriesBuilder = new MatchEntryBuilder();
404 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
405 entriesBuilder.setOxmMatchField(UdpDst.class);
406 entriesBuilder.setHasMask(false);
407 entries.add(entriesBuilder.build());
409 oxmBuilder.setMatchEntry(entries);
410 propBuilder.addAugmentation(OxmRelatedTableFeatureProperty.class, oxmBuilder.build());
411 properties.add(propBuilder.build());//[4]
413 /* -------------------------------------------------- */
415 propBuilder = new TableFeaturePropertiesBuilder();
416 propBuilder.setType(TableFeaturesPropType.OFPTFPTWILDCARDS);
417 oxmBuilder = new OxmRelatedTableFeaturePropertyBuilder();
418 entries = new ArrayList<>();
420 entriesBuilder = new MatchEntryBuilder();
421 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
422 entriesBuilder.setOxmMatchField(EthSrc.class);
423 entriesBuilder.setHasMask(false);
424 entries.add(entriesBuilder.build());
426 entriesBuilder = new MatchEntryBuilder();
427 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
428 entriesBuilder.setOxmMatchField(EthDst.class);
429 entriesBuilder.setHasMask(false);
430 entries.add(entriesBuilder.build());
432 oxmBuilder.setMatchEntry(entries);
433 propBuilder.addAugmentation(OxmRelatedTableFeatureProperty.class, oxmBuilder.build());
434 properties.add(propBuilder.build());//[5]
436 /* -------------------------------------------------- */
438 propBuilder = new TableFeaturePropertiesBuilder();
439 propBuilder.setType(TableFeaturesPropType.OFPTFPTAPPLYACTIONS);
440 actions = new ArrayList<>();
442 actionBuilder = new ActionBuilder();
443 actionBuilder.setActionChoice(createSetNwSrcAction());
444 actions.add(actionBuilder.build());
446 actionBuilder = new ActionBuilder();
447 actionBuilder.setActionChoice(createSetNwSrcAction());
448 actions.add(actionBuilder.build());
450 actionBuilder = new ActionBuilder();
451 actionBuilder.setActionChoice(createSetNwSrcAction());
452 actions.add(actionBuilder.build());
454 ActionRelatedTableFeaturePropertyBuilder actBuilder = new ActionRelatedTableFeaturePropertyBuilder();
455 actBuilder.setAction(actions);
456 propBuilder.addAugmentation(ActionRelatedTableFeatureProperty.class, actBuilder.build());
457 properties.add(propBuilder.build());//[6]
459 /* -------------------------------------------------- */
461 propBuilder = new TableFeaturePropertiesBuilder();
462 propBuilder.setType(TableFeaturesPropType.OFPTFPTAPPLYACTIONSMISS);
463 actBuilder = new ActionRelatedTableFeaturePropertyBuilder();
465 actions = new ArrayList<>();
466 actionBuilder = new ActionBuilder();
467 actionBuilder.setActionChoice(createGroupAction());
468 actions.add(actionBuilder.build());
470 actionBuilder = new ActionBuilder();
471 actionBuilder.setActionChoice(createCopyTtlInCase());
472 actions.add(actionBuilder.build());
474 actionBuilder = new ActionBuilder();
475 actionBuilder.setActionChoice(createCopyTtlOutCase());
476 actions.add(actionBuilder.build());
477 actBuilder.setAction(actions);
478 propBuilder.addAugmentation(ActionRelatedTableFeatureProperty.class, actBuilder.build());
479 properties.add(propBuilder.build());//[7]
481 /* -------------------------------------------------- */
482 propBuilder = new TableFeaturePropertiesBuilder();
483 propBuilder.setType(TableFeaturesPropType.OFPTFPTWRITEACTIONS);
484 actBuilder = new ActionRelatedTableFeaturePropertyBuilder();
486 actions = new ArrayList<>();
487 actionBuilder = new ActionBuilder();
488 actionBuilder.setActionChoice(createSetMplsTtlCase());
489 actions.add(actionBuilder.build());
491 actionBuilder = new ActionBuilder();
492 actionBuilder.setActionChoice(createDecMplsTtlCase());
493 actions.add(actionBuilder.build());
495 actionBuilder = new ActionBuilder();
496 actionBuilder.setActionChoice(pushVlanCase());
497 actions.add(actionBuilder.build());
498 actBuilder.setAction(actions);
500 propBuilder.addAugmentation(ActionRelatedTableFeatureProperty.class, actBuilder.build());
501 properties.add(propBuilder.build());
503 /* -------------------------------------------------- */
505 propBuilder = new TableFeaturePropertiesBuilder();
506 propBuilder.setType(TableFeaturesPropType.OFPTFPTWRITEACTIONSMISS);
507 actBuilder = new ActionRelatedTableFeaturePropertyBuilder();
509 actions = new ArrayList<>();
510 actionBuilder = new ActionBuilder();
511 actionBuilder.setActionChoice(createPopVlanCase());
512 actions.add(actionBuilder.build());
514 actionBuilder = new ActionBuilder();
515 actionBuilder.setActionChoice(createPushPbbCase());
516 actions.add(actionBuilder.build());
518 actionBuilder = new ActionBuilder();
519 actionBuilder.setActionChoice(createEmptySetFieldCase());
520 actions.add(actionBuilder.build());
521 actBuilder.setAction(actions);
523 propBuilder.addAugmentation(ActionRelatedTableFeatureProperty.class, actBuilder.build());
524 properties.add(propBuilder.build());
526 /* -------------------------------------------------- */
528 propBuilder = new TableFeaturePropertiesBuilder();
529 propBuilder.setType(TableFeaturesPropType.OFPTFPTEXPERIMENTER);
530 oxmBuilder = new OxmRelatedTableFeaturePropertyBuilder();
531 propBuilder.addAugmentation(OxmRelatedTableFeatureProperty.class, oxmBuilder.build());
532 properties.add(propBuilder.build());
534 /* -------------------------------------------------- */
536 propBuilder = new TableFeaturePropertiesBuilder();
537 propBuilder.setType(TableFeaturesPropType.OFPTFPTEXPERIMENTERMISS);
538 oxmBuilder = new OxmRelatedTableFeaturePropertyBuilder();
539 propBuilder.addAugmentation(OxmRelatedTableFeatureProperty.class, oxmBuilder.build());
540 properties.add(propBuilder.build());
542 /* -------------------------------------------------- */
544 featuresBuilder.setTableFeatureProperties(properties);
545 features.add(featuresBuilder.build());
547 MultipartReplyTableFeaturesBuilder builder = new MultipartReplyTableFeaturesBuilder();
548 builder.setTableFeatures(features);
550 List<TableFeatures> list = convert(builder.build());
552 Assert.assertEquals("Returned empty list", 2, list.size());
553 TableFeatures feature = list.get(0);
554 Assert.assertEquals("Wrong table-id", 5, feature.getTableId().intValue());
555 Assert.assertEquals("Wrong name", "Aloha", feature.getName());
556 Assert.assertEquals("Wrong metadata match", Uint64.valueOf("0001020304050607", 16), feature.getMetadataMatch());
557 Assert.assertEquals("Wrong metadata write",Uint64.valueOf("08090A0B0C0D0E0F", 16), feature.getMetadataWrite());
558 Assert.assertEquals("Wrong config", false, feature.getConfig().isDEPRECATEDMASK());
559 Assert.assertEquals("Wrong max-entries", 42, feature.getMaxEntries().intValue());
560 Assert.assertEquals("Wrong properties", 4, feature.getTableProperties().nonnullTableFeatureProperties().size());
562 var featProps = feature.getTableProperties().getTableFeatureProperties().values().iterator();
563 org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.table.features.table
564 .properties.TableFeatureProperties property = featProps.next();
565 Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types."
566 + "rev131026.table.feature.prop.type.table.feature.prop.type.NextTable",
567 property.getTableFeaturePropType().implementedInterface().getName());
568 NextTable propType = (NextTable) property.getTableFeaturePropType();
569 List<Uint8> ids = propType.getTables().getTableIds();
570 Assert.assertEquals("Wrong next table-id size", 2, ids.size());
571 Assert.assertEquals("Wrong next-registry-id", 1, ids.get(0).intValue());
572 Assert.assertEquals("Wrong next-registry-id", 2, ids.get(1).intValue());
573 property = featProps.next();
574 Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types."
575 + "rev131026.table.feature.prop.type.table.feature.prop.type.NextTableMiss",
576 property.getTableFeaturePropType().implementedInterface().getName());
577 NextTableMiss propType2 = (NextTableMiss) property.getTableFeaturePropType();
578 ids = propType2.getTablesMiss().getTableIds();
579 Assert.assertEquals("Wrong next table-id size", 1, ids.size());
580 Assert.assertEquals("Wrong next-registry-id", 3, ids.get(0).intValue());
582 property = featProps.next();
583 Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types."
584 + "rev131026.table.feature.prop.type.table.feature.prop.type.Instructions",
585 property.getTableFeaturePropType().implementedInterface().getName());
586 Instructions propType3 = (Instructions) property.getTableFeaturePropType();
587 var instructionIds = propType3.getInstructions().nonnullInstruction().values();
588 Assert.assertEquals("Wrong instruction-ids size", 2, instructionIds.size());
589 var instructionIt = instructionIds.iterator();
590 Assert.assertEquals("Wrong instruction-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types."
591 + "rev131026.instruction.instruction.WriteActionsCase",
592 instructionIt.next().getInstruction().implementedInterface().getName());
593 Assert.assertEquals("Wrong instruction-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types."
594 + "rev131026.instruction.instruction.GoToTableCase",
595 instructionIt.next().getInstruction().implementedInterface().getName());
596 property = featProps.next();
597 Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types."
598 + "rev131026.table.feature.prop.type.table.feature.prop.type.InstructionsMiss",
599 property.getTableFeaturePropType().implementedInterface().getName());
600 InstructionsMiss propType4 = (InstructionsMiss) property.getTableFeaturePropType();
601 instructionIds = propType4.getInstructionsMiss().nonnullInstruction().values();
602 Assert.assertEquals("Wrong instruction-ids size", 5, instructionIds.size());
603 instructionIt = instructionIds.iterator();
604 Assert.assertEquals("Wrong instruction-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types."
605 + "rev131026.instruction.instruction.WriteMetadataCase",
606 instructionIt.next().getInstruction().implementedInterface().getName());
607 Assert.assertEquals("Wrong instruction-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types."
608 + "rev131026.instruction.instruction.ApplyActionsCase",
609 instructionIt.next().getInstruction().implementedInterface().getName());
610 Assert.assertEquals("Wrong instruction-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types."
611 + "rev131026.instruction.instruction.MeterCase",
612 instructionIt.next().getInstruction().implementedInterface().getName());
613 Assert.assertEquals("Wrong instruction-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types."
614 + "rev131026.instruction.instruction.ClearActionsCase",
615 instructionIt.next().getInstruction().implementedInterface().getName());
616 Assert.assertEquals("Wrong instruction-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types."
617 + "rev131026.instruction.instruction.GoToTableCase",
618 instructionIt.next().getInstruction().implementedInterface().getName());
620 feature = list.get(1);
621 Assert.assertEquals("Wrong table-id", 6, feature.getTableId().intValue());
622 Assert.assertEquals("Wrong name", "Mahalo", feature.getName());
623 Assert.assertEquals("Wrong metadata match", Uint64.valueOf("08090A0B0C0D0E0F", 16), feature.getMetadataMatch());
624 Assert.assertEquals("Wrong metadata write", Uint64.valueOf("0001020304050607", 16), feature.getMetadataWrite());
625 Assert.assertEquals("Wrong config", false, feature.getConfig().isDEPRECATEDMASK());
626 Assert.assertEquals("Wrong max-entries", 24, feature.getMaxEntries().intValue());
627 Assert.assertEquals("Wrong properties", 12, feature.getTableProperties().getTableFeatureProperties().size());
628 featProps = feature.getTableProperties().nonnullTableFeatureProperties().values().iterator();
629 property = featProps.next();
630 Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types."
631 + "rev131026.table.feature.prop.type.table.feature.prop.type.Match",
632 property.getTableFeaturePropType().implementedInterface().getName());
633 Match propType5 = (Match) property.getTableFeaturePropType();
634 Collection<SetFieldMatch> fieldMatch = propType5.getMatchSetfield().nonnullSetFieldMatch().values();
635 Assert.assertEquals("Wrong match-entry-ids size", 2, fieldMatch.size());
636 Iterator<SetFieldMatch> fieldIt = fieldMatch.iterator();
637 Assert.assertEquals("Wrong match-entry-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types."
638 + "rev131026.InPhyPort", fieldIt.next().getMatchType().getName());
639 Assert.assertEquals("Wrong match-entry-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types."
640 + "rev131026.InPort", fieldIt.next().getMatchType().getName());
641 property = featProps.next();
642 Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types."
643 + "rev131026.table.feature.prop.type.table.feature.prop.type.ApplySetfield",
644 property.getTableFeaturePropType().implementedInterface().getName());
645 ApplySetfield propType6 = (ApplySetfield) property.getTableFeaturePropType();
646 fieldMatch = propType6.getApplySetfield().nonnullSetFieldMatch().values();
647 Assert.assertEquals("Wrong match-entry-ids size", 2, fieldMatch.size());
648 fieldIt = fieldMatch.iterator();
649 Assert.assertEquals("Wrong match-entry-id",
650 "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.IpProto",
651 fieldIt.next().getMatchType().getName());
652 Assert.assertEquals("Wrong match-entry-id",
653 "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.IpEcn",
654 fieldIt.next().getMatchType().getName());
655 property = featProps.next();
656 Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types."
657 + "rev131026.table.feature.prop.type.table.feature.prop.type.WriteSetfield",
658 property.getTableFeaturePropType().implementedInterface().getName());
659 WriteSetfield propType7 = (WriteSetfield) property.getTableFeaturePropType();
660 fieldMatch = propType7.getWriteSetfield().nonnullSetFieldMatch().values();
661 Assert.assertEquals("Wrong match-entry-ids size", 2, fieldMatch.size());
662 fieldIt = fieldMatch.iterator();
663 Assert.assertEquals("Wrong match-entry-id",
664 "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv6Exthdr",
665 fieldIt.next().getMatchType().getName());
666 Assert.assertEquals("Wrong match-entry-id",
667 "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.VlanVid",
668 fieldIt.next().getMatchType().getName());
669 property = featProps.next();
670 Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types."
671 + "rev131026.table.feature.prop.type.table.feature.prop.type.WriteSetfieldMiss",
672 property.getTableFeaturePropType().implementedInterface().getName());
673 WriteSetfieldMiss propType8 = (WriteSetfieldMiss) property.getTableFeaturePropType();
674 fieldMatch = propType8.getWriteSetfieldMiss().nonnullSetFieldMatch().values();
675 Assert.assertEquals("Wrong match-entry-ids size", 2, fieldMatch.size());
676 fieldIt = fieldMatch.iterator();
677 Assert.assertEquals("Wrong match-entry-id",
678 "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.VlanPcp",
679 fieldIt.next().getMatchType().getName());
680 Assert.assertEquals("Wrong match-entry-id",
681 "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TcpSrc",
682 fieldIt.next().getMatchType().getName());
683 property = featProps.next();
684 Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types."
685 + "rev131026.table.feature.prop.type.table.feature.prop.type.ApplySetfieldMiss",
686 property.getTableFeaturePropType().implementedInterface().getName());
687 ApplySetfieldMiss propType9 = (ApplySetfieldMiss) property.getTableFeaturePropType();
688 fieldMatch = propType9.getApplySetfieldMiss().nonnullSetFieldMatch().values();
689 Assert.assertEquals("Wrong match-entry-ids size", 2, fieldMatch.size());
690 fieldIt = fieldMatch.iterator();
691 Assert.assertEquals("Wrong match-entry-id",
692 "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.UdpSrc",
693 fieldIt.next().getMatchType().getName());
694 Assert.assertEquals("Wrong match-entry-id",
695 "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.UdpDst",
696 fieldIt.next().getMatchType().getName());
697 property = featProps.next();
698 Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types."
699 + "rev131026.table.feature.prop.type.table.feature.prop.type.Wildcards",
700 property.getTableFeaturePropType().implementedInterface().getName());
701 Wildcards propType10 = (Wildcards) property.getTableFeaturePropType();
702 fieldMatch = propType10.getWildcardSetfield().nonnullSetFieldMatch().values();
703 Assert.assertEquals("Wrong match-entry-ids size", 2, fieldMatch.size());
704 fieldIt = fieldMatch.iterator();
705 Assert.assertEquals("Wrong match-entry-id",
706 "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.EthSrc",
707 fieldIt.next().getMatchType().getName());
708 Assert.assertEquals("Wrong match-entry-id",
709 "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.EthDst",
710 fieldIt.next().getMatchType().getName());
712 property = featProps.next();
713 Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types."
714 + "rev131026.table.feature.prop.type.table.feature.prop.type.ApplyActions",
715 property.getTableFeaturePropType().implementedInterface().getName());
716 org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop
717 .type.ApplyActions propType11 = (org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table
718 .feature.prop.type.table.feature.prop.type.ApplyActions) property.getTableFeaturePropType();
719 var actionsList = propType11.getApplyActions().nonnullAction().values();
720 Assert.assertEquals("Wrong actions-ids size", 3, actionsList.size());
721 var actionsIt = actionsList.iterator();
722 Assert.assertEquals("Wrong actions-id",
723 "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwSrcActionCase",
724 actionsIt.next().getAction().implementedInterface().getName());
725 Assert.assertEquals("Wrong actions-id",
726 "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwSrcActionCase",
727 actionsIt.next().getAction().implementedInterface().getName());
728 Assert.assertEquals("Wrong actions-id",
729 "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwSrcActionCase",
730 actionsIt.next().getAction().implementedInterface().getName());
732 property = featProps.next();
733 Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types."
734 + "rev131026.table.feature.prop.type.table.feature.prop.type.ApplyActionsMiss",
735 property.getTableFeaturePropType().implementedInterface().getName());
736 org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop
737 .type.ApplyActionsMiss propType12 = (org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026
738 .table.feature.prop.type.table.feature.prop.type.ApplyActionsMiss) property.getTableFeaturePropType();
739 actionsList = propType12.getApplyActionsMiss().nonnullAction().values();
740 Assert.assertEquals("Wrong actions-ids size", 3, actionsList.size());
741 actionsIt = actionsList.iterator();
742 Assert.assertEquals("Wrong actions-id",
743 "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCase",
744 actionsIt.next().getAction().implementedInterface().getName());
745 Assert.assertEquals("Wrong actions-id",
746 "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlInCase",
747 actionsIt.next().getAction().implementedInterface().getName());
748 Assert.assertEquals("Wrong actions-id",
749 "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlOutCase",
750 actionsIt.next().getAction().implementedInterface().getName());
751 property = featProps.next();
752 Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types."
753 + "rev131026.table.feature.prop.type.table.feature.prop.type.WriteActions",
754 property.getTableFeaturePropType().implementedInterface().getName());
756 org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop
757 .type.WriteActions propType13 = (org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table
758 .feature.prop.type.table.feature.prop.type.WriteActions) property.getTableFeaturePropType();
759 actionsList = propType13.getWriteActions().nonnullAction().values();
760 Assert.assertEquals("Wrong actions-ids size", 3, actionsList.size());
761 actionsIt = actionsList.iterator();
762 Assert.assertEquals("Wrong actions-id",
763 "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetMplsTtlActionCase",
764 actionsIt.next().getAction().implementedInterface().getName());
765 Assert.assertEquals("Wrong actions-id",
766 "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecMplsTtlCase",
767 actionsIt.next().getAction().implementedInterface().getName());
768 Assert.assertEquals("Wrong actions-id",
769 "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushVlanActionCase",
770 actionsIt.next().getAction().implementedInterface().getName());
771 property = featProps.next();
772 Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types."
773 + "rev131026.table.feature.prop.type.table.feature.prop.type.WriteActionsMiss",
774 property.getTableFeaturePropType().implementedInterface().getName());
776 org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop
777 .type.WriteActionsMiss propType14 = (org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026
778 .table.feature.prop.type.table.feature.prop.type.WriteActionsMiss) property.getTableFeaturePropType();
779 actionsList = propType14.getWriteActionsMiss().nonnullAction().values();
780 Assert.assertEquals("Wrong actions-ids size", 3, actionsList.size());
781 actionsIt = actionsList.iterator();
782 Assert.assertEquals("Wrong actions-id",
783 "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionCase",
784 actionsIt.next().getAction().implementedInterface().getName());
785 Assert.assertEquals("Wrong actions-id",
786 "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushPbbActionCase",
787 actionsIt.next().getAction().implementedInterface().getName());
788 Assert.assertEquals("Wrong actions-id",
789 "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetFieldCase",
790 actionsIt.next().getAction().implementedInterface().getName());
793 private static SetNwSrcCase createSetNwSrcAction() {
794 final SetNwSrcCaseBuilder setNwSrcCaseBuilder;
795 final SetNwSrcActionBuilder setNwSrcActionBuilder;
796 setNwSrcCaseBuilder = new SetNwSrcCaseBuilder();
797 setNwSrcActionBuilder = new SetNwSrcActionBuilder();
798 setNwSrcActionBuilder.setIpAddress(new Ipv4Address("1.2.3.4"));
799 setNwSrcCaseBuilder.setSetNwSrcAction(setNwSrcActionBuilder.build());
800 return setNwSrcCaseBuilder.build();
803 private static GroupCase createGroupAction() {
804 final GroupCaseBuilder groupCaseBuilder = new GroupCaseBuilder();
805 final GroupActionBuilder groupActionBuilder = new GroupActionBuilder();
806 groupActionBuilder.setGroupId(42L);
807 groupCaseBuilder.setGroupAction(groupActionBuilder.build());
808 return groupCaseBuilder.build();
811 private static CopyTtlInCase createCopyTtlInCase() {
812 CopyTtlInCaseBuilder copyTtlInCaseBuilder = new CopyTtlInCaseBuilder();
813 return copyTtlInCaseBuilder.build();
816 private static CopyTtlOutCase createCopyTtlOutCase() {
817 CopyTtlOutCaseBuilder copyTtlInCaseBuilder = new CopyTtlOutCaseBuilder();
818 return copyTtlInCaseBuilder.build();
821 private static SetMplsTtlCase createSetMplsTtlCase() {
822 SetMplsTtlCaseBuilder setMplsTtlCaseBuilder = new SetMplsTtlCaseBuilder();
823 SetMplsTtlActionBuilder setMplsTtlActionBuilder = new SetMplsTtlActionBuilder();
824 setMplsTtlActionBuilder.setMplsTtl((short) 42);
825 setMplsTtlCaseBuilder.setSetMplsTtlAction(setMplsTtlActionBuilder.build());
826 return setMplsTtlCaseBuilder.build();
829 private static DecMplsTtlCase createDecMplsTtlCase() {
830 DecMplsTtlCaseBuilder decMplsTtlCaseBuilder = new DecMplsTtlCaseBuilder();
831 return decMplsTtlCaseBuilder.build();
834 private static PushVlanCase pushVlanCase() {
835 PushVlanCaseBuilder pushVlanCaseBuilder = new PushVlanCaseBuilder();
836 PushVlanActionBuilder pushVlanActionBuilder = new PushVlanActionBuilder();
837 pushVlanActionBuilder.setEthertype(new EtherType(1));
838 pushVlanCaseBuilder.setPushVlanAction(pushVlanActionBuilder.build());
839 return pushVlanCaseBuilder.build();
842 private static PopVlanCase createPopVlanCase() {
843 PopVlanCaseBuilder popVlanCaseBuilder = new PopVlanCaseBuilder();
844 return popVlanCaseBuilder.build();
847 private static PushPbbCase createPushPbbCase() {
848 PushPbbCaseBuilder pushPbbCaseBuilder = new PushPbbCaseBuilder();
849 PushPbbActionBuilder pushPbbActionBuilder = new PushPbbActionBuilder();
850 pushPbbActionBuilder.setEthertype(new EtherType(1));
851 pushPbbCaseBuilder.setPushPbbAction(pushPbbActionBuilder.build());
852 return pushPbbCaseBuilder.build();
855 private static SetFieldCase createEmptySetFieldCase() {
856 SetFieldCaseBuilder setFieldCaseBuilder = new SetFieldCaseBuilder();
857 SetFieldActionBuilder setFieldActionBuilder = new SetFieldActionBuilder();
858 List<MatchEntry> matchEntries = new ArrayList<>();
859 MatchEntryBuilder matchEntryBuilder = new MatchEntryBuilder();
861 matchEntries.add(matchEntryBuilder.build());
862 setFieldActionBuilder.setMatchEntry(matchEntries);
863 setFieldCaseBuilder.setSetFieldAction(setFieldActionBuilder.build());
864 return setFieldCaseBuilder.build();
868 private List<TableFeatures> convert(final MultipartReplyTableFeatures features) {
869 Optional<List<TableFeatures>> listOptional =
870 convertorManager.convert(features, new VersionConvertorData(OFConstants.OFP_VERSION_1_3));
871 return listOptional.orElse(Collections.emptyList());