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