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.Collections;
13 import java.util.List;
14 import java.util.Optional;
15 import org.junit.Assert;
16 import org.junit.Before;
17 import org.junit.Test;
18 import org.opendaylight.openflowplugin.api.OFConstants;
19 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionConvertorData;
20 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev150225.ActionRelatedTableFeatureProperty;
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.InstructionRelatedTableFeatureProperty;
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.NextTableRelatedTableFeatureProperty;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev150225.NextTableRelatedTableFeaturePropertyBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev150225.OxmRelatedTableFeatureProperty;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev150225.OxmRelatedTableFeaturePropertyBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev150225.table.features.properties.container.table.feature.properties.NextTableIds;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev150225.table.features.properties.container.table.feature.properties.NextTableIdsBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.CopyTtlInCase;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.CopyTtlInCaseBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.CopyTtlOutCase;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.CopyTtlOutCaseBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.DecMplsTtlCase;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.DecMplsTtlCaseBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.GroupCase;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.GroupCaseBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PopVlanCase;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PopVlanCaseBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PushPbbCase;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PushPbbCaseBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PushVlanCase;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PushVlanCaseBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetFieldCase;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetFieldCaseBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetMplsTtlCase;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetMplsTtlCaseBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetNwSrcCase;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetNwSrcCaseBuilder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.group._case.GroupActionBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.push.pbb._case.PushPbbActionBuilder;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.push.vlan._case.PushVlanActionBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.set.field._case.SetFieldActionBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.set.mpls.ttl._case.SetMplsTtlActionBuilder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.set.nw.src._case.SetNwSrcActionBuilder;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.ActionBuilder;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.ApplyActionsCaseBuilder;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.ClearActionsCaseBuilder;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.GotoTableCaseBuilder;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.MeterCaseBuilder;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.WriteActionsCaseBuilder;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.WriteMetadataCaseBuilder;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice._goto.table._case.GotoTableBuilder;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.apply.actions._case.ApplyActionsBuilder;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.meter._case.MeterBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.write.actions._case.WriteActionsBuilder;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instruction.grouping.instruction.choice.write.metadata._case.WriteMetadataBuilder;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.Instruction;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.InstructionBuilder;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.EtherType;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.TableConfig;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.TableFeaturesPropType;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.EthDst;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.EthSrc;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.InPhyPort;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.InPort;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.IpEcn;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.IpProto;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.Ipv6Exthdr;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OpenflowBasicClass;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.TcpSrc;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.UdpDst;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.UdpSrc;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.VlanPcp;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.VlanVid;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntry;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntryBuilder;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.table.features._case.MultipartReplyTableFeatures;
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.table.features._case.MultipartReplyTableFeaturesBuilder;
92 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;
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.table.features.properties.grouping.TableFeatureProperties;
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.table.features.properties.grouping.TableFeaturePropertiesBuilder;
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.set.field.match.SetFieldMatch;
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplySetfield;
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplySetfieldMiss;
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.Instructions;
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.InstructionsMiss;
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.Match;
101 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.NextTable;
102 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.NextTableMiss;
103 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.Wildcards;
104 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteSetfield;
105 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteSetfieldMiss;
106 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.TableFeatures;
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((short) 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(42L);
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().getTableFeatureProperties().size());
177 * Test correct input.
180 public void testWithMPTableFeatureWithProperties() {
181 TableFeaturesBuilder featuresBuilder = new TableFeaturesBuilder();
182 featuresBuilder.setTableId((short) 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(42L);
189 TableFeaturePropertiesBuilder propBuilder = new TableFeaturePropertiesBuilder();
191 propBuilder.setType(TableFeaturesPropType.OFPTFPTNEXTTABLES);
192 NextTableRelatedTableFeaturePropertyBuilder nextPropBuilder =
193 new NextTableRelatedTableFeaturePropertyBuilder();
194 List<NextTableIds> nextIds = new ArrayList<>();
195 nextIds.add(new NextTableIdsBuilder().setTableId((short) 1).build());
196 nextIds.add(new NextTableIdsBuilder().setTableId((short) 2).build());
197 nextPropBuilder.setNextTableIds(nextIds);
198 propBuilder.addAugmentation(NextTableRelatedTableFeatureProperty.class, nextPropBuilder.build());
200 List<TableFeatureProperties> properties = new ArrayList<>();
201 properties.add(propBuilder.build());
202 propBuilder = new TableFeaturePropertiesBuilder();
204 propBuilder.setType(TableFeaturesPropType.OFPTFPTNEXTTABLESMISS);
205 nextPropBuilder = new NextTableRelatedTableFeaturePropertyBuilder();
206 nextIds = new ArrayList<>();
207 nextIds.add(new NextTableIdsBuilder().setTableId((short) 3).build());
208 nextPropBuilder.setNextTableIds(nextIds);
209 propBuilder.addAugmentation(NextTableRelatedTableFeatureProperty.class, nextPropBuilder.build());
210 properties.add(propBuilder.build());
211 propBuilder = new TableFeaturePropertiesBuilder();
213 propBuilder.setType(TableFeaturesPropType.OFPTFPTINSTRUCTIONS);
215 /* -------------------------------------------------- */
217 List<Action> actions = new ArrayList<>();
218 WriteActionsBuilder writeActionsBuilder = new WriteActionsBuilder();
219 ActionBuilder actionBuilder = new ActionBuilder();
220 actionBuilder.setActionChoice(createSetNwSrcAction());
221 actions.add(actionBuilder.build());
222 writeActionsBuilder.setAction(actions);
224 WriteActionsCaseBuilder writeActionsCaseBuilder = new WriteActionsCaseBuilder();
225 writeActionsCaseBuilder.setWriteActions(writeActionsBuilder.build());
227 InstructionBuilder insBuilder = new InstructionBuilder();
228 insBuilder.setInstructionChoice(writeActionsCaseBuilder.build());
230 List<Instruction> insIds = new ArrayList<>();
231 insIds.add(insBuilder.build());
233 /* -------------------------------------------------- */
235 insBuilder = new InstructionBuilder();
236 GotoTableCaseBuilder gotoCaseBuilder = new GotoTableCaseBuilder();
237 GotoTableBuilder gotoTableBuilder = new GotoTableBuilder();
238 gotoCaseBuilder.setGotoTable(gotoTableBuilder.build());
239 insBuilder.setInstructionChoice(gotoCaseBuilder.build());
240 insIds.add(insBuilder.build());
242 InstructionRelatedTableFeaturePropertyBuilder insPropBuilder =
243 new InstructionRelatedTableFeaturePropertyBuilder();
244 insPropBuilder.setInstruction(insIds);
245 propBuilder.addAugmentation(InstructionRelatedTableFeatureProperty.class, insPropBuilder.build());
246 properties.add(propBuilder.build());
248 /* -------------------------------------------------- */
250 propBuilder = new TableFeaturePropertiesBuilder();
251 propBuilder.setType(TableFeaturesPropType.OFPTFPTINSTRUCTIONSMISS);
252 insPropBuilder = new InstructionRelatedTableFeaturePropertyBuilder();
253 insIds = new ArrayList<>();
254 insBuilder = new InstructionBuilder();
255 WriteMetadataCaseBuilder writeMetadataCaseBuilder = new WriteMetadataCaseBuilder();
256 WriteMetadataBuilder writeMetadataBuilder = new WriteMetadataBuilder();
257 writeMetadataCaseBuilder.setWriteMetadata(writeMetadataBuilder.build());
258 insBuilder.setInstructionChoice(writeMetadataCaseBuilder.build());
259 insIds.add(insBuilder.build());
261 insBuilder = new InstructionBuilder();
262 ApplyActionsCaseBuilder applyActionsCaseBuilder = new ApplyActionsCaseBuilder();
263 ApplyActionsBuilder applyActionsBuilder = new ApplyActionsBuilder();
264 applyActionsCaseBuilder.setApplyActions(applyActionsBuilder.build());
265 insBuilder.setInstructionChoice(applyActionsCaseBuilder.build());
266 insIds.add(insBuilder.build());
268 insBuilder = new InstructionBuilder();
269 MeterCaseBuilder meterCaseBuilder = new MeterCaseBuilder();
270 MeterBuilder meterBuilder = new MeterBuilder();
271 meterCaseBuilder.setMeter(meterBuilder.build());
272 insBuilder.setInstructionChoice(meterCaseBuilder.build());
273 insIds.add(insBuilder.build());
276 insBuilder = new InstructionBuilder();
277 ClearActionsCaseBuilder clearActionsCaseBuilder = new ClearActionsCaseBuilder();
278 insBuilder.setInstructionChoice(clearActionsCaseBuilder.build());
279 insIds.add(insBuilder.build());
282 insBuilder = new InstructionBuilder();
283 GotoTableCaseBuilder gotoCaseBuilder2 = new GotoTableCaseBuilder();
284 GotoTableBuilder gotoTableBuilder2 = new GotoTableBuilder();
285 gotoCaseBuilder2.setGotoTable(gotoTableBuilder2.build());
286 insBuilder.setInstructionChoice(gotoCaseBuilder2.build());
287 insIds.add(insBuilder.build());
289 insPropBuilder.setInstruction(insIds);
290 propBuilder.addAugmentation(InstructionRelatedTableFeatureProperty.class, insPropBuilder.build());
291 properties.add(propBuilder.build());
292 featuresBuilder.setTableFeatureProperties(properties);
294 List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart
295 .reply.multipart.reply.body.multipart.reply.table.features._case.multipart.reply.table.features
296 .TableFeatures> features = new ArrayList<>();
297 features.add(featuresBuilder.build());
298 featuresBuilder = new TableFeaturesBuilder();
299 featuresBuilder.setTableId((short) 6);
300 featuresBuilder.setName("Mahalo");
301 featuresBuilder.setMetadataMatch(new byte[]{8, 9, 10, 11, 12, 13, 14, 15});
302 featuresBuilder.setMetadataWrite(new byte[]{0, 1, 2, 3, 4, 5, 6, 7});
303 featuresBuilder.setConfig(new TableConfig(false));
304 featuresBuilder.setMaxEntries(24L);
306 /* -------------------------------------------------- */
308 properties = new ArrayList<>();
309 propBuilder = new TableFeaturePropertiesBuilder();
310 propBuilder.setType(TableFeaturesPropType.OFPTFPTMATCH);
311 MatchEntryBuilder entriesBuilder = new MatchEntryBuilder();
312 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
313 entriesBuilder.setOxmMatchField(InPhyPort.class);
314 entriesBuilder.setHasMask(false);
316 List<MatchEntry> entries = new ArrayList<>();
317 entries.add(entriesBuilder.build());
318 entriesBuilder = new MatchEntryBuilder();
319 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
320 entriesBuilder.setOxmMatchField(InPort.class);
321 entriesBuilder.setHasMask(false);
322 entries.add(entriesBuilder.build());
324 OxmRelatedTableFeaturePropertyBuilder oxmBuilder = new OxmRelatedTableFeaturePropertyBuilder();
325 oxmBuilder.setMatchEntry(entries);
326 propBuilder.addAugmentation(OxmRelatedTableFeatureProperty.class, oxmBuilder.build());
327 properties.add(propBuilder.build()); //[0]
329 /* -------------------------------------------------- */
331 propBuilder = new TableFeaturePropertiesBuilder();
332 propBuilder.setType(TableFeaturesPropType.OFPTFPTAPPLYSETFIELD);
333 oxmBuilder = new OxmRelatedTableFeaturePropertyBuilder();
334 entries = new ArrayList<>();
335 entriesBuilder = new MatchEntryBuilder();
336 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
337 entriesBuilder.setOxmMatchField(IpProto.class);
338 entriesBuilder.setHasMask(false);
339 entries.add(entriesBuilder.build());
340 entriesBuilder = new MatchEntryBuilder();
341 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
342 entriesBuilder.setOxmMatchField(IpEcn.class);
343 entriesBuilder.setHasMask(false);
344 entries.add(entriesBuilder.build());
345 oxmBuilder.setMatchEntry(entries);
346 propBuilder.addAugmentation(OxmRelatedTableFeatureProperty.class, oxmBuilder.build());
347 properties.add(propBuilder.build());//[1]
349 /* -------------------------------------------------- */
351 propBuilder = new TableFeaturePropertiesBuilder();
352 propBuilder.setType(TableFeaturesPropType.OFPTFPTWRITESETFIELD);
353 oxmBuilder = new OxmRelatedTableFeaturePropertyBuilder();
354 entries = new ArrayList<>();
355 entriesBuilder = new MatchEntryBuilder();
356 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
357 entriesBuilder.setOxmMatchField(Ipv6Exthdr.class);
358 entriesBuilder.setHasMask(false);
359 entries.add(entriesBuilder.build());
360 entriesBuilder = new MatchEntryBuilder();
361 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
362 entriesBuilder.setOxmMatchField(VlanVid.class);
363 entriesBuilder.setHasMask(false);
364 entries.add(entriesBuilder.build());
365 oxmBuilder.setMatchEntry(entries);
366 propBuilder.addAugmentation(OxmRelatedTableFeatureProperty.class, oxmBuilder.build());
367 properties.add(propBuilder.build());//[2]
369 /* -------------------------------------------------- */
371 propBuilder = new TableFeaturePropertiesBuilder();
372 propBuilder.setType(TableFeaturesPropType.OFPTFPTWRITESETFIELDMISS);
373 oxmBuilder = new OxmRelatedTableFeaturePropertyBuilder();
374 entries = new ArrayList<>();
375 entriesBuilder = new MatchEntryBuilder();
376 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
377 entriesBuilder.setOxmMatchField(VlanPcp.class);
378 entriesBuilder.setHasMask(false);
379 entries.add(entriesBuilder.build());
380 entriesBuilder = new MatchEntryBuilder();
381 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
382 entriesBuilder.setOxmMatchField(TcpSrc.class);
383 entriesBuilder.setHasMask(false);
384 entries.add(entriesBuilder.build());
385 oxmBuilder.setMatchEntry(entries);
386 propBuilder.addAugmentation(OxmRelatedTableFeatureProperty.class, oxmBuilder.build());
387 properties.add(propBuilder.build());//[3]
389 /* -------------------------------------------------- */
391 propBuilder = new TableFeaturePropertiesBuilder();
392 propBuilder.setType(TableFeaturesPropType.OFPTFPTAPPLYSETFIELDMISS);
393 oxmBuilder = new OxmRelatedTableFeaturePropertyBuilder();
394 entries = new ArrayList<>();
395 entriesBuilder = new MatchEntryBuilder();
396 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
397 entriesBuilder.setOxmMatchField(UdpSrc.class);
398 entriesBuilder.setHasMask(false);
399 entries.add(entriesBuilder.build());
401 entriesBuilder = new MatchEntryBuilder();
402 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
403 entriesBuilder.setOxmMatchField(UdpDst.class);
404 entriesBuilder.setHasMask(false);
405 entries.add(entriesBuilder.build());
407 oxmBuilder.setMatchEntry(entries);
408 propBuilder.addAugmentation(OxmRelatedTableFeatureProperty.class, oxmBuilder.build());
409 properties.add(propBuilder.build());//[4]
411 /* -------------------------------------------------- */
413 propBuilder = new TableFeaturePropertiesBuilder();
414 propBuilder.setType(TableFeaturesPropType.OFPTFPTWILDCARDS);
415 oxmBuilder = new OxmRelatedTableFeaturePropertyBuilder();
416 entries = new ArrayList<>();
418 entriesBuilder = new MatchEntryBuilder();
419 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
420 entriesBuilder.setOxmMatchField(EthSrc.class);
421 entriesBuilder.setHasMask(false);
422 entries.add(entriesBuilder.build());
424 entriesBuilder = new MatchEntryBuilder();
425 entriesBuilder.setOxmClass(OpenflowBasicClass.class);
426 entriesBuilder.setOxmMatchField(EthDst.class);
427 entriesBuilder.setHasMask(false);
428 entries.add(entriesBuilder.build());
430 oxmBuilder.setMatchEntry(entries);
431 propBuilder.addAugmentation(OxmRelatedTableFeatureProperty.class, oxmBuilder.build());
432 properties.add(propBuilder.build());//[5]
434 /* -------------------------------------------------- */
436 propBuilder = new TableFeaturePropertiesBuilder();
437 propBuilder.setType(TableFeaturesPropType.OFPTFPTAPPLYACTIONS);
438 actions = new ArrayList<>();
440 actionBuilder = new ActionBuilder();
441 actionBuilder.setActionChoice(createSetNwSrcAction());
442 actions.add(actionBuilder.build());
444 actionBuilder = new ActionBuilder();
445 actionBuilder.setActionChoice(createSetNwSrcAction());
446 actions.add(actionBuilder.build());
448 actionBuilder = new ActionBuilder();
449 actionBuilder.setActionChoice(createSetNwSrcAction());
450 actions.add(actionBuilder.build());
452 ActionRelatedTableFeaturePropertyBuilder actBuilder = new ActionRelatedTableFeaturePropertyBuilder();
453 actBuilder.setAction(actions);
454 propBuilder.addAugmentation(ActionRelatedTableFeatureProperty.class, actBuilder.build());
455 properties.add(propBuilder.build());//[6]
457 /* -------------------------------------------------- */
459 propBuilder = new TableFeaturePropertiesBuilder();
460 propBuilder.setType(TableFeaturesPropType.OFPTFPTAPPLYACTIONSMISS);
461 actBuilder = new ActionRelatedTableFeaturePropertyBuilder();
463 actions = new ArrayList<>();
464 actionBuilder = new ActionBuilder();
465 actionBuilder.setActionChoice(createGroupAction());
466 actions.add(actionBuilder.build());
468 actionBuilder = new ActionBuilder();
469 actionBuilder.setActionChoice(createCopyTtlInCase());
470 actions.add(actionBuilder.build());
472 actionBuilder = new ActionBuilder();
473 actionBuilder.setActionChoice(createCopyTtlOutCase());
474 actions.add(actionBuilder.build());
475 actBuilder.setAction(actions);
476 propBuilder.addAugmentation(ActionRelatedTableFeatureProperty.class, actBuilder.build());
477 properties.add(propBuilder.build());//[7]
479 /* -------------------------------------------------- */
480 propBuilder = new TableFeaturePropertiesBuilder();
481 propBuilder.setType(TableFeaturesPropType.OFPTFPTWRITEACTIONS);
482 actBuilder = new ActionRelatedTableFeaturePropertyBuilder();
484 actions = new ArrayList<>();
485 actionBuilder = new ActionBuilder();
486 actionBuilder.setActionChoice(createSetMplsTtlCase());
487 actions.add(actionBuilder.build());
489 actionBuilder = new ActionBuilder();
490 actionBuilder.setActionChoice(createDecMplsTtlCase());
491 actions.add(actionBuilder.build());
493 actionBuilder = new ActionBuilder();
494 actionBuilder.setActionChoice(pushVlanCase());
495 actions.add(actionBuilder.build());
496 actBuilder.setAction(actions);
498 propBuilder.addAugmentation(ActionRelatedTableFeatureProperty.class, actBuilder.build());
499 properties.add(propBuilder.build());
501 /* -------------------------------------------------- */
503 propBuilder = new TableFeaturePropertiesBuilder();
504 propBuilder.setType(TableFeaturesPropType.OFPTFPTWRITEACTIONSMISS);
505 actBuilder = new ActionRelatedTableFeaturePropertyBuilder();
507 actions = new ArrayList<>();
508 actionBuilder = new ActionBuilder();
509 actionBuilder.setActionChoice(createPopVlanCase());
510 actions.add(actionBuilder.build());
512 actionBuilder = new ActionBuilder();
513 actionBuilder.setActionChoice(createPushPbbCase());
514 actions.add(actionBuilder.build());
516 actionBuilder = new ActionBuilder();
517 actionBuilder.setActionChoice(createEmptySetFieldCase());
518 actions.add(actionBuilder.build());
519 actBuilder.setAction(actions);
521 propBuilder.addAugmentation(ActionRelatedTableFeatureProperty.class, actBuilder.build());
522 properties.add(propBuilder.build());
524 /* -------------------------------------------------- */
526 propBuilder = new TableFeaturePropertiesBuilder();
527 propBuilder.setType(TableFeaturesPropType.OFPTFPTEXPERIMENTER);
528 oxmBuilder = new OxmRelatedTableFeaturePropertyBuilder();
529 propBuilder.addAugmentation(OxmRelatedTableFeatureProperty.class, oxmBuilder.build());
530 properties.add(propBuilder.build());
532 /* -------------------------------------------------- */
534 propBuilder = new TableFeaturePropertiesBuilder();
535 propBuilder.setType(TableFeaturesPropType.OFPTFPTEXPERIMENTERMISS);
536 oxmBuilder = new OxmRelatedTableFeaturePropertyBuilder();
537 propBuilder.addAugmentation(OxmRelatedTableFeatureProperty.class, oxmBuilder.build());
538 properties.add(propBuilder.build());
540 /* -------------------------------------------------- */
542 featuresBuilder.setTableFeatureProperties(properties);
543 features.add(featuresBuilder.build());
545 MultipartReplyTableFeaturesBuilder builder = new MultipartReplyTableFeaturesBuilder();
546 builder.setTableFeatures(features);
548 List<TableFeatures> list = convert(builder.build());
550 Assert.assertEquals("Returned empty list", 2, list.size());
551 TableFeatures feature = list.get(0);
552 Assert.assertEquals("Wrong table-id", 5, feature.getTableId().intValue());
553 Assert.assertEquals("Wrong name", "Aloha", feature.getName());
554 Assert.assertEquals("Wrong metadata match", Uint64.valueOf("0001020304050607", 16), feature.getMetadataMatch());
555 Assert.assertEquals("Wrong metadata write",Uint64.valueOf("08090A0B0C0D0E0F", 16), feature.getMetadataWrite());
556 Assert.assertEquals("Wrong config", false, feature.getConfig().isDEPRECATEDMASK());
557 Assert.assertEquals("Wrong max-entries", 42, feature.getMaxEntries().intValue());
558 Assert.assertEquals("Wrong properties", 4, feature.getTableProperties().getTableFeatureProperties().size());
559 org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.table.features.table
560 .properties.TableFeatureProperties property = feature.getTableProperties().getTableFeatureProperties()
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.NextTable",
564 property.getTableFeaturePropType().implementedInterface().getName());
565 NextTable propType = (NextTable) property.getTableFeaturePropType();
566 List<Uint8> ids = propType.getTables().getTableIds();
567 Assert.assertEquals("Wrong next table-id size", 2, ids.size());
568 Assert.assertEquals("Wrong next-registry-id", 1, ids.get(0).intValue());
569 Assert.assertEquals("Wrong next-registry-id", 2, ids.get(1).intValue());
570 property = feature.getTableProperties().getTableFeatureProperties().get(1);
571 Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types."
572 + "rev131026.table.feature.prop.type.table.feature.prop.type.NextTableMiss",
573 property.getTableFeaturePropType().implementedInterface().getName());
574 NextTableMiss propType2 = (NextTableMiss) property.getTableFeaturePropType();
575 ids = propType2.getTablesMiss().getTableIds();
576 Assert.assertEquals("Wrong next table-id size", 1, ids.size());
577 Assert.assertEquals("Wrong next-registry-id", 3, ids.get(0).intValue());
579 property = feature.getTableProperties().getTableFeatureProperties().get(2);
580 Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types."
581 + "rev131026.table.feature.prop.type.table.feature.prop.type.Instructions",
582 property.getTableFeaturePropType().implementedInterface().getName());
583 Instructions propType3 = (Instructions) property.getTableFeaturePropType();
584 List<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list
585 .Instruction> instructionIds = propType3.getInstructions().getInstruction();
586 Assert.assertEquals("Wrong instruction-ids size", 2, instructionIds.size());
587 Assert.assertEquals("Wrong instruction-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types."
588 + "rev131026.instruction.instruction.WriteActionsCase",
589 instructionIds.get(0).getInstruction().implementedInterface().getName());
590 Assert.assertEquals("Wrong instruction-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types."
591 + "rev131026.instruction.instruction.GoToTableCase",
592 instructionIds.get(1).getInstruction().implementedInterface().getName());
593 property = feature.getTableProperties().getTableFeatureProperties().get(3);
594 Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types."
595 + "rev131026.table.feature.prop.type.table.feature.prop.type.InstructionsMiss",
596 property.getTableFeaturePropType().implementedInterface().getName());
597 InstructionsMiss propType4 = (InstructionsMiss) property.getTableFeaturePropType();
598 instructionIds = propType4.getInstructionsMiss().getInstruction();
599 Assert.assertEquals("Wrong instruction-ids size", 5, instructionIds.size());
600 Assert.assertEquals("Wrong instruction-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types."
601 + "rev131026.instruction.instruction.WriteMetadataCase",
602 instructionIds.get(0).getInstruction().implementedInterface().getName());
603 Assert.assertEquals("Wrong instruction-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types."
604 + "rev131026.instruction.instruction.ApplyActionsCase",
605 instructionIds.get(1).getInstruction().implementedInterface().getName());
606 Assert.assertEquals("Wrong instruction-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types."
607 + "rev131026.instruction.instruction.MeterCase",
608 instructionIds.get(2).getInstruction().implementedInterface().getName());
609 Assert.assertEquals("Wrong instruction-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types."
610 + "rev131026.instruction.instruction.ClearActionsCase",
611 instructionIds.get(3).getInstruction().implementedInterface().getName());
612 Assert.assertEquals("Wrong instruction-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types."
613 + "rev131026.instruction.instruction.GoToTableCase",
614 instructionIds.get(4).getInstruction().implementedInterface().getName());
616 feature = list.get(1);
617 Assert.assertEquals("Wrong table-id", 6, feature.getTableId().intValue());
618 Assert.assertEquals("Wrong name", "Mahalo", feature.getName());
619 Assert.assertEquals("Wrong metadata match", Uint64.valueOf("08090A0B0C0D0E0F", 16), feature.getMetadataMatch());
620 Assert.assertEquals("Wrong metadata write", Uint64.valueOf("0001020304050607", 16), feature.getMetadataWrite());
621 Assert.assertEquals("Wrong config", false, feature.getConfig().isDEPRECATEDMASK());
622 Assert.assertEquals("Wrong max-entries", 24, feature.getMaxEntries().intValue());
623 Assert.assertEquals("Wrong properties", 12, feature.getTableProperties().getTableFeatureProperties().size());
624 property = feature.getTableProperties().getTableFeatureProperties().get(0);
625 Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types."
626 + "rev131026.table.feature.prop.type.table.feature.prop.type.Match",
627 property.getTableFeaturePropType().implementedInterface().getName());
628 Match propType5 = (Match) property.getTableFeaturePropType();
629 List<SetFieldMatch> fieldMatch = propType5.getMatchSetfield().getSetFieldMatch();
630 Assert.assertEquals("Wrong match-entry-ids size", 2, fieldMatch.size());
631 Assert.assertEquals("Wrong match-entry-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types."
632 + "rev131026.InPhyPort", fieldMatch.get(0).getMatchType().getName());
633 Assert.assertEquals("Wrong match-entry-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types."
634 + "rev131026.InPort", fieldMatch.get(1).getMatchType().getName());
635 property = feature.getTableProperties().getTableFeatureProperties().get(1);
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.ApplySetfield",
638 property.getTableFeaturePropType().implementedInterface().getName());
639 ApplySetfield propType6 = (ApplySetfield) property.getTableFeaturePropType();
640 fieldMatch = propType6.getApplySetfield().getSetFieldMatch();
641 Assert.assertEquals("Wrong match-entry-ids size", 2, fieldMatch.size());
642 Assert.assertEquals("Wrong match-entry-id",
643 "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.IpProto",
644 fieldMatch.get(0).getMatchType().getName());
645 Assert.assertEquals("Wrong match-entry-id",
646 "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.IpEcn",
647 fieldMatch.get(1).getMatchType().getName());
648 property = feature.getTableProperties().getTableFeatureProperties().get(2);
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.WriteSetfield",
651 property.getTableFeaturePropType().implementedInterface().getName());
652 WriteSetfield propType7 = (WriteSetfield) property.getTableFeaturePropType();
653 fieldMatch = propType7.getWriteSetfield().getSetFieldMatch();
654 Assert.assertEquals("Wrong match-entry-ids size", 2, fieldMatch.size());
655 Assert.assertEquals("Wrong match-entry-id",
656 "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv6Exthdr",
657 fieldMatch.get(0).getMatchType().getName());
658 Assert.assertEquals("Wrong match-entry-id",
659 "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.VlanVid",
660 fieldMatch.get(1).getMatchType().getName());
661 property = feature.getTableProperties().getTableFeatureProperties().get(3);
662 Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types."
663 + "rev131026.table.feature.prop.type.table.feature.prop.type.WriteSetfieldMiss",
664 property.getTableFeaturePropType().implementedInterface().getName());
665 WriteSetfieldMiss propType8 = (WriteSetfieldMiss) property.getTableFeaturePropType();
666 fieldMatch = propType8.getWriteSetfieldMiss().getSetFieldMatch();
667 Assert.assertEquals("Wrong match-entry-ids size", 2, fieldMatch.size());
668 Assert.assertEquals("Wrong match-entry-id",
669 "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.VlanPcp",
670 fieldMatch.get(0).getMatchType().getName());
671 Assert.assertEquals("Wrong match-entry-id",
672 "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TcpSrc",
673 fieldMatch.get(1).getMatchType().getName());
674 property = feature.getTableProperties().getTableFeatureProperties().get(4);
675 Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types."
676 + "rev131026.table.feature.prop.type.table.feature.prop.type.ApplySetfieldMiss",
677 property.getTableFeaturePropType().implementedInterface().getName());
678 ApplySetfieldMiss propType9 = (ApplySetfieldMiss) property.getTableFeaturePropType();
679 fieldMatch = propType9.getApplySetfieldMiss().getSetFieldMatch();
680 Assert.assertEquals("Wrong match-entry-ids size", 2, fieldMatch.size());
681 Assert.assertEquals("Wrong match-entry-id",
682 "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.UdpSrc",
683 fieldMatch.get(0).getMatchType().getName());
684 Assert.assertEquals("Wrong match-entry-id",
685 "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.UdpDst",
686 fieldMatch.get(1).getMatchType().getName());
687 property = feature.getTableProperties().getTableFeatureProperties().get(5);
688 Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types."
689 + "rev131026.table.feature.prop.type.table.feature.prop.type.Wildcards",
690 property.getTableFeaturePropType().implementedInterface().getName());
691 Wildcards propType10 = (Wildcards) property.getTableFeaturePropType();
692 fieldMatch = propType10.getWildcardSetfield().getSetFieldMatch();
693 Assert.assertEquals("Wrong match-entry-ids size", 2, fieldMatch.size());
694 Assert.assertEquals("Wrong match-entry-id",
695 "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.EthSrc",
696 fieldMatch.get(0).getMatchType().getName());
697 Assert.assertEquals("Wrong match-entry-id",
698 "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.EthDst",
699 fieldMatch.get(1).getMatchType().getName());
701 property = feature.getTableProperties().getTableFeatureProperties().get(6);
702 Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types."
703 + "rev131026.table.feature.prop.type.table.feature.prop.type.ApplyActions",
704 property.getTableFeaturePropType().implementedInterface().getName());
705 org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop
706 .type.ApplyActions propType11 = (org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table
707 .feature.prop.type.table.feature.prop.type.ApplyActions) property.getTableFeaturePropType();
708 List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action> actionsList =
709 propType11.getApplyActions().getAction();
710 Assert.assertEquals("Wrong actions-ids size", 3, actionsList.size());
711 Assert.assertEquals("Wrong actions-id",
712 "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwSrcActionCase",
713 actionsList.get(0).getAction().implementedInterface().getName());
714 Assert.assertEquals("Wrong actions-id",
715 "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwSrcActionCase",
716 actionsList.get(1).getAction().implementedInterface().getName());
717 Assert.assertEquals("Wrong actions-id",
718 "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwSrcActionCase",
719 actionsList.get(2).getAction().implementedInterface().getName());
721 property = feature.getTableProperties().getTableFeatureProperties().get(7);
722 Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types."
723 + "rev131026.table.feature.prop.type.table.feature.prop.type.ApplyActionsMiss",
724 property.getTableFeaturePropType().implementedInterface().getName());
725 org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop
726 .type.ApplyActionsMiss propType12 = (org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026
727 .table.feature.prop.type.table.feature.prop.type.ApplyActionsMiss) property.getTableFeaturePropType();
728 actionsList = propType12.getApplyActionsMiss().getAction();
729 Assert.assertEquals("Wrong actions-ids size", 3, actionsList.size());
730 Assert.assertEquals("Wrong actions-id",
731 "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCase",
732 actionsList.get(0).getAction().implementedInterface().getName());
733 Assert.assertEquals("Wrong actions-id",
734 "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlInCase",
735 actionsList.get(1).getAction().implementedInterface().getName());
736 Assert.assertEquals("Wrong actions-id",
737 "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlOutCase",
738 actionsList.get(2).getAction().implementedInterface().getName());
739 property = feature.getTableProperties().getTableFeatureProperties().get(8);
740 Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types."
741 + "rev131026.table.feature.prop.type.table.feature.prop.type.WriteActions",
742 property.getTableFeaturePropType().implementedInterface().getName());
744 org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop
745 .type.WriteActions propType13 = (org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table
746 .feature.prop.type.table.feature.prop.type.WriteActions) property.getTableFeaturePropType();
747 actionsList = propType13.getWriteActions().getAction();
748 Assert.assertEquals("Wrong actions-ids size", 3, actionsList.size());
749 Assert.assertEquals("Wrong actions-id",
750 "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetMplsTtlActionCase",
751 actionsList.get(0).getAction().implementedInterface().getName());
752 Assert.assertEquals("Wrong actions-id",
753 "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecMplsTtlCase",
754 actionsList.get(1).getAction().implementedInterface().getName());
755 Assert.assertEquals("Wrong actions-id",
756 "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushVlanActionCase",
757 actionsList.get(2).getAction().implementedInterface().getName());
758 property = feature.getTableProperties().getTableFeatureProperties().get(9);
759 Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types."
760 + "rev131026.table.feature.prop.type.table.feature.prop.type.WriteActionsMiss",
761 property.getTableFeaturePropType().implementedInterface().getName());
763 org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop
764 .type.WriteActionsMiss propType14 = (org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026
765 .table.feature.prop.type.table.feature.prop.type.WriteActionsMiss) property.getTableFeaturePropType();
766 actionsList = propType14.getWriteActionsMiss().getAction();
767 Assert.assertEquals("Wrong actions-ids size", 3, actionsList.size());
768 Assert.assertEquals("Wrong actions-id",
769 "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionCase",
770 actionsList.get(0).getAction().implementedInterface().getName());
771 Assert.assertEquals("Wrong actions-id",
772 "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushPbbActionCase",
773 actionsList.get(1).getAction().implementedInterface().getName());
774 Assert.assertEquals("Wrong actions-id",
775 "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetFieldCase",
776 actionsList.get(2).getAction().implementedInterface().getName());
779 private static SetNwSrcCase createSetNwSrcAction() {
780 final SetNwSrcCaseBuilder setNwSrcCaseBuilder;
781 final SetNwSrcActionBuilder setNwSrcActionBuilder;
782 setNwSrcCaseBuilder = new SetNwSrcCaseBuilder();
783 setNwSrcActionBuilder = new SetNwSrcActionBuilder();
784 setNwSrcActionBuilder.setIpAddress(new Ipv4Address("1.2.3.4"));
785 setNwSrcCaseBuilder.setSetNwSrcAction(setNwSrcActionBuilder.build());
786 return setNwSrcCaseBuilder.build();
789 private static GroupCase createGroupAction() {
790 final GroupCaseBuilder groupCaseBuilder = new GroupCaseBuilder();
791 final GroupActionBuilder groupActionBuilder = new GroupActionBuilder();
792 groupActionBuilder.setGroupId(42L);
793 groupCaseBuilder.setGroupAction(groupActionBuilder.build());
794 return groupCaseBuilder.build();
797 private static CopyTtlInCase createCopyTtlInCase() {
798 CopyTtlInCaseBuilder copyTtlInCaseBuilder = new CopyTtlInCaseBuilder();
799 return copyTtlInCaseBuilder.build();
802 private static CopyTtlOutCase createCopyTtlOutCase() {
803 CopyTtlOutCaseBuilder copyTtlInCaseBuilder = new CopyTtlOutCaseBuilder();
804 return copyTtlInCaseBuilder.build();
807 private static SetMplsTtlCase createSetMplsTtlCase() {
808 SetMplsTtlCaseBuilder setMplsTtlCaseBuilder = new SetMplsTtlCaseBuilder();
809 SetMplsTtlActionBuilder setMplsTtlActionBuilder = new SetMplsTtlActionBuilder();
810 setMplsTtlActionBuilder.setMplsTtl((short) 42);
811 setMplsTtlCaseBuilder.setSetMplsTtlAction(setMplsTtlActionBuilder.build());
812 return setMplsTtlCaseBuilder.build();
815 private static DecMplsTtlCase createDecMplsTtlCase() {
816 DecMplsTtlCaseBuilder decMplsTtlCaseBuilder = new DecMplsTtlCaseBuilder();
817 return decMplsTtlCaseBuilder.build();
820 private static PushVlanCase pushVlanCase() {
821 PushVlanCaseBuilder pushVlanCaseBuilder = new PushVlanCaseBuilder();
822 PushVlanActionBuilder pushVlanActionBuilder = new PushVlanActionBuilder();
823 pushVlanActionBuilder.setEthertype(new EtherType(1));
824 pushVlanCaseBuilder.setPushVlanAction(pushVlanActionBuilder.build());
825 return pushVlanCaseBuilder.build();
828 private static PopVlanCase createPopVlanCase() {
829 PopVlanCaseBuilder popVlanCaseBuilder = new PopVlanCaseBuilder();
830 return popVlanCaseBuilder.build();
833 private static PushPbbCase createPushPbbCase() {
834 PushPbbCaseBuilder pushPbbCaseBuilder = new PushPbbCaseBuilder();
835 PushPbbActionBuilder pushPbbActionBuilder = new PushPbbActionBuilder();
836 pushPbbActionBuilder.setEthertype(new EtherType(1));
837 pushPbbCaseBuilder.setPushPbbAction(pushPbbActionBuilder.build());
838 return pushPbbCaseBuilder.build();
841 private static SetFieldCase createEmptySetFieldCase() {
842 SetFieldCaseBuilder setFieldCaseBuilder = new SetFieldCaseBuilder();
843 SetFieldActionBuilder setFieldActionBuilder = new SetFieldActionBuilder();
844 List<MatchEntry> matchEntries = new ArrayList<>();
845 MatchEntryBuilder matchEntryBuilder = new MatchEntryBuilder();
847 matchEntries.add(matchEntryBuilder.build());
848 setFieldActionBuilder.setMatchEntry(matchEntries);
849 setFieldCaseBuilder.setSetFieldAction(setFieldActionBuilder.build());
850 return setFieldCaseBuilder.build();
854 private List<TableFeatures> convert(final MultipartReplyTableFeatures features) {
855 Optional<List<TableFeatures>> listOptional =
856 convertorManager.convert(features, new VersionConvertorData(OFConstants.OFP_VERSION_1_3));
857 return listOptional.orElse(Collections.emptyList());