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.PortAction;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.PortNumberMatchEntry;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.CopyTtlIn;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.CopyTtlOut;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.DecNwTtl;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Output;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PopMpls;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PushMpls;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PushPbb;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PushVlan;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetField;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetMplsTtl;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetNwTtl;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetQueue;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.ActionsList;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.InPort;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OpenflowBasicClass;
53 public class ActionConvertorTest {
55 List<Action> actions = new ArrayList<Action>();
56 static Integer actionItem = 0;
59 public void testActionConvertorwithallParameters() {
70 setExperimenterData();
71 List<ActionsList> OFActionsList = ActionConvertor.getActionList(actions, (short) 0X4);
73 OutputActions(OFActionsList);
77 private void setExperimenterData() {
79 // TODO:SAL API Missing
83 private void setFieldData() {
85 SetFieldBuilder setFA = new SetFieldBuilder();
87 MatchBuilder matchBuilder = new MatchBuilder();
89 matchBuilder.setInPort(2125L);
91 SetFieldBuilder setFB = new SetFieldBuilder();
92 setFB.setMatch(matchBuilder.build());
94 ActionBuilder AB = new ActionBuilder();
95 AB.setAction(setFB.build());
97 actions.add(actionItem++, AB.build());
101 private void pbbActionData() {
102 PushPbbActionBuilder pushpbb = new PushPbbActionBuilder();
103 pushpbb.setEthernetType(10);
105 ActionBuilder AB = new ActionBuilder();
106 AB.setAction(pushpbb.build());
108 actions.add(actionItem++, AB.build());
110 PopPbbActionBuilder popPBB = new PopPbbActionBuilder();
112 ActionBuilder AB1 = new ActionBuilder();
113 AB1.setAction(popPBB.build());
115 actions.add(actionItem++, AB1.build());
119 private void NwTtlAction() {
120 SetNwTtlActionBuilder setNwTtlActionBuilder = new SetNwTtlActionBuilder();
122 setNwTtlActionBuilder.setNwTtl((short) 1);
123 ActionBuilder AB = new ActionBuilder();
124 AB.setAction(setNwTtlActionBuilder.build());
126 actions.add(actionItem++, AB.build());
128 DecNwTtlBuilder necNwTtlBuilder = new DecNwTtlBuilder();
131 ActionBuilder AB1 = new ActionBuilder();
132 AB1.setAction(necNwTtlBuilder.build());
134 actions.add(actionItem++, AB1.build());
138 private void setGroupAction() {
140 GroupActionBuilder grpIdAB = new GroupActionBuilder();
141 grpIdAB.setGroup("98");
143 ActionBuilder AB = new ActionBuilder();
144 AB.setAction(grpIdAB.build());
146 actions.add(actionItem++, AB.build());
150 private void OutputActions(List<ActionsList> oFActionsList) {
152 for (int item = 0; item < oFActionsList.size(); item++) {
154 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.Action action = oFActionsList
155 .get(item).getAction();
157 if (action.getType().equals(Output.class)) {
158 Assert.assertEquals((Integer) 10, (action.getAugmentation(MaxLengthAction.class)).getMaxLength());
159 long port = 4294967293L;
160 Assert.assertEquals(port, (long) (action.getAugmentation(PortAction.class)).getPort().getValue());
164 if (action.getType().equals(CopyTtlIn.class)) {
165 Assert.assertEquals(action.getType(), CopyTtlIn.class);
168 if (action.getType().equals(CopyTtlOut.class)) {
170 Assert.assertEquals(action.getType(),
171 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.CopyTtlOut.class);
175 if (action.getType().equals(
176 // TODO:getMplsTtl is missing.
178 Assert.assertEquals(action.getType(), SetMplsTtl.class);
181 if (action.getType().equals(
182 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.DecMplsTtl.class)) {
183 Assert.assertEquals(action.getType(),
184 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.DecMplsTtl.class);
188 if (action.getType().equals(PushMpls.class)) {
190 EthertypeAction etherTypeAction = action
191 .getAugmentation(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthertypeAction.class);
193 if (etherTypeAction != null) {
196 Assert.assertEquals((Integer) 10, etherTypeAction.getEthertype().getValue());
200 if (action.getType().equals(PopMpls.class)) {
201 Assert.assertEquals((Integer) 10, (action.getAugmentation(EthertypeAction.class)).getEthertype()
206 if (action.getType().equals(
208 // TODO:SetQueue,I dont have getQueueId
210 Assert.assertEquals(action.getType(), SetQueue.class);
213 if (action.getType().equals(
215 GroupIdAction.class)) {
217 Assert.assertEquals(98, (long) (action.getAugmentation(GroupIdAction.class)).getGroupId());
221 if (action.getType().equals(
225 Assert.assertEquals(action.getType(), PushVlan.class);
228 if (action.getType().equals(
232 Assert.assertEquals(action.getType(), PopVlan.class);
236 if (action.getType().equals(
240 Assert.assertEquals(action.getType(), SetNwTtl.class);
243 if (action.getType().equals(
247 Assert.assertEquals(action.getType(), DecNwTtl.class);
250 if (action.getType().equals(PushPbb.class)) {
252 EthertypeAction etherTypeAction = action
253 .getAugmentation(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.EthertypeAction.class);
255 if (etherTypeAction != null) {
257 Assert.assertEquals((Integer) 10, etherTypeAction.getEthertype().getValue());
261 if (action.getType().equals(PopMpls.class)) {
262 Assert.assertEquals(action.getType(), PopMpls.class);
266 if (action.getType().equals(SetField.class)) {
268 OxmFieldsAction sf = action.getAugmentation(OxmFieldsAction.class);
270 Assert.assertEquals(OpenflowBasicClass.class, sf.getMatchEntries().get(0).getOxmClass());
272 if (sf.getMatchEntries().get(0).getOxmMatchField().equals(InPort.class)) {
273 Assert.assertEquals(2125, sf.getMatchEntries().get(0).getAugmentation(PortNumberMatchEntry.class)
274 .getPortNumber().getValue().intValue());
285 private void OutputActionData() {
287 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();
288 outputB.setMaxLength(10);
289 Uri uri = new Uri(NodeConnectorIDType.CONTROLLER);
290 outputB.setOutputNodeConnector(uri);
292 ActionBuilder AB = new ActionBuilder();
293 AB.setAction(outputB.build());
295 actions.add(actionItem++, AB.build());
299 private void CopyTtlData() {
300 CopyTtlOutBuilder copyB = new CopyTtlOutBuilder();
302 ActionBuilder AB = new ActionBuilder();
303 AB.setAction(copyB.build());
305 actions.add(actionItem++, AB.build());
307 CopyTtlInBuilder copyTtlInBuilder = new CopyTtlInBuilder();
309 ActionBuilder AB1 = new ActionBuilder();
310 AB1.setAction(copyTtlInBuilder.build());
312 actions.add(actionItem++, AB1.build());
316 private void MplsTtlActionData() {
318 SetMplsTtlActionBuilder setMplsTtlActionB = new SetMplsTtlActionBuilder();
320 setMplsTtlActionB.setMplsTtl((short) 10);
321 ActionBuilder AB1 = new ActionBuilder();
322 AB1.setAction(setMplsTtlActionB.build());
324 actions.add(actionItem++, AB1.build());
326 DecMplsTtlBuilder decMplsTtlB = new DecMplsTtlBuilder();
328 ActionBuilder AB = new ActionBuilder();
329 AB.setAction(decMplsTtlB.build());
331 actions.add(actionItem++, AB1.build());
334 private void vlanActionData() {
335 PushVlanActionBuilder pvB = new PushVlanActionBuilder();
337 pvB.setVlanId(new VlanId(10));
339 ActionBuilder AB1 = new ActionBuilder();
340 AB1.setAction(pvB.build());
342 actions.add(actionItem++, AB1.build());
344 PopVlanActionBuilder popVAB = new PopVlanActionBuilder();
346 ActionBuilder AB = new ActionBuilder();
347 AB.setAction(popVAB.build());
349 actions.add(actionItem++, AB.build());
353 private void mplsActionData() {
355 PushMplsActionBuilder pushMB = new PushMplsActionBuilder();
356 pushMB.setEthernetType(10);
358 ActionBuilder AB = new ActionBuilder();
359 AB.setAction(pushMB.build());
361 actions.add(actionItem++, AB.build());
363 PopMplsActionBuilder popMB = new PopMplsActionBuilder();
364 popMB.setEthernetType(10);
366 ActionBuilder AB1 = new ActionBuilder();
367 AB1.setAction(popMB.build());
369 actions.add(actionItem++, AB1.build());
372 private void setQueueActionData() {
374 SetQueueActionBuilder setQB = new SetQueueActionBuilder();
375 setQB.setQueue("99");
377 ActionBuilder AB1 = new ActionBuilder();
378 AB1.setAction(setQB.build());
380 actions.add(actionItem++, AB1.build());