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