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.CopyTtlInBuilder;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlOutBuilder;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecMplsTtlBuilder;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecNwTtlBuilder;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionBuilder;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopMplsActionBuilder;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopPbbActionBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushMplsActionBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushPbbActionBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushVlanActionBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetFieldBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetMplsTtlActionBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwTtlActionBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetQueueActionBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.field.MatchBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.l2.types.rev130827.VlanId;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthertypeAction;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.GroupIdAction;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.MaxLengthAction;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.OxmFieldsAction;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortNumberMatchEntry;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.CopyTtlIn;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.CopyTtlOut;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.DecNwTtl;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Output;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PopMpls;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PushMpls;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PushPbb;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PushVlan;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetField;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetMplsTtl;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetNwTtl;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetQueue;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.ActionsList;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.InPort;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OpenflowBasicClass;
52 public class ActionConvertorTest {
54 List<Action> actions = new ArrayList<Action>();
55 static Integer actionItem = 0;
58 public void testActionConvertorwithallParameters() {
69 setExperimenterData();
70 List<ActionsList> OFActionsList = ActionConvertor.getActionList(actions);
72 OutputActions(OFActionsList);
76 private void setExperimenterData() {
78 // TODO:SAL API Missing
82 private void setFieldData() {
84 SetFieldBuilder setFA = new SetFieldBuilder();
86 MatchBuilder matchBuilder = new MatchBuilder();
88 matchBuilder.setInPort(2125L);
90 SetFieldBuilder setFB = new SetFieldBuilder();
91 setFB.setMatch(matchBuilder.build());
93 ActionBuilder AB = new ActionBuilder();
94 AB.setAction(setFB.build());
96 actions.add(actionItem++, AB.build());
100 private void pbbActionData() {
101 PushPbbActionBuilder pushpbb = new PushPbbActionBuilder();
102 pushpbb.setEthernetType(10);
104 ActionBuilder AB = new ActionBuilder();
105 AB.setAction(pushpbb.build());
107 actions.add(actionItem++, AB.build());
109 PopPbbActionBuilder popPBB = new PopPbbActionBuilder();
111 ActionBuilder AB1 = new ActionBuilder();
112 AB1.setAction(popPBB.build());
114 actions.add(actionItem++, AB1.build());
118 private void NwTtlAction() {
119 SetNwTtlActionBuilder setNwTtlActionBuilder = new SetNwTtlActionBuilder();
121 setNwTtlActionBuilder.setNwTtl((short) 1);
122 ActionBuilder AB = new ActionBuilder();
123 AB.setAction(setNwTtlActionBuilder.build());
125 actions.add(actionItem++, AB.build());
127 DecNwTtlBuilder necNwTtlBuilder = new DecNwTtlBuilder();
130 ActionBuilder AB1 = new ActionBuilder();
131 AB1.setAction(necNwTtlBuilder.build());
133 actions.add(actionItem++, AB1.build());
137 private void setGroupAction() {
139 GroupActionBuilder grpIdAB = new GroupActionBuilder();
140 grpIdAB.setGroup("98");
142 ActionBuilder AB = new ActionBuilder();
143 AB.setAction(grpIdAB.build());
145 actions.add(actionItem++, AB.build());
149 private void OutputActions(List<ActionsList> oFActionsList) {
151 for (int item = 0; item < oFActionsList.size(); item++) {
153 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.Action action = oFActionsList
154 .get(item).getAction();
156 if (action.getType().equals(Output.class)) {
157 Assert.assertEquals((Integer) 10, (action.getAugmentation(MaxLengthAction.class)).getMaxLength());
158 // TOD0: OF needs to changed,once that is done ,revalidation of
159 // the data required.
160 // Assert.assertEquals(-3, (long)
161 // (action.getAugmentation(PortAction.class)).getPort().getValue());
165 if (action.getType().equals(CopyTtlIn.class)) {
166 Assert.assertEquals(action.getType(), CopyTtlIn.class);
169 if (action.getType().equals(CopyTtlOut.class)) {
171 Assert.assertEquals(action.getType(),
172 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.CopyTtlOut.class);
176 if (action.getType().equals(
177 // TODO:getMplsTtl is missing.
179 Assert.assertEquals(action.getType(), SetMplsTtl.class);
182 if (action.getType().equals(
183 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.DecMplsTtl.class)) {
184 Assert.assertEquals(action.getType(),
185 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.DecMplsTtl.class);
189 if (action.getType().equals(PushMpls.class)) {
191 EthertypeAction etherTypeAction = action
192 .getAugmentation(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthertypeAction.class);
194 if (etherTypeAction != null) {
197 Assert.assertEquals((Integer) 10, etherTypeAction.getEthertype().getValue());
201 if (action.getType().equals(PopMpls.class)) {
202 Assert.assertEquals((Integer) 10, (action.getAugmentation(EthertypeAction.class)).getEthertype()
207 if (action.getType().equals(
209 // TODO:SetQueue,I dont have getQueueId
211 Assert.assertEquals(action.getType(), SetQueue.class);
214 if (action.getType().equals(
216 GroupIdAction.class)) {
218 Assert.assertEquals(98, (long) (action.getAugmentation(GroupIdAction.class)).getGroupId());
222 if (action.getType().equals(
226 Assert.assertEquals(action.getType(), PushVlan.class);
229 if (action.getType().equals(
233 Assert.assertEquals(action.getType(), PopVlan.class);
237 if (action.getType().equals(
241 Assert.assertEquals(action.getType(), SetNwTtl.class);
244 if (action.getType().equals(
248 Assert.assertEquals(action.getType(), SetNwTtl.class);
251 if (action.getType().equals(PushPbb.class)) {
253 EthertypeAction etherTypeAction = action
254 .getAugmentation(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthertypeAction.class);
256 if (etherTypeAction != null) {
258 Assert.assertEquals((Integer) 10, etherTypeAction.getEthertype().getValue());
262 if (action.getType().equals(PopMpls.class)) {
263 Assert.assertEquals(action.getType(), PopMpls.class);
267 if (action.getType().equals(SetField.class)) {
269 OxmFieldsAction sf = action.getAugmentation(OxmFieldsAction.class);
271 Assert.assertEquals(OpenflowBasicClass.class, sf.getMatchEntries().get(0).getOxmClass());
273 if (sf.getMatchEntries().get(0).getOxmMatchField().equals(InPort.class)) {
274 Assert.assertEquals(2125, sf.getMatchEntries().get(0).getAugmentation(PortNumberMatchEntry.class)
275 .getPortNumber().getValue().intValue());
286 private void OutputActionData() {
288 org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionBuilder outputB = new org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionBuilder();
289 outputB.setMaxLength(10);
290 Uri uri = new Uri(NodeConnectorIDType.CONTROLLER);
291 outputB.setOutputNodeConnector(uri);
293 ActionBuilder AB = new ActionBuilder();
294 AB.setAction(outputB.build());
296 actions.add(actionItem++, AB.build());
300 private void CopyTtlData() {
301 CopyTtlOutBuilder copyB = new CopyTtlOutBuilder();
303 ActionBuilder AB = new ActionBuilder();
304 AB.setAction(copyB.build());
306 actions.add(actionItem++, AB.build());
308 CopyTtlInBuilder copyTtlInBuilder = new CopyTtlInBuilder();
310 ActionBuilder AB1 = new ActionBuilder();
311 AB1.setAction(copyTtlInBuilder.build());
313 actions.add(actionItem++, AB1.build());
317 private void MplsTtlActionData() {
319 SetMplsTtlActionBuilder setMplsTtlActionB = new SetMplsTtlActionBuilder();
321 setMplsTtlActionB.setMplsTtl((short) 10);
322 ActionBuilder AB1 = new ActionBuilder();
323 AB1.setAction(setMplsTtlActionB.build());
325 actions.add(actionItem++, AB1.build());
327 DecMplsTtlBuilder decMplsTtlB = new DecMplsTtlBuilder();
329 ActionBuilder AB = new ActionBuilder();
330 AB.setAction(decMplsTtlB.build());
332 actions.add(actionItem++, AB1.build());
335 private void vlanActionData() {
336 PushVlanActionBuilder pvB = new PushVlanActionBuilder();
338 pvB.setVlanId(new VlanId(10));
340 ActionBuilder AB1 = new ActionBuilder();
341 AB1.setAction(pvB.build());
343 actions.add(actionItem++, AB1.build());
345 PopVlanActionBuilder popVAB = new PopVlanActionBuilder();
347 ActionBuilder AB = new ActionBuilder();
348 AB.setAction(popVAB.build());
350 actions.add(actionItem++, AB.build());
354 private void mplsActionData() {
356 PushMplsActionBuilder pushMB = new PushMplsActionBuilder();
357 pushMB.setEthernetType(10);
359 ActionBuilder AB = new ActionBuilder();
360 AB.setAction(pushMB.build());
362 actions.add(actionItem++, AB.build());
364 PopMplsActionBuilder popMB = new PopMplsActionBuilder();
365 popMB.setEthernetType(10);
367 ActionBuilder AB1 = new ActionBuilder();
368 AB1.setAction(popMB.build());
370 actions.add(actionItem++, AB1.build());
373 private void setQueueActionData() {
375 SetQueueActionBuilder setQB = new SetQueueActionBuilder();
376 setQB.setQueue("99");
378 ActionBuilder AB1 = new ActionBuilder();
379 AB1.setAction(setQB.build());
381 actions.add(actionItem++, AB1.build());