1 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
3 import java.util.ArrayList;
6 import junit.framework.Assert;
9 import org.opendaylight.controller.sal.action.PopVlan;
10 import org.opendaylight.controller.sal.core.NodeConnector.NodeConnectorIDType;
11 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Uri;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlInCaseBuilder;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlOutCaseBuilder;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecMplsTtlCaseBuilder;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecNwTtlCaseBuilder;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCaseBuilder;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCase;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCaseBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopMplsActionCaseBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopPbbActionCaseBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionCaseBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushMplsActionCaseBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushPbbActionCaseBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushVlanActionCaseBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetFieldCaseBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetMplsTtlActionCaseBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwTtlActionCaseBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetQueueActionCaseBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.copy.ttl.in._case.CopyTtlInBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.copy.ttl.out._case.CopyTtlOutBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.dec.mpls.ttl._case.DecMplsTtlBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.dec.nw.ttl._case.DecNwTtlBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.group.action._case.GroupActionBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.output.action._case.OutputActionBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.mpls.action._case.PopMplsActionBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.pbb.action._case.PopPbbActionBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.pop.vlan.action._case.PopVlanActionBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.mpls.action._case.PushMplsActionBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.pbb.action._case.PushPbbActionBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.push.vlan.action._case.PushVlanActionBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.field._case.SetFieldBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.mpls.ttl.action._case.SetMplsTtlActionBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.ttl.action._case.SetNwTtlAction;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.nw.ttl.action._case.SetNwTtlActionBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.queue.action._case.SetQueueActionBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.OutputPortValues;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthertypeAction;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.GroupIdAction;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaxLengthAction;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.OxmFieldsAction;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortAction;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortNumberMatchEntry;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.CopyTtlIn;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.CopyTtlOut;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.DecNwTtl;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Output;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PopMpls;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PushMpls;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PushPbb;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PushVlan;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetField;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetMplsTtl;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetNwTtl;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetQueue;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.ActionsList;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.InPort;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OpenflowBasicClass;
72 public class ActionConvertorTest {
74 List<Action> actions = new ArrayList<Action>();
75 static Integer actionItem = 0;
78 public void testActionConvertorwithallParameters() {
89 setExperimenterData();
90 List<ActionsList> OFActionsList = ActionConvertor.getActionList(actions, (short) 0X4);
92 // OutputActions(OFActionsList);
96 private void setExperimenterData() {
98 // TODO:SAL API Missing
102 private void setFieldData() {
104 SetFieldBuilder setFA = new SetFieldBuilder();
106 SetFieldBuilder matchBuilder = setFA;
108 matchBuilder.setInPort(2125L);
110 SetFieldBuilder setFB = new SetFieldBuilder();
112 ActionBuilder AB = new ActionBuilder();
113 AB.setAction(new SetFieldCaseBuilder().setSetField(setFB.build()).build());
115 actions.add(actionItem++, AB.build());
119 private void pbbActionData() {
120 PushPbbActionBuilder pushpbb = new PushPbbActionBuilder();
121 pushpbb.setEthernetType(10);
123 ActionBuilder AB = new ActionBuilder();
124 AB.setAction(new PushPbbActionCaseBuilder().setPushPbbAction(pushpbb.build()).build());
126 actions.add(actionItem++, AB.build());
128 PopPbbActionBuilder popPBB = new PopPbbActionBuilder();
130 ActionBuilder AB1 = new ActionBuilder();
131 AB1.setAction(new PopPbbActionCaseBuilder().setPopPbbAction(popPBB.build()).build());
133 actions.add(actionItem++, AB1.build());
137 private void NwTtlAction() {
138 SetNwTtlActionBuilder setNwTtlActionBuilder = new SetNwTtlActionBuilder();
140 setNwTtlActionBuilder.setNwTtl((short) 1);
141 ActionBuilder AB = new ActionBuilder();
142 AB.setAction(new SetNwTtlActionCaseBuilder().setSetNwTtlAction(setNwTtlActionBuilder.build()).build());
144 actions.add(actionItem++, AB.build());
146 DecNwTtlBuilder necNwTtlBuilder = new DecNwTtlBuilder();
149 ActionBuilder AB1 = new ActionBuilder();
150 AB1.setAction(new DecNwTtlCaseBuilder().setDecNwTtl(necNwTtlBuilder.build()).build());
152 actions.add(actionItem++, AB1.build());
156 private void setGroupAction() {
158 GroupActionBuilder grpIdAB = new GroupActionBuilder();
159 grpIdAB.setGroup("98");
161 ActionBuilder AB = new ActionBuilder();
162 AB.setAction(new GroupActionCaseBuilder().setGroupAction(grpIdAB.build()).build());
164 actions.add(actionItem++, AB.build());
168 private void OutputActions(List<ActionsList> oFActionsList) {
170 for (int item = 0; item < oFActionsList.size(); item++) {
172 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.Action action = oFActionsList
173 .get(item).getAction();
175 if (action.getType().equals(Output.class)) {
176 Assert.assertEquals((Integer) 10, (action.getAugmentation(MaxLengthAction.class)).getMaxLength());
177 long port = 4294967293L;
178 // Assert.assertEquals(port, (long) (action.getAugmentation(PortAction.class)).getPort().getValue());
182 if (action.getType().equals(CopyTtlIn.class)) {
183 Assert.assertEquals(action.getType(), CopyTtlIn.class);
186 if (action.getType().equals(CopyTtlOut.class)) {
188 Assert.assertEquals(action.getType(),
189 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.CopyTtlOut.class);
193 if (action.getType().equals(
194 // TODO:getMplsTtl is missing.
196 Assert.assertEquals(action.getType(), SetMplsTtl.class);
199 if (action.getType().equals(
200 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.DecMplsTtl.class)) {
201 Assert.assertEquals(action.getType(),
202 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.DecMplsTtl.class);
206 if (action.getType().equals(PushMpls.class)) {
208 EthertypeAction etherTypeAction = action
209 .getAugmentation(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthertypeAction.class);
211 if (etherTypeAction != null) {
214 Assert.assertEquals((Integer) 10, etherTypeAction.getEthertype().getValue());
218 if (action.getType().equals(PopMpls.class)) {
219 Assert.assertEquals((Integer) 10, (action.getAugmentation(EthertypeAction.class)).getEthertype()
224 if (action.getType().equals(
226 // TODO:SetQueue,I dont have getQueueId
228 Assert.assertEquals(action.getType(), SetQueue.class);
231 if (action.getType().equals(
233 GroupIdAction.class)) {
235 Assert.assertEquals(98, (long) (action.getAugmentation(GroupIdAction.class)).getGroupId());
239 if (action.getType().equals(
243 Assert.assertEquals(action.getType(), PushVlan.class);
246 if (action.getType().equals(
250 Assert.assertEquals(action.getType(), PopVlan.class);
254 if (action.getType().equals(
258 Assert.assertEquals(action.getType(), SetNwTtl.class);
261 if (action.getType().equals(
265 Assert.assertEquals(action.getType(), DecNwTtl.class);
268 if (action.getType().equals(PushPbb.class)) {
270 EthertypeAction etherTypeAction = action
271 .getAugmentation(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthertypeAction.class);
273 if (etherTypeAction != null) {
275 Assert.assertEquals((Integer) 10, etherTypeAction.getEthertype().getValue());
279 if (action.getType().equals(PopMpls.class)) {
280 Assert.assertEquals(action.getType(), PopMpls.class);
283 /* TODO - fix this test case
284 if (action.getType().equals(SetField.class)) {
286 OxmFieldsAction sf = action.getAugmentation(OxmFieldsAction.class);
288 Assert.assertEquals(OpenflowBasicClass.class, sf.getMatchEntries().get(0).getOxmClass());
290 if (sf.getMatchEntries().get(0).getOxmMatchField().equals(InPort.class)) {
291 Assert.assertEquals(2125, sf.getMatchEntries().get(0).getAugmentation(PortNumberMatchEntry.class)
292 .getPortNumber().getValue().intValue());
304 private void OutputActionData() {
305 OutputActionBuilder outputB = new OutputActionBuilder();
306 outputB.setMaxLength(10);
307 Uri uri = new Uri(OutputPortValues.CONTROLLER.toString());
308 outputB.setOutputNodeConnector(uri);
310 ActionBuilder AB = new ActionBuilder();
311 AB.setAction(new OutputActionCaseBuilder().setOutputAction(outputB.build()).build());
313 actions.add(actionItem++, AB.build());
317 private void CopyTtlData() {
318 CopyTtlOutBuilder copyB = new CopyTtlOutBuilder();
320 ActionBuilder AB = new ActionBuilder();
321 AB.setAction(new CopyTtlOutCaseBuilder().setCopyTtlOut(copyB.build()).build());
323 actions.add(actionItem++, AB.build());
325 CopyTtlInBuilder copyTtlInBuilder = new CopyTtlInBuilder();
327 ActionBuilder AB1 = new ActionBuilder();
328 AB1.setAction(new CopyTtlInCaseBuilder().setCopyTtlIn(copyTtlInBuilder.build()).build());
330 actions.add(actionItem++, AB1.build());
334 private void MplsTtlActionData() {
336 SetMplsTtlActionBuilder setMplsTtlActionB = new SetMplsTtlActionBuilder();
338 setMplsTtlActionB.setMplsTtl((short) 10);
339 ActionBuilder AB1 = new ActionBuilder();
340 AB1.setAction(new SetMplsTtlActionCaseBuilder().setSetMplsTtlAction(setMplsTtlActionB.build()).build());
343 actions.add(actionItem++, AB1.build());
345 DecMplsTtlBuilder decMplsTtlB = new DecMplsTtlBuilder();
347 ActionBuilder AB = new ActionBuilder();
348 AB.setAction(new DecMplsTtlCaseBuilder().setDecMplsTtl(decMplsTtlB.build()).build());
350 actions.add(actionItem++, AB1.build());
353 private void vlanActionData() {
354 PushVlanActionBuilder pvB = new PushVlanActionBuilder();
356 pvB.setVlanId(new VlanId(10));
358 ActionBuilder AB1 = new ActionBuilder();
359 AB1.setAction(new PushVlanActionCaseBuilder().setPushVlanAction(pvB.build()).build());
361 actions.add(actionItem++, AB1.build());
363 PopVlanActionBuilder popVAB = new PopVlanActionBuilder();
365 ActionBuilder AB = new ActionBuilder();
366 AB.setAction(new PopVlanActionCaseBuilder().setPopVlanAction(popVAB.build()).build());
368 actions.add(actionItem++, AB.build());
372 private void mplsActionData() {
374 PushMplsActionBuilder pushMB = new PushMplsActionBuilder();
375 pushMB.setEthernetType(10);
377 ActionBuilder AB = new ActionBuilder();
378 AB.setAction(new PushMplsActionCaseBuilder().setPushMplsAction(pushMB.build()).build());
380 actions.add(actionItem++, AB.build());
382 PopMplsActionBuilder popMB = new PopMplsActionBuilder();
383 popMB.setEthernetType(10);
385 ActionBuilder AB1 = new ActionBuilder();
386 AB1.setAction(new PopMplsActionCaseBuilder().setPopMplsAction(popMB.build()).build());
388 actions.add(actionItem++, AB1.build());
391 private void setQueueActionData() {
393 SetQueueActionBuilder setQB = new SetQueueActionBuilder();
394 setQB.setQueue("99");
396 ActionBuilder AB1 = new ActionBuilder();
397 AB1.setAction(new SetQueueActionCaseBuilder().setSetQueueAction(setQB.build()).build());
399 actions.add(actionItem++, AB1.build());