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