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