Bug 1186 - of-flow: pop-mpls-action different in config and operational data store
[openflowplugin.git] / openflowplugin / src / test / java / org / opendaylight / openflowplugin / openflow / md / core / sal / convertor / 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  * Contributor: usha.m.s@ericsson.com
9  */
10 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
11
12 import java.math.BigInteger;
13 import java.util.ArrayList;
14 import java.util.List;
15
16 import junit.framework.Assert;
17
18 import org.junit.Test;
19 import org.opendaylight.controller.sal.action.PopVlan;
20 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
21 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Prefix;
22 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlInCaseBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlOutCaseBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecMplsTtlCaseBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecNwTtlCaseBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCaseBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCaseBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopMplsActionCaseBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopPbbActionCaseBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionCaseBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushMplsActionCaseBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushPbbActionCaseBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushVlanActionCaseBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetFieldCaseBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetMplsTtlActionCaseBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwDstActionCase;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwDstActionCaseBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwSrcActionCase;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwSrcActionCaseBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwTtlActionCaseBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetQueueActionCaseBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.copy.ttl.in._case.CopyTtlInBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.copy.ttl.out._case.CopyTtlOutBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.dec.mpls.ttl._case.DecMplsTtlBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.dec.nw.ttl._case.DecNwTtlBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.group.action._case.GroupActionBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.output.action._case.OutputActionBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.mpls.action._case.PopMplsActionBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.pbb.action._case.PopPbbActionBuilder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.vlan.action._case.PopVlanActionBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.mpls.action._case.PushMplsActionBuilder;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.pbb.action._case.PushPbbActionBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.vlan.action._case.PushVlanActionBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.field._case.SetFieldBuilder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.mpls.ttl.action._case.SetMplsTtlActionBuilder;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.dst.action._case.SetNwDstAction;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.dst.action._case.SetNwDstActionBuilder;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.src.action._case.SetNwSrcAction;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.src.action._case.SetNwSrcActionBuilder;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.ttl.action._case.SetNwTtlActionBuilder;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.queue.action._case.SetQueueActionBuilder;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.address.Address;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.address.address.Ipv4Builder;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.address.address.Ipv6Builder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.OutputPortValues;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthertypeAction;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthertypeActionBuilder;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.GroupIdAction;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.IpAddressAction;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv4AddressMatchEntry;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.Ipv6AddressMatchEntry;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaxLengthAction;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.OxmFieldsAction;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.CopyTtlIn;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.CopyTtlOut;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.DecNwTtl;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Output;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PopMpls;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PushMpls;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PushPbb;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PushVlan;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetField;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetMplsTtl;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetNwDst;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetNwSrc;
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetNwTtl;
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetQueue;
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.EtherType;
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv4Dst;
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv4Src;
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Dst;
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Src;
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntries;
99
100 public class ActionConvertorTest {
101
102     List<Action> actions = new ArrayList<>();
103     static Integer actionItem = 0;
104
105     @Test
106     public void testActionConvertorwithallParameters() {
107         OutputActionData();
108         CopyTtlData();
109         MplsTtlActionData();
110         vlanActionData();
111         mplsActionData();
112         setQueueActionData();
113         setGroupAction();
114         NwTtlAction();
115         pbbActionData();
116         setFieldData();
117         setExperimenterData();
118         List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731
119         .actions.grouping.Action> OFActionsList = ActionConvertor.getActions(actions, (short) 0X4,BigInteger.valueOf(1));
120
121        // OutputActions(OFActionsList);
122
123     }
124
125     private void setExperimenterData() {
126
127         // TODO:SAL API Missing
128
129     }
130
131     private void setFieldData() {
132
133         SetFieldBuilder setFA = new SetFieldBuilder();
134
135         SetFieldBuilder matchBuilder = setFA;
136
137         matchBuilder.setInPort(new NodeConnectorId("openflow:1:2125"));
138
139         SetFieldBuilder setFB = new SetFieldBuilder();
140
141         ActionBuilder AB = new ActionBuilder();
142         AB.setAction(new SetFieldCaseBuilder().setSetField(setFB.build()).build());
143
144         actions.add(actionItem++, AB.build());
145
146     }
147
148     private void pbbActionData() {
149         PushPbbActionBuilder pushpbb = new PushPbbActionBuilder();
150         pushpbb.setEthernetType(10);
151
152         ActionBuilder AB = new ActionBuilder();
153         AB.setAction(new PushPbbActionCaseBuilder().setPushPbbAction(pushpbb.build()).build());
154
155         actions.add(actionItem++, AB.build());
156
157         PopPbbActionBuilder popPBB = new PopPbbActionBuilder();
158
159         ActionBuilder AB1 = new ActionBuilder();
160         AB1.setAction(new PopPbbActionCaseBuilder().setPopPbbAction(popPBB.build()).build());
161
162         actions.add(actionItem++, AB1.build());
163
164     }
165
166     private void NwTtlAction() {
167         SetNwTtlActionBuilder setNwTtlActionBuilder = new SetNwTtlActionBuilder();
168
169         setNwTtlActionBuilder.setNwTtl((short) 1);
170         ActionBuilder AB = new ActionBuilder();
171         AB.setAction(new SetNwTtlActionCaseBuilder().setSetNwTtlAction(setNwTtlActionBuilder.build()).build());
172
173         actions.add(actionItem++, AB.build());
174
175         DecNwTtlBuilder necNwTtlBuilder = new DecNwTtlBuilder();
176
177
178         ActionBuilder AB1 = new ActionBuilder();
179         AB1.setAction(new DecNwTtlCaseBuilder().setDecNwTtl(necNwTtlBuilder.build()).build());
180
181         actions.add(actionItem++, AB1.build());
182
183     }
184
185     private void setGroupAction() {
186
187         GroupActionBuilder grpIdAB = new GroupActionBuilder();
188         grpIdAB.setGroup("98");
189
190         ActionBuilder AB = new ActionBuilder();
191         AB.setAction(new GroupActionCaseBuilder().setGroupAction(grpIdAB.build()).build());
192
193         actions.add(actionItem++, AB.build());
194
195     }
196
197     // TODO - check if this method is needed (private and never used locally) - see line 94
198     private void OutputActions(List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common
199             .action.rev130731.actions.grouping.Action> oFActionsList) {
200
201         for (int item = 0; item < oFActionsList.size(); item++) {
202
203             org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action action = oFActionsList
204                     .get(item);
205
206             if (action.getType().equals(Output.class)) {
207                 Assert.assertEquals((Integer) 10, (action.getAugmentation(MaxLengthAction.class)).getMaxLength());
208                 long port = 4294967293L;
209            //     Assert.assertEquals(port, (long) (action.getAugmentation(PortAction.class)).getPort().getValue());
210
211
212             }
213             if (action.getType().equals(CopyTtlIn.class)) {
214                 Assert.assertEquals(action.getType(), CopyTtlIn.class);
215
216             }
217             if (action.getType().equals(CopyTtlOut.class)) {
218
219                 Assert.assertEquals(action.getType(),
220                         org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.CopyTtlOut.class);
221
222             }
223
224             if (action.getType().equals(
225             // TODO:getMplsTtl is missing.
226                     SetMplsTtl.class)) {
227                 Assert.assertEquals(action.getType(), SetMplsTtl.class);
228
229             }
230             if (action.getType().equals(
231                     org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.DecMplsTtl.class)) {
232                 Assert.assertEquals(action.getType(),
233                         org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.DecMplsTtl.class);
234
235             }
236
237             if (action.getType().equals(PushMpls.class)) {
238
239                 EthertypeAction etherTypeAction = action
240                         .getAugmentation(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthertypeAction.class);
241
242                 if (etherTypeAction != null) {
243
244
245                     Assert.assertEquals((Integer) 10, etherTypeAction.getEthertype().getValue());
246                 }
247             }
248
249             if (action.getType().equals(PopMpls.class)) {
250                 Assert.assertEquals((Integer) 10, (action.getAugmentation(EthertypeAction.class)).getEthertype()
251                         .getValue());
252
253             }
254
255             if (action.getType().equals(
256
257             // TODO:SetQueue,I dont have getQueueId
258                     SetQueue.class)) {
259                 Assert.assertEquals(action.getType(), SetQueue.class);
260             }
261
262             if (action.getType().equals(
263
264             GroupIdAction.class)) {
265
266                 Assert.assertEquals(98, (long) (action.getAugmentation(GroupIdAction.class)).getGroupId());
267
268             }
269
270             if (action.getType().equals(
271
272                     PushVlan.class)) {
273
274                 Assert.assertEquals(action.getType(), PushVlan.class);
275
276                     }
277             if (action.getType().equals(
278
279             PopVlan.class)) {
280
281                 Assert.assertEquals(action.getType(), PopVlan.class);
282
283             }
284
285             if (action.getType().equals(
286
287             SetNwTtl.class)) {
288
289                 Assert.assertEquals(action.getType(), SetNwTtl.class);
290
291             }
292             if (action.getType().equals(
293
294             DecNwTtl.class)) {
295
296                 Assert.assertEquals(action.getType(), DecNwTtl.class);
297
298             }
299             if (action.getType().equals(PushPbb.class)) {
300
301                 EthertypeAction etherTypeAction = action
302                         .getAugmentation(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthertypeAction.class);
303
304                 if (etherTypeAction != null) {
305
306                     Assert.assertEquals((Integer) 10, etherTypeAction.getEthertype().getValue());
307                 }
308             }
309
310             if (action.getType().equals(PopMpls.class)) {
311                 Assert.assertEquals(action.getType(), PopMpls.class);
312
313             }
314             /* TODO - fix this test case
315             if (action.getType().equals(SetField.class)) {
316
317                 OxmFieldsAction sf = action.getAugmentation(OxmFieldsAction.class);
318
319                 Assert.assertEquals(OpenflowBasicClass.class, sf.getMatchEntries().get(0).getOxmClass());
320
321                 if (sf.getMatchEntries().get(0).getOxmMatchField().equals(InPort.class)) {
322                     Assert.assertEquals(2125, sf.getMatchEntries().get(0).getAugmentation(PortNumberMatchEntry.class)
323                             .getPortNumber().getValue().intValue());
324
325
326                     }
327
328             }
329             */
330
331         }
332
333     }
334
335     private void OutputActionData() {        
336         OutputActionBuilder outputB = new OutputActionBuilder();
337         outputB.setMaxLength(10);
338         Uri uri = new Uri(OutputPortValues.CONTROLLER.toString());
339         outputB.setOutputNodeConnector(uri);
340
341         ActionBuilder AB = new ActionBuilder();
342         AB.setAction(new OutputActionCaseBuilder().setOutputAction(outputB.build()).build());
343
344         actions.add(actionItem++, AB.build());
345
346     }
347
348     private void CopyTtlData() {
349         CopyTtlOutBuilder copyB = new CopyTtlOutBuilder();
350
351         ActionBuilder AB = new ActionBuilder();
352         AB.setAction(new CopyTtlOutCaseBuilder().setCopyTtlOut(copyB.build()).build());
353
354         actions.add(actionItem++, AB.build());
355
356         CopyTtlInBuilder copyTtlInBuilder = new CopyTtlInBuilder();
357
358         ActionBuilder AB1 = new ActionBuilder();
359         AB1.setAction(new CopyTtlInCaseBuilder().setCopyTtlIn(copyTtlInBuilder.build()).build());
360
361         actions.add(actionItem++, AB1.build());
362
363     }
364
365     private void MplsTtlActionData() {
366
367         SetMplsTtlActionBuilder setMplsTtlActionB = new SetMplsTtlActionBuilder();
368
369         setMplsTtlActionB.setMplsTtl((short) 10);
370         ActionBuilder AB1 = new ActionBuilder();
371         AB1.setAction(new SetMplsTtlActionCaseBuilder().setSetMplsTtlAction(setMplsTtlActionB.build()).build());
372
373
374         actions.add(actionItem++, AB1.build());
375
376         DecMplsTtlBuilder decMplsTtlB = new DecMplsTtlBuilder();
377
378         ActionBuilder AB = new ActionBuilder();
379         AB.setAction(new DecMplsTtlCaseBuilder().setDecMplsTtl(decMplsTtlB.build()).build());
380
381         actions.add(actionItem++, AB1.build());
382     }
383
384     private void vlanActionData() {
385         PushVlanActionBuilder pvB = new PushVlanActionBuilder();
386
387         pvB.setVlanId(new VlanId(10));
388
389         ActionBuilder AB1 = new ActionBuilder();
390         AB1.setAction(new PushVlanActionCaseBuilder().setPushVlanAction(pvB.build()).build());
391
392         actions.add(actionItem++, AB1.build());
393
394         PopVlanActionBuilder popVAB = new PopVlanActionBuilder();
395
396         ActionBuilder AB = new ActionBuilder();
397         AB.setAction(new PopVlanActionCaseBuilder().setPopVlanAction(popVAB.build()).build());
398
399         actions.add(actionItem++, AB.build());
400
401     }
402
403     private void mplsActionData() {
404
405         PushMplsActionBuilder pushMB = new PushMplsActionBuilder();
406         pushMB.setEthernetType(10);
407
408         ActionBuilder AB = new ActionBuilder();
409         AB.setAction(new PushMplsActionCaseBuilder().setPushMplsAction(pushMB.build()).build());
410
411         actions.add(actionItem++, AB.build());
412
413         PopMplsActionBuilder popMB = new PopMplsActionBuilder();
414         popMB.setEthernetType(10);
415
416         ActionBuilder AB1 = new ActionBuilder();
417         AB1.setAction(new PopMplsActionCaseBuilder().setPopMplsAction(popMB.build()).build());
418
419         actions.add(actionItem++, AB1.build());
420     }
421
422     /**
423      * testing {@link ActionConvertor#ofToSALPushMplsAction(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action)}
424      * with OF-1.3, IPv6 
425      */
426     @Test
427     public void testOFtoSALPushMplsAction() {
428         org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder actionBuilder 
429         = new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder();
430         
431         actionBuilder.setType(PushVlan.class);
432         EthertypeActionBuilder ethertypeActionBuilder = new EthertypeActionBuilder();
433         ethertypeActionBuilder.setEthertype(new EtherType(new Integer(34888)));
434         actionBuilder.addAugmentation(EthertypeAction.class, ethertypeActionBuilder.build());
435         org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action action = actionBuilder.build(); 
436
437         Assert.assertEquals(34888, ActionConvertor.ofToSALPushMplsAction(action).getPushMplsAction().getEthernetType().intValue());
438     }
439
440     private void setQueueActionData() {
441
442         SetQueueActionBuilder setQB = new SetQueueActionBuilder();
443         setQB.setQueue("99");
444
445         ActionBuilder AB1 = new ActionBuilder();
446         AB1.setAction(new SetQueueActionCaseBuilder().setSetQueueAction(setQB.build()).build());
447
448         actions.add(actionItem++, AB1.build());
449
450     }
451     
452     /**
453      * testing {@link ActionConvertor#SalToOFSetNwDst(org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action, org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder, short)}
454      * with OF-1.0, IPv4 
455      */
456     @Test
457     public void testSalToOFSetNwDst10v4() {
458         short version = 1;
459         org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder actionBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder();
460         Address address;
461         address = new Ipv4Builder().setIpv4Address(new Ipv4Prefix("10.0.0.1")).build();
462         SetNwDstActionCase action = provisionNwDstActionBuilder(address);
463         ActionConvertor.SalToOFSetNwDst(action, actionBuilder, version);
464         Assert.assertEquals(SetNwDst.class, actionBuilder.getType());
465         Assert.assertEquals("10.0.0.1", actionBuilder.getAugmentation(IpAddressAction.class).getIpAddress().getValue());
466     }
467
468     /**
469      * testing {@link ActionConvertor#SalToOFSetNwDst(org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action, org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder, short)}
470      * with OF-1.0, IPv6 
471      */
472     @Test
473     public void testSalToOFSetNwDst10v6() {
474         short version = 1;
475         org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder actionBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder();
476         Address address;
477         address = new Ipv6Builder().setIpv6Address(new Ipv6Prefix("2001:0db8:85a3:0042:1000:8a2e:0370:7334")).build();
478         SetNwDstActionCase action = provisionNwDstActionBuilder(address);
479         org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action ofAction = ActionConvertor.SalToOFSetNwDst(action, actionBuilder, version);
480         Assert.assertNull(ofAction);
481     }
482     
483     
484     /**
485      * testing {@link ActionConvertor#SalToOFSetNwDst(org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action, org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder, short)}
486      * with OF-1.3, IPv4 
487      */
488     @Test
489     public void testSalToOFSetNwDst13v4() {
490         short version = 4;
491         org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder actionBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder();
492         Address address;
493         address = new Ipv4Builder().setIpv4Address(new Ipv4Prefix("10.0.0.1")).build();
494         SetNwDstActionCase action = provisionNwDstActionBuilder(address);
495         ActionConvertor.SalToOFSetNwDst(action, actionBuilder, version);
496         Assert.assertEquals(SetField.class, actionBuilder.getType());
497         MatchEntries matchEntry = actionBuilder.getAugmentation(OxmFieldsAction.class).getMatchEntries().get(0);
498         Assert.assertEquals(Ipv4Dst.class, matchEntry.getOxmMatchField());
499         Assert.assertEquals("10.0.0.1", matchEntry.getAugmentation(Ipv4AddressMatchEntry.class).getIpv4Address().getValue());
500     }
501     
502     
503     /**
504      * testing {@link ActionConvertor#SalToOFSetNwDst(org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action, org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder, short)}
505      * with OF-1.3, IPv6 
506      */
507     @Test
508     public void testSalToOFSetNwDst13v6() {
509         short version = 4;
510         org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder actionBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder();
511         Address address;
512         address = new Ipv6Builder().setIpv6Address(new Ipv6Prefix("2001:0db8:85a3:0042:1000:8a2e:0370:7334")).build();
513         SetNwDstActionCase action = provisionNwDstActionBuilder(address);
514         ActionConvertor.SalToOFSetNwDst(action, actionBuilder, version);
515         Assert.assertEquals(SetField.class, actionBuilder.getType());
516         MatchEntries matchEntry = actionBuilder.getAugmentation(OxmFieldsAction.class).getMatchEntries().get(0);
517         Assert.assertEquals(Ipv6Dst.class, matchEntry.getOxmMatchField());
518         Assert.assertEquals("2001:0db8:85a3:0042:1000:8a2e:0370:7334", matchEntry.getAugmentation(Ipv6AddressMatchEntry.class).getIpv6Address().getValue());
519     }
520     
521    
522     
523     /**
524      * testing {@link ActionConvertor#SalToOFSetNwSrc(org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action, org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder, short)}
525      * with OF-1.0, IPv4 
526      */
527     @Test
528     public void testSalToOFSetNwSrc10v4() {
529         short version = 1;
530         org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder actionBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder();
531         Address address;
532         address = new Ipv4Builder().setIpv4Address(new Ipv4Prefix("10.0.0.1")).build();
533         SetNwSrcActionCase action = provisionNwSrcActionBuilder(address);
534         ActionConvertor.SalToOFSetNwSrc(action, actionBuilder, version);
535         Assert.assertEquals(SetNwSrc.class, actionBuilder.getType());
536         Assert.assertEquals("10.0.0.1", actionBuilder.getAugmentation(IpAddressAction.class).getIpAddress().getValue());
537     }
538
539     /**
540      * testing {@link ActionConvertor#SalToOFSetNwSrc(org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action, org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder, short)}
541      * with OF-1.0, IPv6 
542      */
543     @Test
544     public void testSalToOFSetNwSrc10v6() {
545         short version = 1;
546         org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder actionBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder();
547         Address address;
548         address = new Ipv6Builder().setIpv6Address(new Ipv6Prefix("2001:0db8:85a3:0042:1000:8a2e:0370:7334")).build();
549         SetNwSrcActionCase action = provisionNwSrcActionBuilder(address);
550         org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action ofAction = ActionConvertor.SalToOFSetNwSrc(action, actionBuilder, version);
551         Assert.assertNull(ofAction);
552     }
553
554     /**
555      * testing {@link ActionConvertor#SalToOFSetNwSrc(org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action, org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder, short)}
556      * with OF-1.3, IPv4 
557      */
558     @Test
559     public void testSalToOFSetNwSrc13v4() {
560         short version = 4;
561         org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder actionBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder();
562         Address address;
563         address = new Ipv4Builder().setIpv4Address(new Ipv4Prefix("10.0.0.1")).build();
564         SetNwSrcActionCase action = provisionNwSrcActionBuilder(address);
565         ActionConvertor.SalToOFSetNwSrc(action, actionBuilder, version);
566         Assert.assertEquals(SetField.class, actionBuilder.getType());
567         MatchEntries matchEntry = actionBuilder.getAugmentation(OxmFieldsAction.class).getMatchEntries().get(0);
568         Assert.assertEquals(Ipv4Src.class, matchEntry.getOxmMatchField());
569         Assert.assertEquals("10.0.0.1", matchEntry.getAugmentation(Ipv4AddressMatchEntry.class).getIpv4Address().getValue());
570     }
571
572     /**
573      * testing {@link ActionConvertor#SalToOFSetNwSrc(org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action, org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder, short)}
574      * with OF-1.3, IPv6 
575      */
576     @Test
577     public void testSalToOFSetNwSrc13v6() {
578         short version = 4;
579         org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder actionBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder();
580         Address address;
581         address = new Ipv6Builder().setIpv6Address(new Ipv6Prefix("2001:0db8:85a3:0042:1000:8a2e:0370:7334")).build();
582         SetNwSrcActionCase action = provisionNwSrcActionBuilder(address);
583         ActionConvertor.SalToOFSetNwSrc(action, actionBuilder, version);
584         Assert.assertEquals(SetField.class, actionBuilder.getType());
585         MatchEntries matchEntry = actionBuilder.getAugmentation(OxmFieldsAction.class).getMatchEntries().get(0);
586         Assert.assertEquals(Ipv6Src.class, matchEntry.getOxmMatchField());
587         Assert.assertEquals("2001:0db8:85a3:0042:1000:8a2e:0370:7334", matchEntry.getAugmentation(Ipv6AddressMatchEntry.class).getIpv6Address().getValue());
588     }
589
590     /**
591      * testing {@link ActionConvertor#ofToSALPopMplsAction(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action)}
592      * with OF-1.3, IPv6 
593      */
594     @Test
595     public void testOFtoSALPopMplsAction() {
596         org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder actionBuilder 
597         = new org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder();
598         
599         actionBuilder.setType(PopMpls.class);
600         EthertypeActionBuilder ethertypeActionBuilder = new EthertypeActionBuilder();
601         ethertypeActionBuilder.setEthertype(new EtherType(new Integer(34888)));
602         actionBuilder.addAugmentation(EthertypeAction.class, ethertypeActionBuilder.build());
603         org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action action = actionBuilder.build(); 
604
605         Assert.assertEquals(34888, ActionConvertor.ofToSALPopMplsAction(action).getPopMplsAction().getEthernetType().intValue());
606     }
607
608     private static SetNwDstActionCase provisionNwDstActionBuilder(Address address) {
609         SetNwDstAction nwDstAction = new SetNwDstActionBuilder().setAddress(address).build();
610         SetNwDstActionCase action = new SetNwDstActionCaseBuilder()
611             .setSetNwDstAction(nwDstAction)
612             .build(); 
613         return action;
614     }
615     
616     private static SetNwSrcActionCase provisionNwSrcActionBuilder(Address address) {
617         SetNwSrcAction nwSrcAction = new SetNwSrcActionBuilder().setAddress(address).build();
618         SetNwSrcActionCase action = new SetNwSrcActionCaseBuilder()
619             .setSetNwSrcAction(nwSrcAction)
620             .build(); 
621         return action;
622     }
623
624 }