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