Merge "Fix a raw type warning"
[openflowplugin.git] / openflowplugin / src / test / java / org / opendaylight / openflowplugin / openflow / md / core / sal / convertor / action / ActionConvertorTest.java
1 /*
2  * Copyright (c) 2014 Ericsson India Global Services Pvt Ltd. 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 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action;
9
10 import java.util.ArrayList;
11 import java.util.Collections;
12 import java.util.List;
13 import java.util.Optional;
14 import org.junit.Assert;
15 import org.junit.Test;
16 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManager;
17 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManagerFactory;
18 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action.data.ActionConvertorData;
19 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlInCaseBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlOutCaseBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecMplsTtlCaseBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecNwTtlCaseBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DropActionCaseBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCaseBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCaseBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopMplsActionCaseBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopPbbActionCaseBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionCaseBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushMplsActionCaseBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushPbbActionCaseBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushVlanActionCaseBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetFieldCaseBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetMplsTtlActionCaseBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwTtlActionCaseBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetQueueActionCaseBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.copy.ttl.in._case.CopyTtlInBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.copy.ttl.out._case.CopyTtlOutBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.dec.mpls.ttl._case.DecMplsTtlBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.dec.nw.ttl._case.DecNwTtlBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.group.action._case.GroupActionBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.output.action._case.OutputActionBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.mpls.action._case.PopMplsActionBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.pbb.action._case.PopPbbActionBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.vlan.action._case.PopVlanActionBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.mpls.action._case.PushMplsActionBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.pbb.action._case.PushPbbActionBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.vlan.action._case.PushVlanActionBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.field._case.SetFieldBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.mpls.ttl.action._case.SetMplsTtlActionBuilder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.ttl.action._case.SetNwTtlActionBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.queue.action._case.SetQueueActionBuilder;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.OutputPortValues;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.CopyTtlInCase;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.CopyTtlOutCase;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.DecMplsTtlCase;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.DecNwTtlCase;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.GroupCase;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.OutputActionCase;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PopMplsCase;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PopVlanCase;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PushMplsCase;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PushPbbCase;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PushVlanCase;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetFieldCase;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetMplsTtlCase;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetNwTtlCase;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetQueueCase;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.EtherType;
74 import org.opendaylight.yangtools.yang.common.Uint16;
75 import org.opendaylight.yangtools.yang.common.Uint32;
76 import org.opendaylight.yangtools.yang.common.Uint64;
77
78 /**
79  * test for {@link ActionConvertor}.
80  */
81 public class ActionConvertorTest {
82
83     List<Action> actions = new ArrayList<>();
84     static Integer actionItem = 0;
85
86     @Test
87     public void testActionConvertorwithallParameters() {
88         outputActionData();
89         copyTtlData();
90         mplsTtlActionData();
91         vlanActionData();
92         mplsActionData();
93         setQueueActionData();
94         setGroupAction();
95         nwTtlAction();
96         pbbActionData();
97         setFieldData();
98         setExperimenterData();
99         dropActionData();
100
101         ActionConvertorData data = new ActionConvertorData((short) 0X4);
102         data.setDatapathId(Uint64.ONE);
103         final ConvertorManager convertorManager = ConvertorManagerFactory.createDefaultManager();
104
105         Optional<List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping
106             .Action>> ofActionsList = convertorManager.convert(actions, data);
107
108         outputActions(ofActionsList.orElse(Collections.emptyList()));
109
110     }
111
112     private void setExperimenterData() {
113
114         // TODO:SAL API Missing
115
116     }
117
118     private void dropActionData() {
119         ActionBuilder actionBuilder = new ActionBuilder();
120         actionBuilder.setOrder(actionItem).setAction(new DropActionCaseBuilder().build());
121
122         actions.add(actionItem++, actionBuilder.build());
123
124     }
125
126     private void setFieldData() {
127
128         SetFieldBuilder matchBuilder = new SetFieldBuilder();
129
130         matchBuilder.setInPort(new NodeConnectorId("openflow:1:2125"));
131
132         SetFieldBuilder setFB = new SetFieldBuilder();
133
134         ActionBuilder actionBuilder = new ActionBuilder();
135         actionBuilder.setOrder(actionItem).setAction(new SetFieldCaseBuilder().setSetField(setFB.build()).build());
136
137         actions.add(actionItem++, actionBuilder.build());
138
139     }
140
141     private void pbbActionData() {
142         PushPbbActionBuilder pushpbb = new PushPbbActionBuilder();
143         pushpbb.setEthernetType(10);
144
145         ActionBuilder actionBuilder = new ActionBuilder();
146         actionBuilder.setOrder(actionItem).setAction(new PushPbbActionCaseBuilder()
147                 .setPushPbbAction(pushpbb.build()).build());
148
149         actions.add(actionItem++, actionBuilder.build());
150
151         PopPbbActionBuilder popPBB = new PopPbbActionBuilder();
152
153         ActionBuilder actionBuilder1 = new ActionBuilder();
154         actionBuilder1.setOrder(actionItem).setAction(new PopPbbActionCaseBuilder()
155                 .setPopPbbAction(popPBB.build()).build());
156
157         actions.add(actionItem++, actionBuilder1.build());
158
159     }
160
161     private void nwTtlAction() {
162         SetNwTtlActionBuilder setNwTtlActionBuilder = new SetNwTtlActionBuilder();
163
164         setNwTtlActionBuilder.setNwTtl((short) 1);
165         ActionBuilder actionBuilder = new ActionBuilder();
166         actionBuilder.setOrder(actionItem).setAction(new SetNwTtlActionCaseBuilder()
167                 .setSetNwTtlAction(setNwTtlActionBuilder.build()).build());
168
169         actions.add(actionItem++, actionBuilder.build());
170
171         DecNwTtlBuilder necNwTtlBuilder = new DecNwTtlBuilder();
172
173
174         ActionBuilder actionBuilder1 = new ActionBuilder();
175         actionBuilder1.setOrder(actionItem).setAction(
176                 new DecNwTtlCaseBuilder().setDecNwTtl(necNwTtlBuilder.build()).build());
177
178         actions.add(actionItem++, actionBuilder1.build());
179
180     }
181
182     private void setGroupAction() {
183
184         GroupActionBuilder grpIdAB = new GroupActionBuilder();
185         grpIdAB.setGroup("98");
186
187         ActionBuilder actionBuilder = new ActionBuilder();
188         actionBuilder.setOrder(actionItem).setAction(new GroupActionCaseBuilder()
189                 .setGroupAction(grpIdAB.build()).build());
190
191         actions.add(actionItem++, actionBuilder.build());
192
193     }
194
195     // TODO - check if this method is needed (private and never used locally) - see line 94
196
197     private static void outputActions(final List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common
198             .action.rev150203.actions.grouping.Action> ofActionsList) {
199
200         for (org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action
201                 action : ofActionsList) {
202             if (action.getActionChoice() instanceof OutputActionCase) {
203                 OutputActionCase outputActionCase = (OutputActionCase) action.getActionChoice();
204                 Assert.assertEquals(Uint16.valueOf(10), outputActionCase.getOutputAction().getMaxLength());
205                 Assert.assertEquals(Uint32.valueOf(4294967293L),
206                     outputActionCase.getOutputAction().getPort().getValue());
207             }
208             if (action.getActionChoice() instanceof CopyTtlInCase) {
209                 Assert.assertEquals(action.getActionChoice().implementedInterface().getName(),
210                         CopyTtlInCase.class.getName());
211
212             }
213             if (action.getActionChoice() instanceof CopyTtlOutCase) {
214                 Assert.assertEquals(action.getActionChoice().implementedInterface().getName(),
215                         CopyTtlOutCase.class.getName());
216             }
217
218             if (action.getActionChoice() instanceof SetMplsTtlCase) {
219                 Assert.assertEquals(action.getActionChoice().implementedInterface().getName(),
220                         SetMplsTtlCase.class.getName());
221
222             }
223             if (action.getActionChoice() instanceof DecMplsTtlCase) {
224                 Assert.assertEquals(action.getActionChoice().implementedInterface().getName(),
225                         DecMplsTtlCase.class.getName());
226             }
227
228             if (action.getActionChoice() instanceof PushMplsCase) {
229                 PushMplsCase pushMplsCase = (PushMplsCase) action.getActionChoice();
230                 EtherType etherType = pushMplsCase.getPushMplsAction().getEthertype();
231
232                 if (etherType != null) {
233                     Assert.assertEquals(10, etherType.getValue().toJava());
234                 }
235             }
236
237             if (action.getActionChoice() instanceof PopMplsCase) {
238                 PopMplsCase popMplsCase = (PopMplsCase) action.getActionChoice();
239                 Assert.assertEquals(10, popMplsCase.getPopMplsAction().getEthertype().getValue().toJava());
240             }
241
242             if (action.getActionChoice() instanceof SetQueueCase) {
243                 Assert.assertEquals(action.getActionChoice().implementedInterface().getName(),
244                         SetQueueCase.class.getName());
245             }
246
247             if (action.getActionChoice() instanceof GroupCase) {
248                 GroupCase groupCase = (GroupCase) action.getActionChoice();
249                 Assert.assertEquals(Uint32.valueOf(98), groupCase.getGroupAction().getGroupId());
250             }
251
252             if (action.getActionChoice() instanceof PushVlanCase) {
253                 Assert.assertEquals(action.getActionChoice().implementedInterface().getName(),
254                         PushVlanCase.class.getName());
255             }
256
257             if (action.getActionChoice() instanceof PopVlanCase) {
258                 Assert.assertEquals(action.getActionChoice().implementedInterface().getName(),
259                         PopVlanCase.class.getName());
260             }
261
262             if (action.getActionChoice() instanceof SetNwTtlCase) {
263                 Assert.assertEquals(action.getActionChoice().implementedInterface().getName(),
264                         SetNwTtlCase.class.getName());
265             }
266             if (action.getActionChoice() instanceof DecNwTtlCase) {
267                 Assert.assertEquals(action.getActionChoice().implementedInterface().getName(),
268                         DecNwTtlCase.class.getName());
269             }
270             if (action.getActionChoice() instanceof PushPbbCase) {
271                 PushPbbCase pushPbbCase = (PushPbbCase) action.getActionChoice();
272                 if (pushPbbCase.getPushPbbAction().getEthertype() != null) {
273                     Assert.assertEquals(10, pushPbbCase.getPushPbbAction().getEthertype().getValue().toJava());
274                 }
275             }
276
277             if (action.getActionChoice() instanceof PopMplsCase) {
278                 Assert.assertEquals(action.getActionChoice().implementedInterface().getName(),
279                         PopMplsCase.class.getName());
280             }
281             if (action.getActionChoice() instanceof SetFieldCase) {
282                 SetFieldCase setFieldCase = (SetFieldCase) action.getActionChoice();
283                 Assert.assertNotNull(setFieldCase.getSetFieldAction());
284
285 /*
286                 Assert.assertEquals(OpenflowBasicClass.class, sf.getMatchEntry().get(0).getOxmClass());
287
288                 if (sf.getMatchEntry().get(0).getOxmMatchField().equals(InPort.class)) {
289                     InPortCase inPortCase = ((InPortCase) sf.getMatchEntry().get(0).getMatchEntryValue());
290                     Assert.assertEquals(2125, inPortCase.getInPort().getPortNumber().getValue().intValue());
291
292                 }
293 */
294
295             }
296
297
298         }
299
300     }
301
302     private void outputActionData() {
303         OutputActionBuilder outputB = new OutputActionBuilder();
304         outputB.setMaxLength(10);
305         Uri uri = new Uri(OutputPortValues.CONTROLLER.toString());
306         outputB.setOutputNodeConnector(uri);
307
308         ActionBuilder actionBuilder = new ActionBuilder();
309         actionBuilder.setOrder(actionItem).setAction(new OutputActionCaseBuilder()
310                 .setOutputAction(outputB.build()).build());
311
312         actions.add(actionItem++, actionBuilder.build());
313
314     }
315
316     private void copyTtlData() {
317         CopyTtlOutBuilder copyB = new CopyTtlOutBuilder();
318
319         ActionBuilder actionBuilder = new ActionBuilder();
320         actionBuilder.setOrder(actionItem).setAction(new CopyTtlOutCaseBuilder().setCopyTtlOut(copyB.build()).build());
321
322         actions.add(actionItem++, actionBuilder.build());
323
324         CopyTtlInBuilder copyTtlInBuilder = new CopyTtlInBuilder();
325
326         ActionBuilder actionBuilder1 = new ActionBuilder();
327         actionBuilder1.setOrder(actionItem).setAction(new CopyTtlInCaseBuilder()
328                 .setCopyTtlIn(copyTtlInBuilder.build()).build());
329
330         actions.add(actionItem++, actionBuilder1.build());
331
332     }
333
334     private void mplsTtlActionData() {
335
336         SetMplsTtlActionBuilder setMplsTtlActionB = new SetMplsTtlActionBuilder();
337
338         setMplsTtlActionB.setMplsTtl((short) 10);
339         ActionBuilder actionBuilder1 = new ActionBuilder();
340         actionBuilder1.setOrder(actionItem).setAction(new SetMplsTtlActionCaseBuilder()
341                 .setSetMplsTtlAction(setMplsTtlActionB.build()).build());
342
343
344         actions.add(actionItem++, actionBuilder1.build());
345
346         DecMplsTtlBuilder decMplsTtlB = new DecMplsTtlBuilder();
347
348         ActionBuilder actionBuilder = new ActionBuilder();
349         actionBuilder.setOrder(actionItem).setAction(new DecMplsTtlCaseBuilder()
350                 .setDecMplsTtl(decMplsTtlB.build()).build());
351
352         actions.add(actionItem++, actionBuilder.build());
353     }
354
355     private void vlanActionData() {
356         PushVlanActionBuilder pvB = new PushVlanActionBuilder();
357
358         pvB.setVlanId(new VlanId(10));
359
360         ActionBuilder actionBuilder1 = new ActionBuilder();
361         actionBuilder1.setOrder(actionItem).setAction(new PushVlanActionCaseBuilder()
362                 .setPushVlanAction(pvB.build()).build());
363
364         actions.add(actionItem++, actionBuilder1.build());
365
366         PopVlanActionBuilder popVAB = new PopVlanActionBuilder();
367
368         ActionBuilder actionBuilder = new ActionBuilder();
369         actionBuilder.setOrder(actionItem).setAction(new PopVlanActionCaseBuilder()
370                 .setPopVlanAction(popVAB.build()).build());
371
372         actions.add(actionItem++, actionBuilder.build());
373
374     }
375
376     private void mplsActionData() {
377
378         PushMplsActionBuilder pushMB = new PushMplsActionBuilder();
379         pushMB.setEthernetType(10);
380
381         ActionBuilder actionBuilder = new ActionBuilder();
382         actionBuilder.setOrder(actionItem).setAction(new PushMplsActionCaseBuilder()
383                 .setPushMplsAction(pushMB.build()).build());
384
385         actions.add(actionItem++, actionBuilder.build());
386
387         PopMplsActionBuilder popMB = new PopMplsActionBuilder();
388         popMB.setEthernetType(10);
389
390         ActionBuilder actionBuilder1 = new ActionBuilder();
391         actionBuilder1.setOrder(actionItem).setAction(new PopMplsActionCaseBuilder()
392                 .setPopMplsAction(popMB.build()).build());
393
394         actions.add(actionItem++, actionBuilder1.build());
395     }
396
397     private void setQueueActionData() {
398
399         SetQueueActionBuilder setQB = new SetQueueActionBuilder();
400         setQB.setQueue("99");
401
402         ActionBuilder actionBuilder1 = new ActionBuilder();
403         actionBuilder1.setOrder(actionItem).setAction(new SetQueueActionCaseBuilder()
404                 .setSetQueueAction(setQB.build()).build());
405
406         actions.add(actionItem++, actionBuilder1.build());
407     }
408 }