Bug 5540 - TableFeaturesConvertor
[openflowplugin.git] / openflowplugin / src / test / java / org / opendaylight / openflowplugin / openflow / md / core / sal / convertor / TableFeaturesConvertorTest.java
1 /*
2  * Copyright (c) 2014 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
10
11 import static org.mockito.Mockito.when;
12
13 import java.math.BigInteger;
14 import java.util.ArrayList;
15 import java.util.Collections;
16 import java.util.HashMap;
17 import java.util.List;
18 import java.util.Map;
19 import java.util.Map.Entry;
20 import java.util.Optional;
21 import junit.framework.TestCase;
22 import org.junit.Before;
23 import org.junit.Test;
24 import org.junit.runner.RunWith;
25 import org.mockito.Mock;
26 import org.mockito.runners.MockitoJUnitRunner;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlInCaseBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlOutCaseBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecMplsTtlCaseBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecNwTtlCaseBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCaseBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCaseBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopMplsActionCaseBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopPbbActionCaseBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionCaseBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushMplsActionCaseBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushPbbActionCaseBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushVlanActionCaseBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetFieldCaseBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetMplsTtlActionCaseBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwTtlActionCaseBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetQueueActionCaseBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCaseBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ClearActionsCaseBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.GoToTableCaseBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.MeterCaseBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.WriteActionsCaseBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.WriteMetadataCaseBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.Instruction;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list.InstructionBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TableConfig;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TableFeatures;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.set.field.match.SetFieldMatchBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.TableFeaturePropType;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplyActions;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplyActionsBuilder;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplyActionsMiss;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplyActionsMissBuilder;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplySetfield;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplySetfieldBuilder;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplySetfieldMiss;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplySetfieldMissBuilder;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.Instructions;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.InstructionsBuilder;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.InstructionsMiss;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.InstructionsMissBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.Match;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.MatchBuilder;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.NextTable;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.NextTableBuilder;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.NextTableMiss;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.NextTableMissBuilder;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.Wildcards;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WildcardsBuilder;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteActions;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteActionsBuilder;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteActionsMiss;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteActionsMissBuilder;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteSetfield;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteSetfieldBuilder;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteSetfieldMiss;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteSetfieldMissBuilder;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.table.features.TableProperties;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.table.features.TablePropertiesBuilder;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.table.features.table.properties.TableFeatureProperties;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.table.features.table.properties.TableFeaturePropertiesBuilder;
88
89 @RunWith(MockitoJUnitRunner.class)
90 public class TableFeaturesConvertorTest extends TestCase {
91
92     @Mock
93     private TableFeatures tableFeatures;
94     private static final TablePropertiesBuilder tablePropertiesBuilder = new TablePropertiesBuilder();
95     private static final Map<Class<? extends TableFeaturePropType>, TableFeaturePropType> augmentationsMap = new HashMap<>();
96     private static final List<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.Instruction> instructionsList = new ArrayList<>();
97     private static final List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action> actions = new ArrayList<>();
98     private static final List<org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.set.field.match.SetFieldMatch> fieldTableFeatures = new ArrayList<>();
99
100     private static void setupInstructionsList() {
101         instructionsList.add(new GoToTableCaseBuilder().build());
102         instructionsList.add(new WriteMetadataCaseBuilder().build());
103         instructionsList.add(new WriteActionsCaseBuilder().build());
104         instructionsList.add(new ApplyActionsCaseBuilder().build());
105         instructionsList.add(new ClearActionsCaseBuilder().build());
106         instructionsList.add(new MeterCaseBuilder().build());
107     }
108
109     private static void setupFieldTableFeatures() {
110         SetFieldMatchBuilder setFieldMatchBuilder = new SetFieldMatchBuilder();
111         setFieldMatchBuilder.setHasMask(true);
112         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.ArpOp.class);
113         fieldTableFeatures.add(setFieldMatchBuilder.build());
114         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.ArpSha.class);
115         fieldTableFeatures.add(setFieldMatchBuilder.build());
116         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.ArpSpa.class);
117         fieldTableFeatures.add(setFieldMatchBuilder.build());
118         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.ArpTha.class);
119         fieldTableFeatures.add(setFieldMatchBuilder.build());
120         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.ArpTpa.class);
121         fieldTableFeatures.add(setFieldMatchBuilder.build());
122         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.EthDst.class);
123         fieldTableFeatures.add(setFieldMatchBuilder.build());
124         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.EthSrc.class);
125         fieldTableFeatures.add(setFieldMatchBuilder.build());
126         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.EthType.class);
127         fieldTableFeatures.add(setFieldMatchBuilder.build());
128         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Icmpv4Code.class);
129         fieldTableFeatures.add(setFieldMatchBuilder.build());
130         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Icmpv4Type.class);
131         fieldTableFeatures.add(setFieldMatchBuilder.build());
132         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Icmpv6Code.class);
133         fieldTableFeatures.add(setFieldMatchBuilder.build());
134         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Icmpv6Type.class);
135         fieldTableFeatures.add(setFieldMatchBuilder.build());
136         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.InPhyPort.class);
137         fieldTableFeatures.add(setFieldMatchBuilder.build());
138         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.InPort.class);
139         fieldTableFeatures.add(setFieldMatchBuilder.build());
140         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.IpDscp.class);
141         fieldTableFeatures.add(setFieldMatchBuilder.build());
142         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.IpEcn.class);
143         fieldTableFeatures.add(setFieldMatchBuilder.build());
144         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.IpProto.class);
145         fieldTableFeatures.add(setFieldMatchBuilder.build());
146         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv4Dst.class);
147         fieldTableFeatures.add(setFieldMatchBuilder.build());
148         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv4Src.class);
149         fieldTableFeatures.add(setFieldMatchBuilder.build());
150         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv6Dst.class);
151         fieldTableFeatures.add(setFieldMatchBuilder.build());
152         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv6Exthdr.class);
153         fieldTableFeatures.add(setFieldMatchBuilder.build());
154         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv6Flabel.class);
155         fieldTableFeatures.add(setFieldMatchBuilder.build());
156         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv6NdSll.class);
157         fieldTableFeatures.add(setFieldMatchBuilder.build());
158         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv6NdTarget.class);
159         fieldTableFeatures.add(setFieldMatchBuilder.build());
160         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv6NdTll.class);
161         fieldTableFeatures.add(setFieldMatchBuilder.build());
162         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv6Src.class);
163         fieldTableFeatures.add(setFieldMatchBuilder.build());
164         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Metadata.class);
165         fieldTableFeatures.add(setFieldMatchBuilder.build());
166         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.MplsBos.class);
167         fieldTableFeatures.add(setFieldMatchBuilder.build());
168         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.MplsLabel.class);
169         fieldTableFeatures.add(setFieldMatchBuilder.build());
170         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.MplsTc.class);
171         fieldTableFeatures.add(setFieldMatchBuilder.build());
172         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.PbbIsid.class);
173         fieldTableFeatures.add(setFieldMatchBuilder.build());
174         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.SctpDst.class);
175         fieldTableFeatures.add(setFieldMatchBuilder.build());
176         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.SctpSrc.class);
177         fieldTableFeatures.add(setFieldMatchBuilder.build());
178         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TcpDst.class);
179         fieldTableFeatures.add(setFieldMatchBuilder.build());
180         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TcpSrc.class);
181         fieldTableFeatures.add(setFieldMatchBuilder.build());
182         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TunnelId.class);
183         fieldTableFeatures.add(setFieldMatchBuilder.build());
184         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.UdpDst.class);
185         fieldTableFeatures.add(setFieldMatchBuilder.build());
186         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.UdpDst.class);
187         fieldTableFeatures.add(setFieldMatchBuilder.build());
188         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.VlanPcp.class);
189         fieldTableFeatures.add(setFieldMatchBuilder.build());
190         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.VlanVid.class);
191         fieldTableFeatures.add(setFieldMatchBuilder.build());
192         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TcpFlags.class);
193         fieldTableFeatures.add(setFieldMatchBuilder.build());
194         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TunnelIpv4Dst.class);
195         fieldTableFeatures.add(setFieldMatchBuilder.build());
196         setFieldMatchBuilder.setMatchType(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TunnelIpv4Src.class);
197         fieldTableFeatures.add(setFieldMatchBuilder.build());
198     }
199
200     private static void setupActions() {
201         org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder _actionBuilder = new ActionBuilder();
202
203         OutputActionCaseBuilder outputActionCaseBuilder = new OutputActionCaseBuilder();
204         actions.add(_actionBuilder.setAction(outputActionCaseBuilder.build()).build());
205
206         GroupActionCaseBuilder groupActionCaseBuilder = new GroupActionCaseBuilder();
207         actions.add(_actionBuilder.setAction(groupActionCaseBuilder.build()).build());
208
209         CopyTtlOutCaseBuilder copyTtlOutCaseBuilder = new CopyTtlOutCaseBuilder();
210         actions.add(_actionBuilder.setAction(copyTtlOutCaseBuilder.build()).build());
211
212         CopyTtlInCaseBuilder copyTtlInCaseBuilder = new CopyTtlInCaseBuilder();
213         actions.add(_actionBuilder.setAction(copyTtlInCaseBuilder.build()).build());
214
215         SetMplsTtlActionCaseBuilder setMplsTtlActionCaseBuilder = new SetMplsTtlActionCaseBuilder();
216         actions.add(_actionBuilder.setAction(setMplsTtlActionCaseBuilder.build()).build());
217
218         DecMplsTtlCaseBuilder decMplsTtlCaseBuilder = new DecMplsTtlCaseBuilder();
219         actions.add(_actionBuilder.setAction(decMplsTtlCaseBuilder.build()).build());
220
221         PushVlanActionCaseBuilder pushVlanActionCaseBuilder = new PushVlanActionCaseBuilder();
222         actions.add(_actionBuilder.setAction(pushVlanActionCaseBuilder.build()).build());
223
224         PopVlanActionCaseBuilder popVlanActionCaseBuilder = new PopVlanActionCaseBuilder();
225         actions.add(_actionBuilder.setAction(popVlanActionCaseBuilder.build()).build());
226
227         PushMplsActionCaseBuilder pushMplsActionCaseBuilder = new PushMplsActionCaseBuilder();
228         actions.add(_actionBuilder.setAction(pushMplsActionCaseBuilder.build()).build());
229
230         PopMplsActionCaseBuilder popMplsActionCaseBuilder = new PopMplsActionCaseBuilder();
231         actions.add(_actionBuilder.setAction(popMplsActionCaseBuilder.build()).build());
232
233         SetQueueActionCaseBuilder setQueueActionCaseBuilder = new SetQueueActionCaseBuilder();
234         actions.add(_actionBuilder.setAction(setQueueActionCaseBuilder.build()).build());
235
236         SetNwTtlActionCaseBuilder setNwTtlActionCaseBuilder = new SetNwTtlActionCaseBuilder();
237         actions.add(_actionBuilder.setAction(setNwTtlActionCaseBuilder.build()).build());
238
239         DecNwTtlCaseBuilder decNwTtlCaseBuilder = new DecNwTtlCaseBuilder();
240         actions.add(_actionBuilder.setAction(decNwTtlCaseBuilder.build()).build());
241
242         SetFieldCaseBuilder setFieldCaseBuilder = new SetFieldCaseBuilder();
243         actions.add(_actionBuilder.setAction(setFieldCaseBuilder.build()).build());
244
245         PushPbbActionCaseBuilder pushPbbActionCaseBuilder = new PushPbbActionCaseBuilder();
246         actions.add(_actionBuilder.setAction(pushPbbActionCaseBuilder.build()).build());
247
248         PopPbbActionCaseBuilder popPbbActionCaseBuilder = new PopPbbActionCaseBuilder();
249         actions.add(_actionBuilder.setAction(popPbbActionCaseBuilder.build()).build());
250
251     }
252
253     @Before
254     public void setupTest() {
255         setupInstructionsList();
256         setupActions();
257         setupFieldTableFeatures();
258         InstructionsBuilder instructionsBuilder = new InstructionsBuilder();
259         List<Instruction> instructions = new ArrayList<>();
260         for (int i = 0; i < instructionsList.size(); i++) {
261             InstructionBuilder instructionBuilder = new InstructionBuilder();
262             instructionBuilder.setInstruction(instructionsList.get(i));
263             instructions.add(instructionBuilder.build());
264         }
265         org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.instructions.InstructionsBuilder instructionsBuilder1 = new org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.instructions.InstructionsBuilder();
266         instructionsBuilder1.setInstruction(instructions);
267         instructionsBuilder.setInstructions(instructionsBuilder1.build());
268
269         augmentationsMap.put(Instructions.class, instructionsBuilder.build());
270
271         InstructionsMissBuilder instructionsMissBuilder = new InstructionsMissBuilder();
272         org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.instructions.miss.InstructionsMissBuilder instructionsMissBuilder1 = new org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.instructions.miss.InstructionsMissBuilder();
273         instructionsMissBuilder1.setInstruction(instructions);
274         instructionsMissBuilder.setInstructionsMiss(instructionsMissBuilder1.build());
275         augmentationsMap.put(InstructionsMiss.class, instructionsMissBuilder.build());
276
277         NextTableBuilder nextTableBuilder = new NextTableBuilder();
278         augmentationsMap.put(NextTable.class, nextTableBuilder.build());
279
280         NextTableMissBuilder nextTableMissBuilder = new NextTableMissBuilder();
281         augmentationsMap.put(NextTableMiss.class, nextTableMissBuilder.build());
282
283         WriteActionsBuilder writeActionsBuilder = new WriteActionsBuilder();
284         augmentationsMap.put(WriteActions.class, writeActionsBuilder.build());
285
286         WriteActionsMissBuilder writeActionsMissBuilder = new WriteActionsMissBuilder();
287         augmentationsMap.put(WriteActionsMiss.class, writeActionsMissBuilder.build());
288
289         ApplyActionsBuilder applyActionsBuilder = new ApplyActionsBuilder();
290         augmentationsMap.put(ApplyActions.class, applyActionsBuilder.build());
291
292         ApplyActionsMissBuilder applyActionsMissBuilder = new ApplyActionsMissBuilder();
293         org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.apply.actions.miss.ApplyActionsMissBuilder applyActionsMissBuilder1 = new org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.apply.actions.miss.ApplyActionsMissBuilder();
294         applyActionsMissBuilder1.setAction(actions);
295         applyActionsMissBuilder.setApplyActionsMiss(applyActionsMissBuilder1.build());
296         augmentationsMap.put(ApplyActionsMiss.class, applyActionsMissBuilder.build());
297
298         MatchBuilder matchBuilder = new MatchBuilder();
299         augmentationsMap.put(Match.class, matchBuilder.build());
300
301         WildcardsBuilder wildcardsBuilder = new WildcardsBuilder();
302         augmentationsMap.put(Wildcards.class, wildcardsBuilder.build());
303
304         WriteSetfieldBuilder writeSetfieldBuilder = new WriteSetfieldBuilder();
305         augmentationsMap.put(WriteSetfield.class, writeSetfieldBuilder.build());
306
307         WriteSetfieldMissBuilder writeSetfieldMissBuilder = new WriteSetfieldMissBuilder();
308         augmentationsMap.put(WriteSetfieldMiss.class, writeSetfieldMissBuilder.build());
309
310         ApplySetfieldBuilder applySetfieldBuilder = new ApplySetfieldBuilder();
311         org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.apply.setfield.ApplySetfieldBuilder applySetfieldBuilder1 = new org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.apply.setfield.ApplySetfieldBuilder();
312         applySetfieldBuilder1.setSetFieldMatch(fieldTableFeatures);
313         applySetfieldBuilder.setApplySetfield(applySetfieldBuilder1.build());
314         augmentationsMap.put(ApplySetfield.class, applySetfieldBuilder.build());
315
316         ApplySetfieldMissBuilder applySetfieldMissBuilder = new ApplySetfieldMissBuilder();
317         augmentationsMap.put(ApplySetfieldMiss.class, applySetfieldMissBuilder.build());
318     }
319
320     @Test
321     /**
322      * Basic functionality test method for {@link TableFeaturesConvertor#toTableFeaturesRequest(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TableFeatures)}
323      */
324     public void testToTableFeaturesRequest() throws Exception {
325         List<org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.TableFeatures> tableFeaturesList = new ArrayList<>();
326         org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.TableFeaturesBuilder tableFeaturesBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.TableFeaturesBuilder();
327         for (int i = 0; i < 10; i++) {
328             tableFeaturesBuilder.setTableId((short) i);
329             tableFeaturesBuilder.setName(String.format("table:%d", i));
330             tableFeaturesBuilder.setMetadataMatch(BigInteger.ONE);
331             tableFeaturesBuilder.setMetadataWrite(BigInteger.ONE);
332             tableFeaturesBuilder.setMaxEntries((long) 1 + (10 * i));
333             tableFeaturesBuilder.setConfig(new TableConfig(false));
334             tableFeaturesBuilder.setTableProperties(getTableProperties());
335             tableFeaturesList.add(tableFeaturesBuilder.build());
336         }
337         when(tableFeatures.getTableFeatures()).thenReturn(tableFeaturesList);
338         Optional<List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.table.features._case.multipart.request.table.features.TableFeatures>> tableFeaturesesOptional =
339                 ConvertorManager.getInstance().convert(tableFeatures);
340
341         List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.table.features._case.multipart.request.table.features.TableFeatures> tableFeatureses =
342                 tableFeaturesesOptional.orElse(Collections.emptyList());
343
344         assertNotNull(tableFeatures);
345         assertEquals(10, tableFeatures.getTableFeatures().size());
346         List<TableFeatureProperties> tableFeaturePropertieses = tableFeatures.getTableFeatures().get(0).getTableProperties().getTableFeatureProperties();
347         assertEquals(augmentationsMap.size() + 1, tableFeaturePropertieses.size());
348
349         org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplyActionsMiss applyActionsMiss = null;
350         for (int i = 0; i < tableFeaturePropertieses.size(); i++) {
351             if (tableFeaturePropertieses.get(i).getTableFeaturePropType().getImplementedInterface().isAssignableFrom(org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplyActionsMiss.class)) {
352                 applyActionsMiss = (org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplyActionsMiss) tableFeaturePropertieses.get(i).getTableFeaturePropType();
353                 break;
354             }
355         }
356
357         assertNotNull(applyActionsMiss);
358         assertEquals(actions.size(), applyActionsMiss.getApplyActionsMiss().getAction().size());
359
360     }
361
362     private static TableProperties getTableProperties() {
363         TableFeaturePropertiesBuilder tableFeaturePropertiesBuilder = new TableFeaturePropertiesBuilder();
364         List<TableFeatureProperties> tableFeaturePropertieses = new ArrayList<>();
365         int counter = 0;
366         for (Entry<Class<? extends TableFeaturePropType>, TableFeaturePropType> entry : augmentationsMap.entrySet()) {
367             counter++;
368             tableFeaturePropertiesBuilder.setTableFeaturePropType(entry.getValue());
369             tableFeaturePropertiesBuilder.setOrder(counter);
370             tableFeaturePropertieses.add(tableFeaturePropertiesBuilder.build());
371         }
372         tableFeaturePropertieses.add(tableFeaturePropertiesBuilder.build());
373         tablePropertiesBuilder.setTableFeatureProperties(tableFeaturePropertieses);
374         return tablePropertiesBuilder.build();
375     }
376 }