Merge "updated to use new constructor to create a copy of object instead of setting...
[openflowplugin.git] / openflowplugin / src / test / java / org / opendaylight / openflowplugin / openflow / md / core / sal / convertor / ActionConvertorTest.java
1 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
2
3 import java.util.ArrayList;
4 import java.util.List;
5
6 import junit.framework.Assert;
7
8 import org.junit.Test;
9 import org.opendaylight.controller.sal.action.PopVlan;
10 import org.opendaylight.controller.sal.core.NodeConnector.NodeConnectorIDType;
11 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlInBuilder;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlOutBuilder;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecMplsTtlBuilder;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecNwTtlBuilder;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionBuilder;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopMplsActionBuilder;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopPbbActionBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushMplsActionBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushPbbActionBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushVlanActionBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetFieldBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetMplsTtlActionBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwTtlActionBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetQueueActionBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.field.MatchBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthertypeAction;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.GroupIdAction;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaxLengthAction;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.OxmFieldsAction;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortAction;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortNumberMatchEntry;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.CopyTtlIn;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.CopyTtlOut;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.DecNwTtl;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Output;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PopMpls;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PushMpls;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PushPbb;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PushVlan;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetField;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetMplsTtl;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetNwTtl;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetQueue;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.ActionsList;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.InPort;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OpenflowBasicClass;
52
53 public class ActionConvertorTest {
54
55     List<Action> actions = new ArrayList<Action>();
56     static Integer actionItem = 0;
57
58     @Test
59     public void testActionConvertorwithallParameters() {
60         OutputActionData();
61         CopyTtlData();
62         MplsTtlActionData();
63         vlanActionData();
64         mplsActionData();
65         setQueueActionData();
66         setGroupAction();
67         NwTtlAction();
68         pbbActionData();
69         setFieldData();
70         setExperimenterData();
71         List<ActionsList> OFActionsList = ActionConvertor.getActionList(actions, (short) 0X4);
72
73         OutputActions(OFActionsList);
74
75     }
76
77     private void setExperimenterData() {
78
79         // TODO:SAL API Missing
80
81     }
82
83     private void setFieldData() {
84
85         SetFieldBuilder setFA = new SetFieldBuilder();
86
87         MatchBuilder matchBuilder = new MatchBuilder();
88
89         matchBuilder.setInPort(2125L);
90
91         SetFieldBuilder setFB = new SetFieldBuilder();
92         setFB.setMatch(matchBuilder.build());
93
94         ActionBuilder AB = new ActionBuilder();
95         AB.setAction(setFB.build());
96
97         actions.add(actionItem++, AB.build());
98
99     }
100
101     private void pbbActionData() {
102         PushPbbActionBuilder pushpbb = new PushPbbActionBuilder();
103         pushpbb.setEthernetType(10);
104
105         ActionBuilder AB = new ActionBuilder();
106         AB.setAction(pushpbb.build());
107
108         actions.add(actionItem++, AB.build());
109
110         PopPbbActionBuilder popPBB = new PopPbbActionBuilder();
111
112         ActionBuilder AB1 = new ActionBuilder();
113         AB1.setAction(popPBB.build());
114
115         actions.add(actionItem++, AB1.build());
116
117     }
118
119     private void NwTtlAction() {
120         SetNwTtlActionBuilder setNwTtlActionBuilder = new SetNwTtlActionBuilder();
121
122         setNwTtlActionBuilder.setNwTtl((short) 1);
123         ActionBuilder AB = new ActionBuilder();
124         AB.setAction(setNwTtlActionBuilder.build());
125
126         actions.add(actionItem++, AB.build());
127
128         DecNwTtlBuilder necNwTtlBuilder = new DecNwTtlBuilder();
129
130
131         ActionBuilder AB1 = new ActionBuilder();
132         AB1.setAction(necNwTtlBuilder.build());
133
134         actions.add(actionItem++, AB1.build());
135
136     }
137
138     private void setGroupAction() {
139
140         GroupActionBuilder grpIdAB = new GroupActionBuilder();
141         grpIdAB.setGroup("98");
142
143         ActionBuilder AB = new ActionBuilder();
144         AB.setAction(grpIdAB.build());
145
146         actions.add(actionItem++, AB.build());
147
148     }
149
150     private void OutputActions(List<ActionsList> oFActionsList) {
151
152         for (int item = 0; item < oFActionsList.size(); item++) {
153
154             org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.Action action = oFActionsList
155                     .get(item).getAction();
156
157             if (action.getType().equals(Output.class)) {
158                 Assert.assertEquals((Integer) 10, (action.getAugmentation(MaxLengthAction.class)).getMaxLength());
159                 long port = 4294967293L;
160                 Assert.assertEquals(port, (long) (action.getAugmentation(PortAction.class)).getPort().getValue());
161
162
163             }
164             if (action.getType().equals(CopyTtlIn.class)) {
165                 Assert.assertEquals(action.getType(), CopyTtlIn.class);
166
167             }
168             if (action.getType().equals(CopyTtlOut.class)) {
169
170                 Assert.assertEquals(action.getType(),
171                         org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.CopyTtlOut.class);
172
173             }
174
175             if (action.getType().equals(
176             // TODO:getMplsTtl is missing.
177                     SetMplsTtl.class)) {
178                 Assert.assertEquals(action.getType(), SetMplsTtl.class);
179
180             }
181             if (action.getType().equals(
182                     org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.DecMplsTtl.class)) {
183                 Assert.assertEquals(action.getType(),
184                         org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.DecMplsTtl.class);
185
186             }
187
188             if (action.getType().equals(PushMpls.class)) {
189
190                 EthertypeAction etherTypeAction = action
191                         .getAugmentation(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthertypeAction.class);
192
193                 if (etherTypeAction != null) {
194
195
196                     Assert.assertEquals((Integer) 10, etherTypeAction.getEthertype().getValue());
197                 }
198             }
199
200             if (action.getType().equals(PopMpls.class)) {
201                 Assert.assertEquals((Integer) 10, (action.getAugmentation(EthertypeAction.class)).getEthertype()
202                         .getValue());
203
204             }
205
206             if (action.getType().equals(
207
208             // TODO:SetQueue,I dont have getQueueId
209                     SetQueue.class)) {
210                 Assert.assertEquals(action.getType(), SetQueue.class);
211             }
212
213             if (action.getType().equals(
214
215             GroupIdAction.class)) {
216
217                 Assert.assertEquals(98, (long) (action.getAugmentation(GroupIdAction.class)).getGroupId());
218
219             }
220
221             if (action.getType().equals(
222
223                     PushVlan.class)) {
224
225                 Assert.assertEquals(action.getType(), PushVlan.class);
226
227                     }
228             if (action.getType().equals(
229
230             PopVlan.class)) {
231
232                 Assert.assertEquals(action.getType(), PopVlan.class);
233
234             }
235
236             if (action.getType().equals(
237
238             SetNwTtl.class)) {
239
240                 Assert.assertEquals(action.getType(), SetNwTtl.class);
241
242             }
243             if (action.getType().equals(
244
245             DecNwTtl.class)) {
246
247                 Assert.assertEquals(action.getType(), SetNwTtl.class);
248
249             }
250             if (action.getType().equals(PushPbb.class)) {
251
252                 EthertypeAction etherTypeAction = action
253                         .getAugmentation(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthertypeAction.class);
254
255                 if (etherTypeAction != null) {
256
257                     Assert.assertEquals((Integer) 10, etherTypeAction.getEthertype().getValue());
258                 }
259             }
260
261             if (action.getType().equals(PopMpls.class)) {
262                 Assert.assertEquals(action.getType(), PopMpls.class);
263
264             }
265
266             if (action.getType().equals(SetField.class)) {
267
268                 OxmFieldsAction sf = action.getAugmentation(OxmFieldsAction.class);
269
270                 Assert.assertEquals(OpenflowBasicClass.class, sf.getMatchEntries().get(0).getOxmClass());
271
272                 if (sf.getMatchEntries().get(0).getOxmMatchField().equals(InPort.class)) {
273                     Assert.assertEquals(2125, sf.getMatchEntries().get(0).getAugmentation(PortNumberMatchEntry.class)
274                             .getPortNumber().getValue().intValue());
275
276
277                     }
278
279             }
280
281         }
282
283     }
284
285     private void OutputActionData() {
286
287         org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionBuilder outputB = new org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionBuilder();
288         outputB.setMaxLength(10);
289         Uri uri = new Uri(NodeConnectorIDType.CONTROLLER);
290         outputB.setOutputNodeConnector(uri);
291
292         ActionBuilder AB = new ActionBuilder();
293         AB.setAction(outputB.build());
294
295         actions.add(actionItem++, AB.build());
296
297     }
298
299     private void CopyTtlData() {
300         CopyTtlOutBuilder copyB = new CopyTtlOutBuilder();
301
302         ActionBuilder AB = new ActionBuilder();
303         AB.setAction(copyB.build());
304
305         actions.add(actionItem++, AB.build());
306
307         CopyTtlInBuilder copyTtlInBuilder = new CopyTtlInBuilder();
308
309         ActionBuilder AB1 = new ActionBuilder();
310         AB1.setAction(copyTtlInBuilder.build());
311
312         actions.add(actionItem++, AB1.build());
313
314     }
315
316     private void MplsTtlActionData() {
317
318         SetMplsTtlActionBuilder setMplsTtlActionB = new SetMplsTtlActionBuilder();
319
320         setMplsTtlActionB.setMplsTtl((short) 10);
321         ActionBuilder AB1 = new ActionBuilder();
322         AB1.setAction(setMplsTtlActionB.build());
323
324         actions.add(actionItem++, AB1.build());
325
326         DecMplsTtlBuilder decMplsTtlB = new DecMplsTtlBuilder();
327
328         ActionBuilder AB = new ActionBuilder();
329         AB.setAction(decMplsTtlB.build());
330
331         actions.add(actionItem++, AB1.build());
332     }
333
334     private void vlanActionData() {
335         PushVlanActionBuilder pvB = new PushVlanActionBuilder();
336
337         pvB.setVlanId(new VlanId(10));
338
339         ActionBuilder AB1 = new ActionBuilder();
340         AB1.setAction(pvB.build());
341
342         actions.add(actionItem++, AB1.build());
343
344         PopVlanActionBuilder popVAB = new PopVlanActionBuilder();
345
346         ActionBuilder AB = new ActionBuilder();
347         AB.setAction(popVAB.build());
348
349         actions.add(actionItem++, AB.build());
350
351     }
352
353     private void mplsActionData() {
354
355         PushMplsActionBuilder pushMB = new PushMplsActionBuilder();
356         pushMB.setEthernetType(10);
357
358         ActionBuilder AB = new ActionBuilder();
359         AB.setAction(pushMB.build());
360
361         actions.add(actionItem++, AB.build());
362
363         PopMplsActionBuilder popMB = new PopMplsActionBuilder();
364         popMB.setEthernetType(10);
365
366         ActionBuilder AB1 = new ActionBuilder();
367         AB1.setAction(popMB.build());
368
369         actions.add(actionItem++, AB1.build());
370     }
371
372     private void setQueueActionData() {
373
374         SetQueueActionBuilder setQB = new SetQueueActionBuilder();
375         setQB.setQueue("99");
376
377         ActionBuilder AB1 = new ActionBuilder();
378         AB1.setAction(setQB.build());
379
380         actions.add(actionItem++, AB1.build());
381
382     }
383
384 }