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