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 java.util.Optional;
15 import org.junit.Assert;
16 import org.junit.Test;
17 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData;
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.Group;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.Buckets;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.BucketsBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.Bucket;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupModCommand;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupType;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GroupModInputBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.buckets.grouping.BucketsList;
49 public class GroupConvertorTest {
52 * test of {@link GroupConvertor#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData)} }
55 public void testGroupModConvertorwithallParameters() {
57 final AddGroupInputBuilder addGroupBuilder = new AddGroupInputBuilder();
59 addGroupBuilder.setGroupId(new GroupId(10L));
61 addGroupBuilder.setGroupType(GroupTypes.GroupAll);
62 final List<Bucket> bucketList = new ArrayList<Bucket>();
63 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>();
64 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>();
69 final GroupActionBuilder groupActionBuilder = new GroupActionBuilder();
70 groupActionBuilder.setGroup("005");
71 final GroupAction groupIdaction = groupActionBuilder.build();
72 final ActionBuilder actionsB = new ActionBuilder();
73 actionsB.setOrder(actionOrder++).setAction(new GroupActionCaseBuilder().setGroupAction(groupIdaction).build());
76 final GroupActionBuilder groupActionBuilder1 = new GroupActionBuilder();
77 groupActionBuilder1.setGroup("006");
78 final GroupAction groupIdaction1 = groupActionBuilder.build();
79 final ActionBuilder actionsB1 = new ActionBuilder();
80 actionsB1.setOrder(actionOrder++).setAction(new GroupActionCaseBuilder().setGroupAction(groupIdaction1).build());
82 actionsList.add(actionsB.build());
83 actionsList.add(actionsB1.build());
86 final BucketsBuilder bucketsB = new BucketsBuilder();
88 final BucketBuilder bucketB = new BucketBuilder();
89 bucketB.setWeight(10);
90 bucketB.setWatchPort(20L);
91 bucketB.setWatchGroup(22L);
93 bucketB.setAction(actionsList);
94 final Bucket bucket = bucketB.build();
96 bucketList.add(bucket); // List of bucket
98 final BucketBuilder bucketB1 = new BucketBuilder();
99 bucketB1.setWeight(50);
100 bucketB1.setWatchPort(60L);
101 bucketB1.setWatchGroup(70L);
104 final CopyTtlInBuilder copyTtlB = new CopyTtlInBuilder();
105 final CopyTtlIn copyTtl = copyTtlB.build();
106 final ActionBuilder actionsB2 = new ActionBuilder();
107 actionsB2.setOrder(actionOrder++).setAction(new CopyTtlInCaseBuilder().setCopyTtlIn(copyTtl).build());
110 final SetMplsTtlActionBuilder setMplsTtlActionBuilder = new SetMplsTtlActionBuilder();
111 setMplsTtlActionBuilder.setMplsTtl((short) 0X1);
112 final SetMplsTtlAction setMAction = setMplsTtlActionBuilder.build();
113 final ActionBuilder actionsB3 = new ActionBuilder();
115 actionsB3.setOrder(actionOrder++).setAction(new SetMplsTtlActionCaseBuilder().setSetMplsTtlAction(setMAction).build());
118 actionsList1.add(actionsB2.build());
119 actionsList1.add(actionsB3.build());
121 bucketB1.setAction(actionsList);
123 final Bucket bucket1 = bucketB1.build(); // second bucket
125 bucketList.add(bucket1);
127 bucketsB.setBucket(bucketList);// List of bucket added to the Buckets
128 final Buckets buckets = bucketsB.build();
130 addGroupBuilder.setBuckets(buckets);
132 VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData((short) 0X4);
133 data.setDatapathId(BigInteger.valueOf(1));
135 final GroupModInputBuilder outAddGroupInput = convert(addGroupBuilder.build(), data);
137 Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
138 Assert.assertEquals(GroupType.OFPGTALL, outAddGroupInput.getType());
140 Assert.assertEquals(10L, (long) outAddGroupInput.getGroupId().getValue());
141 Assert.assertEquals(10, (int) outAddGroupInput.getBucketsList().get(0).getWeight());
142 Assert.assertEquals(20L, (long) outAddGroupInput.getBucketsList().get(0).getWatchPort().getValue());
143 Assert.assertEquals((Long) 22L, outAddGroupInput.getBucketsList().get(0).getWatchGroup());
145 final List<Action> outActionList = outAddGroupInput.getBucketsList().get(0).getAction();
146 for (int outItem = 0; outItem < outActionList.size(); outItem++) {
147 final Action action = outActionList
149 if (action.getActionChoice() instanceof GroupActionCase) {
150 Assert.assertEquals((Long) 5L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
153 // TODO:setMplsTTL :OF layer doesnt have get();
156 Assert.assertEquals((Integer) 50, outAddGroupInput.getBucketsList().get(1).getWeight());
157 Assert.assertEquals((long) 60, (long) outAddGroupInput.getBucketsList().get(1).getWatchPort().getValue());
158 Assert.assertEquals((Long) 70L, outAddGroupInput.getBucketsList().get(1).getWatchGroup());
159 final List<Action> outActionList1 = outAddGroupInput.getBucketsList().get(1).getAction();
160 for (int outItem = 0; outItem < outActionList1.size(); outItem++) {
161 final Action action = outActionList1
163 if (action.getActionChoice() instanceof GroupActionCase) {
165 Assert.assertEquals((Long) 6L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
169 // TODO:setMplsTTL :OF layer doesnt have get();
175 * test of {@link GroupConvertor#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData)} }
178 public void testGroupModConvertorNoBucket() {
179 final AddGroupInputBuilder addGroupBuilder = new AddGroupInputBuilder();
181 addGroupBuilder.setGroupId(new GroupId(10L));
183 addGroupBuilder.setGroupType(GroupTypes.GroupAll);
185 VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData((short) 0X4);
186 data.setDatapathId(BigInteger.valueOf(1));
188 final GroupModInputBuilder outAddGroupInput = convert(addGroupBuilder.build(), data);
189 Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
190 Assert.assertEquals(GroupType.OFPGTALL, outAddGroupInput.getType());
194 * test of {@link GroupConvertor#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData)} }
197 public void testGroupModConvertorBucketwithNOWieghtValuesForGroupTypeFastFailure() {
201 final AddGroupInputBuilder addGroupBuilder = new AddGroupInputBuilder();
203 addGroupBuilder.setGroupId(new GroupId(10L));
205 addGroupBuilder.setGroupType(GroupTypes.GroupFf);
206 final List<Bucket> bucketList = new ArrayList<Bucket>();
207 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>();
208 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>();
211 actionsList.add(assembleActionBuilder("005", actionOrder++).build());
213 actionsList.add(assembleActionBuilder("006", actionOrder++).build());
214 // .. and mr.Bond is not coming today
216 final BucketsBuilder bucketsB = new BucketsBuilder();
218 final BucketBuilder bucketB = new BucketBuilder();
220 bucketB.setAction(actionsList);
221 final Bucket bucket = bucketB.build();
223 bucketList.add(bucket); // List of bucket
226 final BucketBuilder bucketB1 = new BucketBuilder();
229 actionsList1.add(assembleCopyTtlInBuilder(actionOrder++).build());
231 actionsList1.add(assembleSetMplsTtlActionBuilder(actionOrder++).build());
233 bucketB1.setAction(actionsList1);
235 final Bucket bucket1 = bucketB1.build(); // second bucket
237 bucketList.add(bucket1);
239 bucketsB.setBucket(bucketList);// List of bucket added to the Buckets
240 final Buckets buckets = bucketsB.build();
242 addGroupBuilder.setBuckets(buckets);
244 VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData((short) 0X4);
245 data.setDatapathId(BigInteger.valueOf(1));
247 final GroupModInputBuilder outAddGroupInput = convert(addGroupBuilder.build(), data);
249 Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
250 Assert.assertEquals(GroupType.OFPGTFF, outAddGroupInput.getType());
252 Assert.assertEquals(10L, outAddGroupInput.getGroupId().getValue().longValue());
254 final List<Action> outActionList = outAddGroupInput.getBucketsList().get(0).getAction();
255 for (int outItem = 0; outItem < outActionList.size(); outItem++) {
256 final Action action = outActionList
258 if (action.getActionChoice() instanceof GroupActionCase) {
259 Assert.assertEquals((Long) 5L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
263 final List<Action> outActionList1 = outAddGroupInput.getBucketsList().get(1).getAction();
264 for (int outItem = 0; outItem < outActionList1.size(); outItem++) {
265 final Action action = outActionList1
267 if (action.getActionChoice() instanceof GroupActionCase) {
268 Assert.assertEquals((Long) 6L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
274 * test of {@link GroupConvertor#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData)} }
277 public void testGroupModConvertSortedBuckets() {
279 final int actionOrder = 0;
281 final ArrayList<Bucket> bucket = new ArrayList<Bucket>();
283 bucket.add(new BucketBuilder()
284 .setBucketId(new BucketId((long) 4))
285 .setWatchPort((long)2)
286 .setWatchGroup((long) 1)
287 .setAction(ImmutableList.of(new ActionBuilder()
289 .setAction(new OutputActionCaseBuilder()
290 .setOutputAction(new OutputActionBuilder()
291 .setOutputNodeConnector(new Uri("openflow:1:2"))
297 bucket.add(new BucketBuilder()
298 .setBucketId(new BucketId((long) 3))
299 .setWatchPort((long)6)
300 .setWatchGroup((long) 1)
301 .setAction(ImmutableList.of(new ActionBuilder()
303 .setAction(new OutputActionCaseBuilder()
304 .setOutputAction(new OutputActionBuilder()
305 .setOutputNodeConnector(new Uri("openflow:1:6"))
311 bucket.add(new BucketBuilder()
312 .setBucketId(new BucketId((long) 2))
313 .setWatchPort((long)5)
314 .setWatchGroup((long) 1)
315 .setAction(ImmutableList.of(new ActionBuilder()
317 .setAction(new OutputActionCaseBuilder()
318 .setOutputAction(new OutputActionBuilder()
319 .setOutputNodeConnector(new Uri("openflow:1:5"))
325 bucket.add(new BucketBuilder()
326 .setBucketId(new BucketId((long) 1))
327 .setWatchPort((long)4)
328 .setWatchGroup((long) 1)
329 .setAction(ImmutableList.of(new ActionBuilder()
331 .setAction(new OutputActionCaseBuilder()
332 .setOutputAction(new OutputActionBuilder()
333 .setOutputNodeConnector(new Uri("openflow:1:4"))
339 bucket.add(new BucketBuilder()
340 .setBucketId(new BucketId((long) 0))
341 .setWatchPort((long)3)
342 .setWatchGroup((long) 1)
343 .setAction(ImmutableList.of(new ActionBuilder()
345 .setAction(new OutputActionCaseBuilder()
346 .setOutputAction(new OutputActionBuilder()
347 .setOutputNodeConnector(new Uri("openflow:1:3"))
354 final AddGroupInput input = new AddGroupInputBuilder()
355 .setGroupId(new GroupId((long) 1))
357 .setGroupType(GroupTypes.GroupFf)
358 .setBuckets(new BucketsBuilder()
363 OpenflowPortsUtil.init();
365 VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData((short) 0X4);
366 data.setDatapathId(BigInteger.valueOf(1));
368 final GroupModInputBuilder outAddGroupInput = convert(input, data);
370 final List<BucketsList> bucketList = outAddGroupInput.getBucketsList();
371 Assert.assertEquals( Long.valueOf(1), bucketList.get(0).getWatchGroup());
372 Assert.assertEquals( Long.valueOf(3), bucketList.get(0).getWatchPort().getValue());
374 Assert.assertEquals( Long.valueOf(1), bucketList.get(1).getWatchGroup());
375 Assert.assertEquals( Long.valueOf(4), bucketList.get(1).getWatchPort().getValue());
377 Assert.assertEquals( Long.valueOf(1), bucketList.get(2).getWatchGroup());
378 Assert.assertEquals( Long.valueOf(5), bucketList.get(2).getWatchPort().getValue());
380 Assert.assertEquals( Long.valueOf(1), bucketList.get(3).getWatchGroup());
381 Assert.assertEquals( Long.valueOf(6), bucketList.get(3).getWatchPort().getValue());
383 Assert.assertEquals( Long.valueOf(1), bucketList.get(4).getWatchGroup());
384 Assert.assertEquals( Long.valueOf(2), bucketList.get(4).getWatchPort().getValue());
392 private static ActionBuilder assembleSetMplsTtlActionBuilder(final int actionOrder) {
393 final SetMplsTtlActionBuilder setMplsTtlActionBuilder = new SetMplsTtlActionBuilder();
394 setMplsTtlActionBuilder.setMplsTtl((short) 0X1);
395 final SetMplsTtlActionCaseBuilder setMplsTtlActionCaseBuilder = new SetMplsTtlActionCaseBuilder();
396 setMplsTtlActionCaseBuilder.setSetMplsTtlAction(setMplsTtlActionBuilder.build());
397 final ActionBuilder actionsB3 = new ActionBuilder();
398 actionsB3.setOrder(actionOrder).setAction(setMplsTtlActionCaseBuilder.build());
405 private static ActionBuilder assembleCopyTtlInBuilder(final int actionOrder) {
406 final CopyTtlInBuilder copyTtlB = new CopyTtlInBuilder();
407 final CopyTtlInCaseBuilder copyTtlInCaseBuilder = new CopyTtlInCaseBuilder();
408 copyTtlInCaseBuilder.setCopyTtlIn(copyTtlB.build());
409 final ActionBuilder actionsB2 = new ActionBuilder();
410 actionsB2.setOrder(actionOrder).setAction(copyTtlInCaseBuilder.build());
415 * @param groupName name of group
418 private static ActionBuilder assembleActionBuilder(final String groupName, final int actionOrder) {
419 final GroupActionBuilder groupActionBuilder = new GroupActionBuilder();
420 groupActionBuilder.setGroup(groupName);
421 final GroupActionCaseBuilder groupActionCaseBuilder = new GroupActionCaseBuilder();
422 groupActionCaseBuilder.setGroupAction(groupActionBuilder.build());
423 final ActionBuilder actionsBld = new ActionBuilder();
424 actionsBld.setOrder(actionOrder).setAction(groupActionCaseBuilder.build());
429 * test of {@link GroupConvertor#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData)} }
432 public void testGroupModConvertorBucketwithNOWieghtValuesForGroupTypeAll() {
436 final AddGroupInputBuilder addGroupBuilder = new AddGroupInputBuilder();
438 addGroupBuilder.setGroupId(new GroupId(10L));
440 addGroupBuilder.setGroupType(GroupTypes.GroupAll);
441 final List<Bucket> bucketList = new ArrayList<Bucket>();
442 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>();
443 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>();
446 actionsList.add(assembleActionBuilder("005", actionOrder++).build());
448 actionsList.add(assembleActionBuilder("006", actionOrder++).build());
450 final BucketsBuilder bucketsB = new BucketsBuilder();
452 final BucketBuilder bucketB = new BucketBuilder();
454 bucketB.setAction(actionsList);
455 final Bucket bucket = bucketB.build();
457 bucketList.add(bucket); // List of bucket
459 final BucketBuilder bucketB1 = new BucketBuilder();
462 actionsList1.add(assembleCopyTtlInBuilder(actionOrder++).build());
464 actionsList1.add(assembleSetMplsTtlActionBuilder(actionOrder++).build());
466 bucketB1.setAction(actionsList);
468 final Bucket bucket1 = bucketB1.build(); // second bucket
470 bucketList.add(bucket1);
472 bucketsB.setBucket(bucketList);// List of bucket added to the Buckets
473 final Buckets buckets = bucketsB.build();
475 addGroupBuilder.setBuckets(buckets);
477 VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData((short) 0X4);
478 data.setDatapathId(BigInteger.valueOf(1));
480 final GroupModInputBuilder outAddGroupInput = convert(addGroupBuilder.build(), data);
482 Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
483 Assert.assertEquals(GroupType.OFPGTALL, outAddGroupInput.getType());
485 Assert.assertEquals(10L, outAddGroupInput.getGroupId().getValue().longValue());
487 final List<Action> outActionList = outAddGroupInput.getBucketsList().get(0).getAction();
488 for (int outItem = 0; outItem < outActionList.size(); outItem++) {
489 final Action action = outActionList
491 if (action.getActionChoice() instanceof GroupActionCase) {
492 Assert.assertEquals((Long) 5L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
498 final List<Action> outActionList1 = outAddGroupInput.getBucketsList().get(1).getAction();
499 for (int outItem = 0; outItem < outActionList1.size(); outItem++) {
500 final Action action = outActionList1
502 if (action.getActionChoice() instanceof GroupActionCase) {
504 Assert.assertEquals((Long) 6L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
512 private GroupModInputBuilder convert(Group group, VersionDatapathIdConvertorData data) {
513 final Optional<GroupModInputBuilder> outAddGroupInputOptional = ConvertorManager.getInstance().convert(group, data);
514 Assert.assertTrue("Group convertor not found", outAddGroupInputOptional.isPresent());
515 return outAddGroupInputOptional.get();