1 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
3 import java.math.BigInteger;
4 import java.util.ArrayList;
7 import junit.framework.Assert;
10 import org.opendaylight.controller.sal.action.PopVlan;
11 import org.opendaylight.controller.sal.core.NodeConnector.NodeConnectorIDType;
12 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlInCaseBuilder;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlOutCaseBuilder;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecMplsTtlCaseBuilder;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecNwTtlCaseBuilder;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCaseBuilder;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCase;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCaseBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopMplsActionCaseBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopPbbActionCaseBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionCaseBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushMplsActionCaseBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushPbbActionCaseBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushVlanActionCaseBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetFieldCaseBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetMplsTtlActionCaseBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwTtlActionCaseBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetQueueActionCaseBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.copy.ttl.in._case.CopyTtlInBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.copy.ttl.out._case.CopyTtlOutBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.dec.mpls.ttl._case.DecMplsTtlBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.dec.nw.ttl._case.DecNwTtlBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.group.action._case.GroupActionBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.output.action._case.OutputActionBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.mpls.action._case.PopMplsActionBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.pbb.action._case.PopPbbActionBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.vlan.action._case.PopVlanActionBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.mpls.action._case.PushMplsActionBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.pbb.action._case.PushPbbActionBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.vlan.action._case.PushVlanActionBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.field._case.SetFieldBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.mpls.ttl.action._case.SetMplsTtlActionBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.ttl.action._case.SetNwTtlAction;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.ttl.action._case.SetNwTtlActionBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.queue.action._case.SetQueueActionBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.OutputPortValues;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthertypeAction;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.GroupIdAction;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaxLengthAction;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.OxmFieldsAction;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortAction;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortNumberMatchEntry;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.CopyTtlIn;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.CopyTtlOut;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.DecNwTtl;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Output;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PopMpls;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PushMpls;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PushPbb;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PushVlan;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetField;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetMplsTtl;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetNwTtl;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetQueue;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.ActionsList;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.InPort;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OpenflowBasicClass;
74 public class ActionConvertorTest {
76 List<Action> actions = new ArrayList<Action>();
77 static Integer actionItem = 0;
80 public void testActionConvertorwithallParameters() {
91 setExperimenterData();
92 List<ActionsList> OFActionsList = ActionConvertor.getActionList(actions, (short) 0X4,BigInteger.valueOf(1));
94 // OutputActions(OFActionsList);
98 private void setExperimenterData() {
100 // TODO:SAL API Missing
104 private void setFieldData() {
106 SetFieldBuilder setFA = new SetFieldBuilder();
108 SetFieldBuilder matchBuilder = setFA;
110 matchBuilder.setInPort(new NodeConnectorId("openflow:1:2125"));
112 SetFieldBuilder setFB = new SetFieldBuilder();
114 ActionBuilder AB = new ActionBuilder();
115 AB.setAction(new SetFieldCaseBuilder().setSetField(setFB.build()).build());
117 actions.add(actionItem++, AB.build());
121 private void pbbActionData() {
122 PushPbbActionBuilder pushpbb = new PushPbbActionBuilder();
123 pushpbb.setEthernetType(10);
125 ActionBuilder AB = new ActionBuilder();
126 AB.setAction(new PushPbbActionCaseBuilder().setPushPbbAction(pushpbb.build()).build());
128 actions.add(actionItem++, AB.build());
130 PopPbbActionBuilder popPBB = new PopPbbActionBuilder();
132 ActionBuilder AB1 = new ActionBuilder();
133 AB1.setAction(new PopPbbActionCaseBuilder().setPopPbbAction(popPBB.build()).build());
135 actions.add(actionItem++, AB1.build());
139 private void NwTtlAction() {
140 SetNwTtlActionBuilder setNwTtlActionBuilder = new SetNwTtlActionBuilder();
142 setNwTtlActionBuilder.setNwTtl((short) 1);
143 ActionBuilder AB = new ActionBuilder();
144 AB.setAction(new SetNwTtlActionCaseBuilder().setSetNwTtlAction(setNwTtlActionBuilder.build()).build());
146 actions.add(actionItem++, AB.build());
148 DecNwTtlBuilder necNwTtlBuilder = new DecNwTtlBuilder();
151 ActionBuilder AB1 = new ActionBuilder();
152 AB1.setAction(new DecNwTtlCaseBuilder().setDecNwTtl(necNwTtlBuilder.build()).build());
154 actions.add(actionItem++, AB1.build());
158 private void setGroupAction() {
160 GroupActionBuilder grpIdAB = new GroupActionBuilder();
161 grpIdAB.setGroup("98");
163 ActionBuilder AB = new ActionBuilder();
164 AB.setAction(new GroupActionCaseBuilder().setGroupAction(grpIdAB.build()).build());
166 actions.add(actionItem++, AB.build());
170 private void OutputActions(List<ActionsList> oFActionsList) {
172 for (int item = 0; item < oFActionsList.size(); item++) {
174 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.Action action = oFActionsList
175 .get(item).getAction();
177 if (action.getType().equals(Output.class)) {
178 Assert.assertEquals((Integer) 10, (action.getAugmentation(MaxLengthAction.class)).getMaxLength());
179 long port = 4294967293L;
180 // Assert.assertEquals(port, (long) (action.getAugmentation(PortAction.class)).getPort().getValue());
184 if (action.getType().equals(CopyTtlIn.class)) {
185 Assert.assertEquals(action.getType(), CopyTtlIn.class);
188 if (action.getType().equals(CopyTtlOut.class)) {
190 Assert.assertEquals(action.getType(),
191 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.CopyTtlOut.class);
195 if (action.getType().equals(
196 // TODO:getMplsTtl is missing.
198 Assert.assertEquals(action.getType(), SetMplsTtl.class);
201 if (action.getType().equals(
202 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.DecMplsTtl.class)) {
203 Assert.assertEquals(action.getType(),
204 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.DecMplsTtl.class);
208 if (action.getType().equals(PushMpls.class)) {
210 EthertypeAction etherTypeAction = action
211 .getAugmentation(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthertypeAction.class);
213 if (etherTypeAction != null) {
216 Assert.assertEquals((Integer) 10, etherTypeAction.getEthertype().getValue());
220 if (action.getType().equals(PopMpls.class)) {
221 Assert.assertEquals((Integer) 10, (action.getAugmentation(EthertypeAction.class)).getEthertype()
226 if (action.getType().equals(
228 // TODO:SetQueue,I dont have getQueueId
230 Assert.assertEquals(action.getType(), SetQueue.class);
233 if (action.getType().equals(
235 GroupIdAction.class)) {
237 Assert.assertEquals(98, (long) (action.getAugmentation(GroupIdAction.class)).getGroupId());
241 if (action.getType().equals(
245 Assert.assertEquals(action.getType(), PushVlan.class);
248 if (action.getType().equals(
252 Assert.assertEquals(action.getType(), PopVlan.class);
256 if (action.getType().equals(
260 Assert.assertEquals(action.getType(), SetNwTtl.class);
263 if (action.getType().equals(
267 Assert.assertEquals(action.getType(), DecNwTtl.class);
270 if (action.getType().equals(PushPbb.class)) {
272 EthertypeAction etherTypeAction = action
273 .getAugmentation(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthertypeAction.class);
275 if (etherTypeAction != null) {
277 Assert.assertEquals((Integer) 10, etherTypeAction.getEthertype().getValue());
281 if (action.getType().equals(PopMpls.class)) {
282 Assert.assertEquals(action.getType(), PopMpls.class);
285 /* TODO - fix this test case
286 if (action.getType().equals(SetField.class)) {
288 OxmFieldsAction sf = action.getAugmentation(OxmFieldsAction.class);
290 Assert.assertEquals(OpenflowBasicClass.class, sf.getMatchEntries().get(0).getOxmClass());
292 if (sf.getMatchEntries().get(0).getOxmMatchField().equals(InPort.class)) {
293 Assert.assertEquals(2125, sf.getMatchEntries().get(0).getAugmentation(PortNumberMatchEntry.class)
294 .getPortNumber().getValue().intValue());
306 private void OutputActionData() {
307 OutputActionBuilder outputB = new OutputActionBuilder();
308 outputB.setMaxLength(10);
309 Uri uri = new Uri(OutputPortValues.CONTROLLER.toString());
310 outputB.setOutputNodeConnector(uri);
312 ActionBuilder AB = new ActionBuilder();
313 AB.setAction(new OutputActionCaseBuilder().setOutputAction(outputB.build()).build());
315 actions.add(actionItem++, AB.build());
319 private void CopyTtlData() {
320 CopyTtlOutBuilder copyB = new CopyTtlOutBuilder();
322 ActionBuilder AB = new ActionBuilder();
323 AB.setAction(new CopyTtlOutCaseBuilder().setCopyTtlOut(copyB.build()).build());
325 actions.add(actionItem++, AB.build());
327 CopyTtlInBuilder copyTtlInBuilder = new CopyTtlInBuilder();
329 ActionBuilder AB1 = new ActionBuilder();
330 AB1.setAction(new CopyTtlInCaseBuilder().setCopyTtlIn(copyTtlInBuilder.build()).build());
332 actions.add(actionItem++, AB1.build());
336 private void MplsTtlActionData() {
338 SetMplsTtlActionBuilder setMplsTtlActionB = new SetMplsTtlActionBuilder();
340 setMplsTtlActionB.setMplsTtl((short) 10);
341 ActionBuilder AB1 = new ActionBuilder();
342 AB1.setAction(new SetMplsTtlActionCaseBuilder().setSetMplsTtlAction(setMplsTtlActionB.build()).build());
345 actions.add(actionItem++, AB1.build());
347 DecMplsTtlBuilder decMplsTtlB = new DecMplsTtlBuilder();
349 ActionBuilder AB = new ActionBuilder();
350 AB.setAction(new DecMplsTtlCaseBuilder().setDecMplsTtl(decMplsTtlB.build()).build());
352 actions.add(actionItem++, AB1.build());
355 private void vlanActionData() {
356 PushVlanActionBuilder pvB = new PushVlanActionBuilder();
358 pvB.setVlanId(new VlanId(10));
360 ActionBuilder AB1 = new ActionBuilder();
361 AB1.setAction(new PushVlanActionCaseBuilder().setPushVlanAction(pvB.build()).build());
363 actions.add(actionItem++, AB1.build());
365 PopVlanActionBuilder popVAB = new PopVlanActionBuilder();
367 ActionBuilder AB = new ActionBuilder();
368 AB.setAction(new PopVlanActionCaseBuilder().setPopVlanAction(popVAB.build()).build());
370 actions.add(actionItem++, AB.build());
374 private void mplsActionData() {
376 PushMplsActionBuilder pushMB = new PushMplsActionBuilder();
377 pushMB.setEthernetType(10);
379 ActionBuilder AB = new ActionBuilder();
380 AB.setAction(new PushMplsActionCaseBuilder().setPushMplsAction(pushMB.build()).build());
382 actions.add(actionItem++, AB.build());
384 PopMplsActionBuilder popMB = new PopMplsActionBuilder();
385 popMB.setEthernetType(10);
387 ActionBuilder AB1 = new ActionBuilder();
388 AB1.setAction(new PopMplsActionCaseBuilder().setPopMplsAction(popMB.build()).build());
390 actions.add(actionItem++, AB1.build());
393 private void setQueueActionData() {
395 SetQueueActionBuilder setQB = new SetQueueActionBuilder();
396 setQB.setQueue("99");
398 ActionBuilder AB1 = new ActionBuilder();
399 AB1.setAction(new SetQueueActionCaseBuilder().setSetQueueAction(setQB.build()).build());
401 actions.add(actionItem++, AB1.build());