2 * Copyright (c) 2014 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
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
8 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
10 import com.google.common.collect.ImmutableList;
11 import java.math.BigInteger;
12 import java.util.ArrayList;
13 import java.util.List;
14 import org.junit.Assert;
15 import org.junit.Test;
16 import org.opendaylight.openflowplugin.openflow.md.util.OpenflowPortsUtil;
17 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlInCaseBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCase;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCaseBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCaseBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetMplsTtlActionCaseBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.copy.ttl.in._case.CopyTtlIn;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.copy.ttl.in._case.CopyTtlInBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.group.action._case.GroupAction;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.group.action._case.GroupActionBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.output.action._case.OutputActionBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.mpls.ttl.action._case.SetMplsTtlAction;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.mpls.ttl.action._case.SetMplsTtlActionBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.AddGroupInput;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.AddGroupInputBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.BucketId;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.Buckets;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.BucketsBuilder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.Bucket;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupModCommand;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupType;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GroupModInputBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.buckets.grouping.BucketsList;
46 public class GroupConvertorTest {
49 * test of {@link GroupConvertor#toGroupModInput(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, short, java.math.BigInteger)}
52 public void testGroupModConvertorwithallParameters() {
54 final AddGroupInputBuilder addGroupBuilder = new AddGroupInputBuilder();
56 addGroupBuilder.setGroupId(new GroupId(10L));
58 addGroupBuilder.setGroupType(GroupTypes.GroupAll);
59 final List<Bucket> bucketList = new ArrayList<Bucket>();
60 final List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action> actionsList = new ArrayList<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action>();
61 final List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action> actionsList1 = new ArrayList<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action>();
66 final GroupActionBuilder groupActionBuilder = new GroupActionBuilder();
67 groupActionBuilder.setGroup("005");
68 final GroupAction groupIdaction = groupActionBuilder.build();
69 final ActionBuilder actionsB = new ActionBuilder();
70 actionsB.setOrder(actionOrder++).setAction(new GroupActionCaseBuilder().setGroupAction(groupIdaction).build());
73 final GroupActionBuilder groupActionBuilder1 = new GroupActionBuilder();
74 groupActionBuilder1.setGroup("006");
75 final GroupAction groupIdaction1 = groupActionBuilder.build();
76 final ActionBuilder actionsB1 = new ActionBuilder();
77 actionsB1.setOrder(actionOrder++).setAction(new GroupActionCaseBuilder().setGroupAction(groupIdaction1).build());
79 actionsList.add(actionsB.build());
80 actionsList.add(actionsB1.build());
83 final BucketsBuilder bucketsB = new BucketsBuilder();
85 final BucketBuilder bucketB = new BucketBuilder();
86 bucketB.setWeight(10);
87 bucketB.setWatchPort(20L);
88 bucketB.setWatchGroup(22L);
90 bucketB.setAction(actionsList);
91 final Bucket bucket = bucketB.build();
93 bucketList.add(bucket); // List of bucket
95 final BucketBuilder bucketB1 = new BucketBuilder();
96 bucketB1.setWeight(50);
97 bucketB1.setWatchPort(60L);
98 bucketB1.setWatchGroup(70L);
101 final CopyTtlInBuilder copyTtlB = new CopyTtlInBuilder();
102 final CopyTtlIn copyTtl = copyTtlB.build();
103 final ActionBuilder actionsB2 = new ActionBuilder();
104 actionsB2.setOrder(actionOrder++).setAction(new CopyTtlInCaseBuilder().setCopyTtlIn(copyTtl).build());
107 final SetMplsTtlActionBuilder setMplsTtlActionBuilder = new SetMplsTtlActionBuilder();
108 setMplsTtlActionBuilder.setMplsTtl((short) 0X1);
109 final SetMplsTtlAction setMAction = setMplsTtlActionBuilder.build();
110 final ActionBuilder actionsB3 = new ActionBuilder();
112 actionsB3.setOrder(actionOrder++).setAction(new SetMplsTtlActionCaseBuilder().setSetMplsTtlAction(setMAction).build());
115 actionsList1.add(actionsB2.build());
116 actionsList1.add(actionsB3.build());
118 bucketB1.setAction(actionsList);
120 final Bucket bucket1 = bucketB1.build(); // second bucket
122 bucketList.add(bucket1);
124 bucketsB.setBucket(bucketList);// List of bucket added to the Buckets
125 final Buckets buckets = bucketsB.build();
127 addGroupBuilder.setBuckets(buckets);
129 final GroupModInputBuilder outAddGroupInput = GroupConvertor.toGroupModInput(addGroupBuilder.build(), (short) 0X4, BigInteger.valueOf(1));
131 Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
132 Assert.assertEquals(GroupType.OFPGTALL, outAddGroupInput.getType());
134 Assert.assertEquals(10L, (long) outAddGroupInput.getGroupId().getValue());
135 Assert.assertEquals(10, (int) outAddGroupInput.getBucketsList().get(0).getWeight());
136 Assert.assertEquals(20L, (long) outAddGroupInput.getBucketsList().get(0).getWatchPort().getValue());
137 Assert.assertEquals((Long) 22L, outAddGroupInput.getBucketsList().get(0).getWatchGroup());
139 final List<Action> outActionList = outAddGroupInput.getBucketsList().get(0).getAction();
140 for (int outItem = 0; outItem < outActionList.size(); outItem++) {
141 final Action action = outActionList
143 if (action.getActionChoice() instanceof GroupActionCase) {
144 Assert.assertEquals((Long) 5L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
147 // TODO:setMplsTTL :OF layer doesnt have get();
150 Assert.assertEquals((Integer) 50, outAddGroupInput.getBucketsList().get(1).getWeight());
151 Assert.assertEquals((long) 60, (long) outAddGroupInput.getBucketsList().get(1).getWatchPort().getValue());
152 Assert.assertEquals((Long) 70L, outAddGroupInput.getBucketsList().get(1).getWatchGroup());
153 final List<Action> outActionList1 = outAddGroupInput.getBucketsList().get(1).getAction();
154 for (int outItem = 0; outItem < outActionList1.size(); outItem++) {
155 final Action action = outActionList1
157 if (action.getActionChoice() instanceof GroupActionCase) {
159 Assert.assertEquals((Long) 6L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
163 // TODO:setMplsTTL :OF layer doesnt have get();
169 * test of {@link GroupConvertor#toGroupModInput(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, short, java.math.BigInteger)}
172 public void testGroupModConvertorNoBucket() {
173 final AddGroupInputBuilder addGroupBuilder = new AddGroupInputBuilder();
175 addGroupBuilder.setGroupId(new GroupId(10L));
177 addGroupBuilder.setGroupType(GroupTypes.GroupAll);
179 final GroupModInputBuilder outAddGroupInput = GroupConvertor.toGroupModInput(addGroupBuilder.build(), (short) 0X4, BigInteger.valueOf(1));
181 Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
182 Assert.assertEquals(GroupType.OFPGTALL, outAddGroupInput.getType());
186 * test of {@link GroupConvertor#toGroupModInput(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, short, java.math.BigInteger)}
189 public void testGroupModConvertorBucketwithNOWieghtValuesForGroupTypeFastFailure() {
193 final AddGroupInputBuilder addGroupBuilder = new AddGroupInputBuilder();
195 addGroupBuilder.setGroupId(new GroupId(10L));
197 addGroupBuilder.setGroupType(GroupTypes.GroupFf);
198 final List<Bucket> bucketList = new ArrayList<Bucket>();
199 final List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action> actionsList = new ArrayList<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action>();
200 final List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action> actionsList1 = new ArrayList<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action>();
203 actionsList.add(assembleActionBuilder("005", actionOrder++).build());
205 actionsList.add(assembleActionBuilder("006", actionOrder++).build());
206 // .. and mr.Bond is not coming today
208 final BucketsBuilder bucketsB = new BucketsBuilder();
210 final BucketBuilder bucketB = new BucketBuilder();
212 bucketB.setAction(actionsList);
213 final Bucket bucket = bucketB.build();
215 bucketList.add(bucket); // List of bucket
218 final BucketBuilder bucketB1 = new BucketBuilder();
221 actionsList1.add(assembleCopyTtlInBuilder(actionOrder++).build());
223 actionsList1.add(assembleSetMplsTtlActionBuilder(actionOrder++).build());
225 bucketB1.setAction(actionsList1);
227 final Bucket bucket1 = bucketB1.build(); // second bucket
229 bucketList.add(bucket1);
231 bucketsB.setBucket(bucketList);// List of bucket added to the Buckets
232 final Buckets buckets = bucketsB.build();
234 addGroupBuilder.setBuckets(buckets);
236 final GroupModInputBuilder outAddGroupInput = GroupConvertor.toGroupModInput(addGroupBuilder.build(), (short) 0X4, BigInteger.valueOf(1));
238 Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
239 Assert.assertEquals(GroupType.OFPGTFF, outAddGroupInput.getType());
241 Assert.assertEquals(10L, outAddGroupInput.getGroupId().getValue().longValue());
243 final List<Action> outActionList = outAddGroupInput.getBucketsList().get(0).getAction();
244 for (int outItem = 0; outItem < outActionList.size(); outItem++) {
245 final Action action = outActionList
247 if (action.getActionChoice() instanceof GroupActionCase) {
248 Assert.assertEquals((Long) 5L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
252 final List<Action> outActionList1 = outAddGroupInput.getBucketsList().get(1).getAction();
253 for (int outItem = 0; outItem < outActionList1.size(); outItem++) {
254 final Action action = outActionList1
256 if (action.getActionChoice() instanceof GroupActionCase) {
257 Assert.assertEquals((Long) 6L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
263 * test of {@link GroupConvertor#toGroupModInput(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, short, java.math.BigInteger)}
266 public void testGroupModConvertSortedBuckets() {
268 final int actionOrder = 0;
270 final ArrayList<Bucket> bucket = new ArrayList<Bucket>();
272 bucket.add(new BucketBuilder()
273 .setBucketId(new BucketId((long) 4))
274 .setWatchPort((long)2)
275 .setWatchGroup((long) 1)
276 .setAction(ImmutableList.of(new ActionBuilder()
278 .setAction(new OutputActionCaseBuilder()
279 .setOutputAction(new OutputActionBuilder()
280 .setOutputNodeConnector(new Uri("openflow:1:2"))
286 bucket.add(new BucketBuilder()
287 .setBucketId(new BucketId((long) 3))
288 .setWatchPort((long)6)
289 .setWatchGroup((long) 1)
290 .setAction(ImmutableList.of(new ActionBuilder()
292 .setAction(new OutputActionCaseBuilder()
293 .setOutputAction(new OutputActionBuilder()
294 .setOutputNodeConnector(new Uri("openflow:1:6"))
300 bucket.add(new BucketBuilder()
301 .setBucketId(new BucketId((long) 2))
302 .setWatchPort((long)5)
303 .setWatchGroup((long) 1)
304 .setAction(ImmutableList.of(new ActionBuilder()
306 .setAction(new OutputActionCaseBuilder()
307 .setOutputAction(new OutputActionBuilder()
308 .setOutputNodeConnector(new Uri("openflow:1:5"))
314 bucket.add(new BucketBuilder()
315 .setBucketId(new BucketId((long) 1))
316 .setWatchPort((long)4)
317 .setWatchGroup((long) 1)
318 .setAction(ImmutableList.of(new ActionBuilder()
320 .setAction(new OutputActionCaseBuilder()
321 .setOutputAction(new OutputActionBuilder()
322 .setOutputNodeConnector(new Uri("openflow:1:4"))
328 bucket.add(new BucketBuilder()
329 .setBucketId(new BucketId((long) 0))
330 .setWatchPort((long)3)
331 .setWatchGroup((long) 1)
332 .setAction(ImmutableList.of(new ActionBuilder()
334 .setAction(new OutputActionCaseBuilder()
335 .setOutputAction(new OutputActionBuilder()
336 .setOutputNodeConnector(new Uri("openflow:1:3"))
343 final AddGroupInput input = new AddGroupInputBuilder()
344 .setGroupId(new GroupId((long) 1))
346 .setGroupType(GroupTypes.GroupFf)
347 .setBuckets(new BucketsBuilder()
352 OpenflowPortsUtil.init();
354 final GroupModInputBuilder outAddGroupInput = GroupConvertor.toGroupModInput(input, (short) 0X4, BigInteger.valueOf(1));
356 final List<BucketsList> bucketList = outAddGroupInput.getBucketsList();
357 Assert.assertEquals( Long.valueOf(1), bucketList.get(0).getWatchGroup());
358 Assert.assertEquals( Long.valueOf(3), bucketList.get(0).getWatchPort().getValue());
360 Assert.assertEquals( Long.valueOf(1), bucketList.get(1).getWatchGroup());
361 Assert.assertEquals( Long.valueOf(4), bucketList.get(1).getWatchPort().getValue());
363 Assert.assertEquals( Long.valueOf(1), bucketList.get(2).getWatchGroup());
364 Assert.assertEquals( Long.valueOf(5), bucketList.get(2).getWatchPort().getValue());
366 Assert.assertEquals( Long.valueOf(1), bucketList.get(3).getWatchGroup());
367 Assert.assertEquals( Long.valueOf(6), bucketList.get(3).getWatchPort().getValue());
369 Assert.assertEquals( Long.valueOf(1), bucketList.get(4).getWatchGroup());
370 Assert.assertEquals( Long.valueOf(2), bucketList.get(4).getWatchPort().getValue());
378 private static ActionBuilder assembleSetMplsTtlActionBuilder(final int actionOrder) {
379 final SetMplsTtlActionBuilder setMplsTtlActionBuilder = new SetMplsTtlActionBuilder();
380 setMplsTtlActionBuilder.setMplsTtl((short) 0X1);
381 final SetMplsTtlActionCaseBuilder setMplsTtlActionCaseBuilder = new SetMplsTtlActionCaseBuilder();
382 setMplsTtlActionCaseBuilder.setSetMplsTtlAction(setMplsTtlActionBuilder.build());
383 final ActionBuilder actionsB3 = new ActionBuilder();
384 actionsB3.setOrder(actionOrder).setAction(setMplsTtlActionCaseBuilder.build());
391 private static ActionBuilder assembleCopyTtlInBuilder(final int actionOrder) {
392 final CopyTtlInBuilder copyTtlB = new CopyTtlInBuilder();
393 final CopyTtlInCaseBuilder copyTtlInCaseBuilder = new CopyTtlInCaseBuilder();
394 copyTtlInCaseBuilder.setCopyTtlIn(copyTtlB.build());
395 final ActionBuilder actionsB2 = new ActionBuilder();
396 actionsB2.setOrder(actionOrder).setAction(copyTtlInCaseBuilder.build());
401 * @param groupName name of group
404 private static ActionBuilder assembleActionBuilder(final String groupName, final int actionOrder) {
405 final GroupActionBuilder groupActionBuilder = new GroupActionBuilder();
406 groupActionBuilder.setGroup(groupName);
407 final GroupActionCaseBuilder groupActionCaseBuilder = new GroupActionCaseBuilder();
408 groupActionCaseBuilder.setGroupAction(groupActionBuilder.build());
409 final ActionBuilder actionsBld = new ActionBuilder();
410 actionsBld.setOrder(actionOrder).setAction(groupActionCaseBuilder.build());
415 * test of {@link GroupConvertor#toGroupModInput(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, short, java.math.BigInteger)} )}
418 public void testGroupModConvertorBucketwithNOWieghtValuesForGroupTypeAll() {
422 final AddGroupInputBuilder addGroupBuilder = new AddGroupInputBuilder();
424 addGroupBuilder.setGroupId(new GroupId(10L));
426 addGroupBuilder.setGroupType(GroupTypes.GroupAll);
427 final List<Bucket> bucketList = new ArrayList<Bucket>();
428 final List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action> actionsList = new ArrayList<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action>();
429 final List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action> actionsList1 = new ArrayList<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action>();
432 actionsList.add(assembleActionBuilder("005", actionOrder++).build());
434 actionsList.add(assembleActionBuilder("006", actionOrder++).build());
436 final BucketsBuilder bucketsB = new BucketsBuilder();
438 final BucketBuilder bucketB = new BucketBuilder();
440 bucketB.setAction(actionsList);
441 final Bucket bucket = bucketB.build();
443 bucketList.add(bucket); // List of bucket
445 final BucketBuilder bucketB1 = new BucketBuilder();
448 actionsList1.add(assembleCopyTtlInBuilder(actionOrder++).build());
450 actionsList1.add(assembleSetMplsTtlActionBuilder(actionOrder++).build());
452 bucketB1.setAction(actionsList);
454 final Bucket bucket1 = bucketB1.build(); // second bucket
456 bucketList.add(bucket1);
458 bucketsB.setBucket(bucketList);// List of bucket added to the Buckets
459 final Buckets buckets = bucketsB.build();
461 addGroupBuilder.setBuckets(buckets);
463 final GroupModInputBuilder outAddGroupInput = GroupConvertor.toGroupModInput(addGroupBuilder.build(), (short) 0X4, BigInteger.valueOf(1));
465 Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
466 Assert.assertEquals(GroupType.OFPGTALL, outAddGroupInput.getType());
468 Assert.assertEquals(10L, outAddGroupInput.getGroupId().getValue().longValue());
470 final List<Action> outActionList = outAddGroupInput.getBucketsList().get(0).getAction();
471 for (int outItem = 0; outItem < outActionList.size(); outItem++) {
472 final Action action = outActionList
474 if (action.getActionChoice() instanceof GroupActionCase) {
475 Assert.assertEquals((Long) 5L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
481 final List<Action> outActionList1 = outAddGroupInput.getBucketsList().get(1).getAction();
482 for (int outItem = 0; outItem < outActionList1.size(); outItem++) {
483 final Action action = outActionList1
485 if (action.getActionChoice() instanceof GroupActionCase) {
487 Assert.assertEquals((Long) 6L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());