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