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