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