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