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