7e8be640a350efc49fa64fb038a1dc6eba1fd935
[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.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;
109
110 /**
111  * Unit tests for table features response conversions.
112  *
113  * @author michal.polkorab
114  */
115 public class TableFeaturesResponseConvertorTest {
116     private ConvertorManager convertorManager;
117
118     @Before
119     public void setUp() {
120         convertorManager = ConvertorManagerFactory.createDefaultManager();
121     }
122
123     /**
124      * Incorrect / empty input test.
125      */
126     @Test
127     public void test() {
128         List<TableFeatures> list = convert(null);
129         Assert.assertEquals("Returned list is not empty", 0, list.size());
130     }
131
132     /**
133      * Incorrect / empty input test.
134      */
135     @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());
140     }
141
142     /**
143      * Test correct input - without table properties.
144      */
145     @Test
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);
156
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());
161
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());
174     }
175
176     /**
177      * Test correct input.
178      */
179     @Test
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);
188
189         TableFeaturePropertiesBuilder propBuilder = new TableFeaturePropertiesBuilder();
190
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());
199
200         List<TableFeatureProperties> properties = new ArrayList<>();
201         properties.add(propBuilder.build());
202         propBuilder = new TableFeaturePropertiesBuilder();
203
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();
212
213         propBuilder.setType(TableFeaturesPropType.OFPTFPTINSTRUCTIONS);
214
215          /* -------------------------------------------------- */
216
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);
223
224         WriteActionsCaseBuilder writeActionsCaseBuilder = new WriteActionsCaseBuilder();
225         writeActionsCaseBuilder.setWriteActions(writeActionsBuilder.build());
226
227         InstructionBuilder insBuilder = new InstructionBuilder();
228         insBuilder.setInstructionChoice(writeActionsCaseBuilder.build());
229
230         List<Instruction> insIds = new ArrayList<>();
231         insIds.add(insBuilder.build());
232
233          /* -------------------------------------------------- */
234
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());
241
242         InstructionRelatedTableFeaturePropertyBuilder insPropBuilder =
243                 new InstructionRelatedTableFeaturePropertyBuilder();
244         insPropBuilder.setInstruction(insIds);
245         propBuilder.addAugmentation(InstructionRelatedTableFeatureProperty.class, insPropBuilder.build());
246         properties.add(propBuilder.build());
247
248          /* -------------------------------------------------- */
249
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());
260
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());
267
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());
274
275
276         insBuilder = new InstructionBuilder();
277         ClearActionsCaseBuilder clearActionsCaseBuilder = new ClearActionsCaseBuilder();
278         insBuilder.setInstructionChoice(clearActionsCaseBuilder.build());
279         insIds.add(insBuilder.build());
280
281
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());
288
289         insPropBuilder.setInstruction(insIds);
290         propBuilder.addAugmentation(InstructionRelatedTableFeatureProperty.class, insPropBuilder.build());
291         properties.add(propBuilder.build());
292         featuresBuilder.setTableFeatureProperties(properties);
293
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);
305
306         /* -------------------------------------------------- */
307
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);
315
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());
323
324         OxmRelatedTableFeaturePropertyBuilder oxmBuilder = new OxmRelatedTableFeaturePropertyBuilder();
325         oxmBuilder.setMatchEntry(entries);
326         propBuilder.addAugmentation(OxmRelatedTableFeatureProperty.class, oxmBuilder.build());
327         properties.add(propBuilder.build()); //[0]
328
329         /* -------------------------------------------------- */
330
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]
348
349         /* -------------------------------------------------- */
350
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]
368
369         /* -------------------------------------------------- */
370
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]
388
389         /* -------------------------------------------------- */
390
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());
400
401         entriesBuilder = new MatchEntryBuilder();
402         entriesBuilder.setOxmClass(OpenflowBasicClass.class);
403         entriesBuilder.setOxmMatchField(UdpDst.class);
404         entriesBuilder.setHasMask(false);
405         entries.add(entriesBuilder.build());
406
407         oxmBuilder.setMatchEntry(entries);
408         propBuilder.addAugmentation(OxmRelatedTableFeatureProperty.class, oxmBuilder.build());
409         properties.add(propBuilder.build());//[4]
410
411         /* -------------------------------------------------- */
412
413         propBuilder = new TableFeaturePropertiesBuilder();
414         propBuilder.setType(TableFeaturesPropType.OFPTFPTWILDCARDS);
415         oxmBuilder = new OxmRelatedTableFeaturePropertyBuilder();
416         entries = new ArrayList<>();
417
418         entriesBuilder = new MatchEntryBuilder();
419         entriesBuilder.setOxmClass(OpenflowBasicClass.class);
420         entriesBuilder.setOxmMatchField(EthSrc.class);
421         entriesBuilder.setHasMask(false);
422         entries.add(entriesBuilder.build());
423
424         entriesBuilder = new MatchEntryBuilder();
425         entriesBuilder.setOxmClass(OpenflowBasicClass.class);
426         entriesBuilder.setOxmMatchField(EthDst.class);
427         entriesBuilder.setHasMask(false);
428         entries.add(entriesBuilder.build());
429
430         oxmBuilder.setMatchEntry(entries);
431         propBuilder.addAugmentation(OxmRelatedTableFeatureProperty.class, oxmBuilder.build());
432         properties.add(propBuilder.build());//[5]
433
434         /* -------------------------------------------------- */
435
436         propBuilder = new TableFeaturePropertiesBuilder();
437         propBuilder.setType(TableFeaturesPropType.OFPTFPTAPPLYACTIONS);
438         actions = new ArrayList<>();
439
440         actionBuilder = new ActionBuilder();
441         actionBuilder.setActionChoice(createSetNwSrcAction());
442         actions.add(actionBuilder.build());
443
444         actionBuilder = new ActionBuilder();
445         actionBuilder.setActionChoice(createSetNwSrcAction());
446         actions.add(actionBuilder.build());
447
448         actionBuilder = new ActionBuilder();
449         actionBuilder.setActionChoice(createSetNwSrcAction());
450         actions.add(actionBuilder.build());
451
452         ActionRelatedTableFeaturePropertyBuilder actBuilder = new ActionRelatedTableFeaturePropertyBuilder();
453         actBuilder.setAction(actions);
454         propBuilder.addAugmentation(ActionRelatedTableFeatureProperty.class, actBuilder.build());
455         properties.add(propBuilder.build());//[6]
456
457         /* -------------------------------------------------- */
458
459         propBuilder = new TableFeaturePropertiesBuilder();
460         propBuilder.setType(TableFeaturesPropType.OFPTFPTAPPLYACTIONSMISS);
461         actBuilder = new ActionRelatedTableFeaturePropertyBuilder();
462
463         actions = new ArrayList<>();
464         actionBuilder = new ActionBuilder();
465         actionBuilder.setActionChoice(createGroupAction());
466         actions.add(actionBuilder.build());
467
468         actionBuilder = new ActionBuilder();
469         actionBuilder.setActionChoice(createCopyTtlInCase());
470         actions.add(actionBuilder.build());
471
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]
478
479         /* -------------------------------------------------- */
480         propBuilder = new TableFeaturePropertiesBuilder();
481         propBuilder.setType(TableFeaturesPropType.OFPTFPTWRITEACTIONS);
482         actBuilder = new ActionRelatedTableFeaturePropertyBuilder();
483
484         actions = new ArrayList<>();
485         actionBuilder = new ActionBuilder();
486         actionBuilder.setActionChoice(createSetMplsTtlCase());
487         actions.add(actionBuilder.build());
488
489         actionBuilder = new ActionBuilder();
490         actionBuilder.setActionChoice(createDecMplsTtlCase());
491         actions.add(actionBuilder.build());
492
493         actionBuilder = new ActionBuilder();
494         actionBuilder.setActionChoice(pushVlanCase());
495         actions.add(actionBuilder.build());
496         actBuilder.setAction(actions);
497
498         propBuilder.addAugmentation(ActionRelatedTableFeatureProperty.class, actBuilder.build());
499         properties.add(propBuilder.build());
500
501         /* -------------------------------------------------- */
502
503         propBuilder = new TableFeaturePropertiesBuilder();
504         propBuilder.setType(TableFeaturesPropType.OFPTFPTWRITEACTIONSMISS);
505         actBuilder = new ActionRelatedTableFeaturePropertyBuilder();
506
507         actions = new ArrayList<>();
508         actionBuilder = new ActionBuilder();
509         actionBuilder.setActionChoice(createPopVlanCase());
510         actions.add(actionBuilder.build());
511
512         actionBuilder = new ActionBuilder();
513         actionBuilder.setActionChoice(createPushPbbCase());
514         actions.add(actionBuilder.build());
515
516         actionBuilder = new ActionBuilder();
517         actionBuilder.setActionChoice(createEmptySetFieldCase());
518         actions.add(actionBuilder.build());
519         actBuilder.setAction(actions);
520
521         propBuilder.addAugmentation(ActionRelatedTableFeatureProperty.class, actBuilder.build());
522         properties.add(propBuilder.build());
523
524         /* -------------------------------------------------- */
525
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());
531
532         /* -------------------------------------------------- */
533
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());
539
540         /* -------------------------------------------------- */
541
542         featuresBuilder.setTableFeatureProperties(properties);
543         features.add(featuresBuilder.build());
544
545         MultipartReplyTableFeaturesBuilder builder = new MultipartReplyTableFeaturesBuilder();
546         builder.setTableFeatures(features);
547
548         List<TableFeatures> list = convert(builder.build());
549
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()
561                 .get(0);
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());
578
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());
615
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());
700
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());
720
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());
743
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());
762
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());
777     }
778
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();
787     }
788
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();
795     }
796
797     private static CopyTtlInCase createCopyTtlInCase() {
798         CopyTtlInCaseBuilder copyTtlInCaseBuilder = new CopyTtlInCaseBuilder();
799         return copyTtlInCaseBuilder.build();
800     }
801
802     private static CopyTtlOutCase createCopyTtlOutCase() {
803         CopyTtlOutCaseBuilder copyTtlInCaseBuilder = new CopyTtlOutCaseBuilder();
804         return copyTtlInCaseBuilder.build();
805     }
806
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();
813     }
814
815     private static DecMplsTtlCase createDecMplsTtlCase() {
816         DecMplsTtlCaseBuilder decMplsTtlCaseBuilder = new DecMplsTtlCaseBuilder();
817         return decMplsTtlCaseBuilder.build();
818     }
819
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();
826     }
827
828     private static PopVlanCase createPopVlanCase() {
829         PopVlanCaseBuilder popVlanCaseBuilder = new PopVlanCaseBuilder();
830         return popVlanCaseBuilder.build();
831     }
832
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();
839     }
840
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();
846
847         matchEntries.add(matchEntryBuilder.build());
848         setFieldActionBuilder.setMatchEntry(matchEntries);
849         setFieldCaseBuilder.setSetFieldAction(setFieldActionBuilder.build());
850         return setFieldCaseBuilder.build();
851     }
852
853
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());
858     }
859 }