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