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 * Contributor: usha.m.s@ericsson.com
10 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
12 import com.google.common.collect.ImmutableList;
13 import java.math.BigInteger;
14 import java.util.ArrayList;
15 import java.util.List;
16 import org.junit.Assert;
17 import org.junit.Test;
18 import org.opendaylight.openflowplugin.openflow.md.util.OpenflowPortsUtil;
19 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlInCaseBuilder;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCase;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCaseBuilder;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCaseBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetMplsTtlActionCaseBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.copy.ttl.in._case.CopyTtlIn;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.copy.ttl.in._case.CopyTtlInBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.group.action._case.GroupAction;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.group.action._case.GroupActionBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.output.action._case.OutputActionBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.mpls.ttl.action._case.SetMplsTtlAction;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.mpls.ttl.action._case.SetMplsTtlActionBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.AddGroupInput;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.AddGroupInputBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.BucketId;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.Buckets;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.BucketsBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.Bucket;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupModCommand;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupType;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GroupModInputBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.buckets.grouping.BucketsList;
48 public class GroupConvertorTest {
51 * test of {@link GroupConvertor#toGroupModInput(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, short, java.math.BigInteger)}
54 public void testGroupModConvertorwithallParameters() {
56 final AddGroupInputBuilder addGroupBuilder = new AddGroupInputBuilder();
58 addGroupBuilder.setGroupId(new GroupId(10L));
60 addGroupBuilder.setGroupType(GroupTypes.GroupAll);
61 final List<Bucket> bucketList = new ArrayList<Bucket>();
62 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>();
63 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>();
68 final GroupActionBuilder groupActionBuilder = new GroupActionBuilder();
69 groupActionBuilder.setGroup("005");
70 final GroupAction groupIdaction = groupActionBuilder.build();
71 final ActionBuilder actionsB = new ActionBuilder();
72 actionsB.setOrder(actionOrder++).setAction(new GroupActionCaseBuilder().setGroupAction(groupIdaction).build());
75 final GroupActionBuilder groupActionBuilder1 = new GroupActionBuilder();
76 groupActionBuilder1.setGroup("006");
77 final GroupAction groupIdaction1 = groupActionBuilder.build();
78 final ActionBuilder actionsB1 = new ActionBuilder();
79 actionsB1.setOrder(actionOrder++).setAction(new GroupActionCaseBuilder().setGroupAction(groupIdaction1).build());
81 actionsList.add(actionsB.build());
82 actionsList.add(actionsB1.build());
85 final BucketsBuilder bucketsB = new BucketsBuilder();
87 final BucketBuilder bucketB = new BucketBuilder();
88 bucketB.setWeight(10);
89 bucketB.setWatchPort(20L);
90 bucketB.setWatchGroup(22L);
92 bucketB.setAction(actionsList);
93 final Bucket bucket = bucketB.build();
95 bucketList.add(bucket); // List of bucket
97 final BucketBuilder bucketB1 = new BucketBuilder();
98 bucketB1.setWeight(50);
99 bucketB1.setWatchPort(60L);
100 bucketB1.setWatchGroup(70L);
103 final CopyTtlInBuilder copyTtlB = new CopyTtlInBuilder();
104 final CopyTtlIn copyTtl = copyTtlB.build();
105 final ActionBuilder actionsB2 = new ActionBuilder();
106 actionsB2.setOrder(actionOrder++).setAction(new CopyTtlInCaseBuilder().setCopyTtlIn(copyTtl).build());
109 final SetMplsTtlActionBuilder setMplsTtlActionBuilder = new SetMplsTtlActionBuilder();
110 setMplsTtlActionBuilder.setMplsTtl((short) 0X1);
111 final SetMplsTtlAction setMAction = setMplsTtlActionBuilder.build();
112 final ActionBuilder actionsB3 = new ActionBuilder();
114 actionsB3.setOrder(actionOrder++).setAction(new SetMplsTtlActionCaseBuilder().setSetMplsTtlAction(setMAction).build());
117 actionsList1.add(actionsB2.build());
118 actionsList1.add(actionsB3.build());
120 bucketB1.setAction(actionsList);
122 final Bucket bucket1 = bucketB1.build(); // second bucket
124 bucketList.add(bucket1);
126 bucketsB.setBucket(bucketList);// List of bucket added to the Buckets
127 final Buckets buckets = bucketsB.build();
129 addGroupBuilder.setBuckets(buckets);
131 final GroupModInputBuilder outAddGroupInput = GroupConvertor.toGroupModInput(addGroupBuilder.build(), (short) 0X4, BigInteger.valueOf(1));
133 Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
134 Assert.assertEquals(GroupType.OFPGTALL, outAddGroupInput.getType());
136 Assert.assertEquals(10L, (long) outAddGroupInput.getGroupId().getValue());
137 Assert.assertEquals(10, (int) outAddGroupInput.getBucketsList().get(0).getWeight());
138 Assert.assertEquals(20L, (long) outAddGroupInput.getBucketsList().get(0).getWatchPort().getValue());
139 Assert.assertEquals((Long) 22L, outAddGroupInput.getBucketsList().get(0).getWatchGroup());
141 final List<Action> outActionList = outAddGroupInput.getBucketsList().get(0).getAction();
142 for (int outItem = 0; outItem < outActionList.size(); outItem++) {
143 final Action action = outActionList
145 if (action.getActionChoice() instanceof GroupActionCase) {
146 Assert.assertEquals((Long) 5L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
149 // TODO:setMplsTTL :OF layer doesnt have get();
152 Assert.assertEquals((Integer) 50, outAddGroupInput.getBucketsList().get(1).getWeight());
153 Assert.assertEquals((long) 60, (long) outAddGroupInput.getBucketsList().get(1).getWatchPort().getValue());
154 Assert.assertEquals((Long) 70L, outAddGroupInput.getBucketsList().get(1).getWatchGroup());
155 final List<Action> outActionList1 = outAddGroupInput.getBucketsList().get(1).getAction();
156 for (int outItem = 0; outItem < outActionList1.size(); outItem++) {
157 final Action action = outActionList1
159 if (action.getActionChoice() instanceof GroupActionCase) {
161 Assert.assertEquals((Long) 6L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
165 // TODO:setMplsTTL :OF layer doesnt have get();
171 * test of {@link GroupConvertor#toGroupModInput(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, short, java.math.BigInteger)}
174 public void testGroupModConvertorNoBucket() {
175 final AddGroupInputBuilder addGroupBuilder = new AddGroupInputBuilder();
177 addGroupBuilder.setGroupId(new GroupId(10L));
179 addGroupBuilder.setGroupType(GroupTypes.GroupAll);
181 final GroupModInputBuilder outAddGroupInput = GroupConvertor.toGroupModInput(addGroupBuilder.build(), (short) 0X4, BigInteger.valueOf(1));
183 Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
184 Assert.assertEquals(GroupType.OFPGTALL, outAddGroupInput.getType());
188 * test of {@link GroupConvertor#toGroupModInput(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, short, java.math.BigInteger)}
191 public void testGroupModConvertorBucketwithNOWieghtValuesForGroupTypeFastFailure() {
195 final AddGroupInputBuilder addGroupBuilder = new AddGroupInputBuilder();
197 addGroupBuilder.setGroupId(new GroupId(10L));
199 addGroupBuilder.setGroupType(GroupTypes.GroupFf);
200 final List<Bucket> bucketList = new ArrayList<Bucket>();
201 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>();
202 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>();
205 actionsList.add(assembleActionBuilder("005", actionOrder++).build());
207 actionsList.add(assembleActionBuilder("006", actionOrder++).build());
208 // .. and mr.Bond is not coming today
210 final BucketsBuilder bucketsB = new BucketsBuilder();
212 final BucketBuilder bucketB = new BucketBuilder();
214 bucketB.setAction(actionsList);
215 final Bucket bucket = bucketB.build();
217 bucketList.add(bucket); // List of bucket
220 final BucketBuilder bucketB1 = new BucketBuilder();
223 actionsList1.add(assembleCopyTtlInBuilder(actionOrder++).build());
225 actionsList1.add(assembleSetMplsTtlActionBuilder(actionOrder++).build());
227 bucketB1.setAction(actionsList1);
229 final Bucket bucket1 = bucketB1.build(); // second bucket
231 bucketList.add(bucket1);
233 bucketsB.setBucket(bucketList);// List of bucket added to the Buckets
234 final Buckets buckets = bucketsB.build();
236 addGroupBuilder.setBuckets(buckets);
238 final GroupModInputBuilder outAddGroupInput = GroupConvertor.toGroupModInput(addGroupBuilder.build(), (short) 0X4, BigInteger.valueOf(1));
240 Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
241 Assert.assertEquals(GroupType.OFPGTFF, outAddGroupInput.getType());
243 Assert.assertEquals(10L, outAddGroupInput.getGroupId().getValue().longValue());
245 final List<Action> outActionList = outAddGroupInput.getBucketsList().get(0).getAction();
246 for (int outItem = 0; outItem < outActionList.size(); outItem++) {
247 final Action action = outActionList
249 if (action.getActionChoice() instanceof GroupActionCase) {
250 Assert.assertEquals((Long) 5L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
254 final List<Action> outActionList1 = outAddGroupInput.getBucketsList().get(1).getAction();
255 for (int outItem = 0; outItem < outActionList1.size(); outItem++) {
256 final Action action = outActionList1
258 if (action.getActionChoice() instanceof GroupActionCase) {
259 Assert.assertEquals((Long) 6L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
265 * test of {@link GroupConvertor#toGroupModInput(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, short, java.math.BigInteger)}
268 public void testGroupModConvertSortedBuckets() {
270 final int actionOrder = 0;
272 final ArrayList<Bucket> bucket = new ArrayList<Bucket>();
274 bucket.add(new BucketBuilder()
275 .setBucketId(new BucketId((long) 4))
276 .setWatchPort((long)2)
277 .setWatchGroup((long) 1)
278 .setAction(ImmutableList.of(new ActionBuilder()
280 .setAction(new OutputActionCaseBuilder()
281 .setOutputAction(new OutputActionBuilder()
282 .setOutputNodeConnector(new Uri("openflow:1:2"))
288 bucket.add(new BucketBuilder()
289 .setBucketId(new BucketId((long) 3))
290 .setWatchPort((long)6)
291 .setWatchGroup((long) 1)
292 .setAction(ImmutableList.of(new ActionBuilder()
294 .setAction(new OutputActionCaseBuilder()
295 .setOutputAction(new OutputActionBuilder()
296 .setOutputNodeConnector(new Uri("openflow:1:6"))
302 bucket.add(new BucketBuilder()
303 .setBucketId(new BucketId((long) 2))
304 .setWatchPort((long)5)
305 .setWatchGroup((long) 1)
306 .setAction(ImmutableList.of(new ActionBuilder()
308 .setAction(new OutputActionCaseBuilder()
309 .setOutputAction(new OutputActionBuilder()
310 .setOutputNodeConnector(new Uri("openflow:1:5"))
316 bucket.add(new BucketBuilder()
317 .setBucketId(new BucketId((long) 1))
318 .setWatchPort((long)4)
319 .setWatchGroup((long) 1)
320 .setAction(ImmutableList.of(new ActionBuilder()
322 .setAction(new OutputActionCaseBuilder()
323 .setOutputAction(new OutputActionBuilder()
324 .setOutputNodeConnector(new Uri("openflow:1:4"))
330 bucket.add(new BucketBuilder()
331 .setBucketId(new BucketId((long) 0))
332 .setWatchPort((long)3)
333 .setWatchGroup((long) 1)
334 .setAction(ImmutableList.of(new ActionBuilder()
336 .setAction(new OutputActionCaseBuilder()
337 .setOutputAction(new OutputActionBuilder()
338 .setOutputNodeConnector(new Uri("openflow:1:3"))
345 final AddGroupInput input = new AddGroupInputBuilder()
346 .setGroupId(new GroupId((long) 1))
348 .setGroupType(GroupTypes.GroupFf)
349 .setBuckets(new BucketsBuilder()
354 OpenflowPortsUtil.init();
356 final GroupModInputBuilder outAddGroupInput = GroupConvertor.toGroupModInput(input, (short) 0X4, BigInteger.valueOf(1));
358 final List<BucketsList> bucketList = outAddGroupInput.getBucketsList();
359 Assert.assertEquals( Long.valueOf(1), bucketList.get(0).getWatchGroup());
360 Assert.assertEquals( Long.valueOf(3), bucketList.get(0).getWatchPort().getValue());
362 Assert.assertEquals( Long.valueOf(1), bucketList.get(1).getWatchGroup());
363 Assert.assertEquals( Long.valueOf(4), bucketList.get(1).getWatchPort().getValue());
365 Assert.assertEquals( Long.valueOf(1), bucketList.get(2).getWatchGroup());
366 Assert.assertEquals( Long.valueOf(5), bucketList.get(2).getWatchPort().getValue());
368 Assert.assertEquals( Long.valueOf(1), bucketList.get(3).getWatchGroup());
369 Assert.assertEquals( Long.valueOf(6), bucketList.get(3).getWatchPort().getValue());
371 Assert.assertEquals( Long.valueOf(1), bucketList.get(4).getWatchGroup());
372 Assert.assertEquals( Long.valueOf(2), bucketList.get(4).getWatchPort().getValue());
380 private static ActionBuilder assembleSetMplsTtlActionBuilder(final int actionOrder) {
381 final SetMplsTtlActionBuilder setMplsTtlActionBuilder = new SetMplsTtlActionBuilder();
382 setMplsTtlActionBuilder.setMplsTtl((short) 0X1);
383 final SetMplsTtlActionCaseBuilder setMplsTtlActionCaseBuilder = new SetMplsTtlActionCaseBuilder();
384 setMplsTtlActionCaseBuilder.setSetMplsTtlAction(setMplsTtlActionBuilder.build());
385 final ActionBuilder actionsB3 = new ActionBuilder();
386 actionsB3.setOrder(actionOrder).setAction(setMplsTtlActionCaseBuilder.build());
393 private static ActionBuilder assembleCopyTtlInBuilder(final int actionOrder) {
394 final CopyTtlInBuilder copyTtlB = new CopyTtlInBuilder();
395 final CopyTtlInCaseBuilder copyTtlInCaseBuilder = new CopyTtlInCaseBuilder();
396 copyTtlInCaseBuilder.setCopyTtlIn(copyTtlB.build());
397 final ActionBuilder actionsB2 = new ActionBuilder();
398 actionsB2.setOrder(actionOrder).setAction(copyTtlInCaseBuilder.build());
403 * @param groupName name of group
406 private static ActionBuilder assembleActionBuilder(final String groupName, final int actionOrder) {
407 final GroupActionBuilder groupActionBuilder = new GroupActionBuilder();
408 groupActionBuilder.setGroup(groupName);
409 final GroupActionCaseBuilder groupActionCaseBuilder = new GroupActionCaseBuilder();
410 groupActionCaseBuilder.setGroupAction(groupActionBuilder.build());
411 final ActionBuilder actionsBld = new ActionBuilder();
412 actionsBld.setOrder(actionOrder).setAction(groupActionCaseBuilder.build());
417 * test of {@link GroupConvertor#toGroupModInput(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, short, java.math.BigInteger)} )}
420 public void testGroupModConvertorBucketwithNOWieghtValuesForGroupTypeAll() {
424 final AddGroupInputBuilder addGroupBuilder = new AddGroupInputBuilder();
426 addGroupBuilder.setGroupId(new GroupId(10L));
428 addGroupBuilder.setGroupType(GroupTypes.GroupAll);
429 final List<Bucket> bucketList = new ArrayList<Bucket>();
430 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>();
431 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>();
434 actionsList.add(assembleActionBuilder("005", actionOrder++).build());
436 actionsList.add(assembleActionBuilder("006", actionOrder++).build());
438 final BucketsBuilder bucketsB = new BucketsBuilder();
440 final BucketBuilder bucketB = new BucketBuilder();
442 bucketB.setAction(actionsList);
443 final Bucket bucket = bucketB.build();
445 bucketList.add(bucket); // List of bucket
447 final BucketBuilder bucketB1 = new BucketBuilder();
450 actionsList1.add(assembleCopyTtlInBuilder(actionOrder++).build());
452 actionsList1.add(assembleSetMplsTtlActionBuilder(actionOrder++).build());
454 bucketB1.setAction(actionsList);
456 final Bucket bucket1 = bucketB1.build(); // second bucket
458 bucketList.add(bucket1);
460 bucketsB.setBucket(bucketList);// List of bucket added to the Buckets
461 final Buckets buckets = bucketsB.build();
463 addGroupBuilder.setBuckets(buckets);
465 final GroupModInputBuilder outAddGroupInput = GroupConvertor.toGroupModInput(addGroupBuilder.build(), (short) 0X4, BigInteger.valueOf(1));
467 Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
468 Assert.assertEquals(GroupType.OFPGTALL, outAddGroupInput.getType());
470 Assert.assertEquals(10L, outAddGroupInput.getGroupId().getValue().longValue());
472 final List<Action> outActionList = outAddGroupInput.getBucketsList().get(0).getAction();
473 for (int outItem = 0; outItem < outActionList.size(); outItem++) {
474 final Action action = outActionList
476 if (action.getActionChoice() instanceof GroupActionCase) {
477 Assert.assertEquals((Long) 5L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
483 final List<Action> outActionList1 = outAddGroupInput.getBucketsList().get(1).getAction();
484 for (int outItem = 0; outItem < outActionList1.size(); outItem++) {
485 final Action action = outActionList1
487 if (action.getActionChoice() instanceof GroupActionCase) {
489 Assert.assertEquals((Long) 6L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());