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.Before;
17 import org.junit.Test;
18 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData;
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 {
50 private ConvertorManager convertorManager;
54 convertorManager = ConvertorManagerFactory.createDefaultManager();
58 * 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)} }
61 public void testGroupModConvertorwithallParameters() {
63 final AddGroupInputBuilder addGroupBuilder = new AddGroupInputBuilder();
65 addGroupBuilder.setGroupId(new GroupId(10L));
67 addGroupBuilder.setGroupType(GroupTypes.GroupAll);
68 final List<Bucket> bucketList = new ArrayList<Bucket>();
69 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>();
70 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>();
75 final GroupActionBuilder groupActionBuilder = new GroupActionBuilder();
76 groupActionBuilder.setGroup("005");
77 final GroupAction groupIdaction = groupActionBuilder.build();
78 final ActionBuilder actionsB = new ActionBuilder();
79 actionsB.setOrder(actionOrder++).setAction(new GroupActionCaseBuilder().setGroupAction(groupIdaction).build());
82 final GroupActionBuilder groupActionBuilder1 = new GroupActionBuilder();
83 groupActionBuilder1.setGroup("006");
84 final GroupAction groupIdaction1 = groupActionBuilder.build();
85 final ActionBuilder actionsB1 = new ActionBuilder();
86 actionsB1.setOrder(actionOrder++).setAction(new GroupActionCaseBuilder().setGroupAction(groupIdaction1).build());
88 actionsList.add(actionsB.build());
89 actionsList.add(actionsB1.build());
92 final BucketsBuilder bucketsB = new BucketsBuilder();
94 final BucketBuilder bucketB = new BucketBuilder();
95 bucketB.setWeight(10);
96 bucketB.setWatchPort(20L);
97 bucketB.setWatchGroup(22L);
99 bucketB.setAction(actionsList);
100 final Bucket bucket = bucketB.build();
102 bucketList.add(bucket); // List of bucket
104 final BucketBuilder bucketB1 = new BucketBuilder();
105 bucketB1.setWeight(50);
106 bucketB1.setWatchPort(60L);
107 bucketB1.setWatchGroup(70L);
110 final CopyTtlInBuilder copyTtlB = new CopyTtlInBuilder();
111 final CopyTtlIn copyTtl = copyTtlB.build();
112 final ActionBuilder actionsB2 = new ActionBuilder();
113 actionsB2.setOrder(actionOrder++).setAction(new CopyTtlInCaseBuilder().setCopyTtlIn(copyTtl).build());
116 final SetMplsTtlActionBuilder setMplsTtlActionBuilder = new SetMplsTtlActionBuilder();
117 setMplsTtlActionBuilder.setMplsTtl((short) 0X1);
118 final SetMplsTtlAction setMAction = setMplsTtlActionBuilder.build();
119 final ActionBuilder actionsB3 = new ActionBuilder();
121 actionsB3.setOrder(actionOrder++).setAction(new SetMplsTtlActionCaseBuilder().setSetMplsTtlAction(setMAction).build());
124 actionsList1.add(actionsB2.build());
125 actionsList1.add(actionsB3.build());
127 bucketB1.setAction(actionsList);
129 final Bucket bucket1 = bucketB1.build(); // second bucket
131 bucketList.add(bucket1);
133 bucketsB.setBucket(bucketList);// List of bucket added to the Buckets
134 final Buckets buckets = bucketsB.build();
136 addGroupBuilder.setBuckets(buckets);
138 VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData((short) 0X4);
139 data.setDatapathId(BigInteger.valueOf(1));
141 final GroupModInputBuilder outAddGroupInput = convert(addGroupBuilder.build(), data);
143 Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
144 Assert.assertEquals(GroupType.OFPGTALL, outAddGroupInput.getType());
146 Assert.assertEquals(10L, (long) outAddGroupInput.getGroupId().getValue());
147 Assert.assertEquals(10, (int) outAddGroupInput.getBucketsList().get(0).getWeight());
148 Assert.assertEquals(20L, (long) outAddGroupInput.getBucketsList().get(0).getWatchPort().getValue());
149 Assert.assertEquals((Long) 22L, outAddGroupInput.getBucketsList().get(0).getWatchGroup());
151 final List<Action> outActionList = outAddGroupInput.getBucketsList().get(0).getAction();
152 for (int outItem = 0; outItem < outActionList.size(); outItem++) {
153 final Action action = outActionList
155 if (action.getActionChoice() instanceof GroupActionCase) {
156 Assert.assertEquals((Long) 5L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
159 // TODO:setMplsTTL :OF layer doesnt have get();
162 Assert.assertEquals((Integer) 50, outAddGroupInput.getBucketsList().get(1).getWeight());
163 Assert.assertEquals((long) 60, (long) outAddGroupInput.getBucketsList().get(1).getWatchPort().getValue());
164 Assert.assertEquals((Long) 70L, outAddGroupInput.getBucketsList().get(1).getWatchGroup());
165 final List<Action> outActionList1 = outAddGroupInput.getBucketsList().get(1).getAction();
166 for (int outItem = 0; outItem < outActionList1.size(); outItem++) {
167 final Action action = outActionList1
169 if (action.getActionChoice() instanceof GroupActionCase) {
171 Assert.assertEquals((Long) 6L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
175 // TODO:setMplsTTL :OF layer doesnt have get();
181 * 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)} }
184 public void testGroupModConvertorNoBucket() {
185 final AddGroupInputBuilder addGroupBuilder = new AddGroupInputBuilder();
187 addGroupBuilder.setGroupId(new GroupId(10L));
189 addGroupBuilder.setGroupType(GroupTypes.GroupAll);
191 VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData((short) 0X4);
192 data.setDatapathId(BigInteger.valueOf(1));
194 final GroupModInputBuilder outAddGroupInput = convert(addGroupBuilder.build(), data);
195 Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
196 Assert.assertEquals(GroupType.OFPGTALL, outAddGroupInput.getType());
200 * 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)} }
203 public void testGroupModConvertorBucketwithNOWieghtValuesForGroupTypeFastFailure() {
207 final AddGroupInputBuilder addGroupBuilder = new AddGroupInputBuilder();
209 addGroupBuilder.setGroupId(new GroupId(10L));
211 addGroupBuilder.setGroupType(GroupTypes.GroupFf);
212 final List<Bucket> bucketList = new ArrayList<Bucket>();
213 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>();
214 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>();
217 actionsList.add(assembleActionBuilder("005", actionOrder++).build());
219 actionsList.add(assembleActionBuilder("006", actionOrder++).build());
220 // .. and mr.Bond is not coming today
222 final BucketsBuilder bucketsB = new BucketsBuilder();
224 final BucketBuilder bucketB = new BucketBuilder();
226 bucketB.setAction(actionsList);
227 final Bucket bucket = bucketB.build();
229 bucketList.add(bucket); // List of bucket
232 final BucketBuilder bucketB1 = new BucketBuilder();
235 actionsList1.add(assembleCopyTtlInBuilder(actionOrder++).build());
237 actionsList1.add(assembleSetMplsTtlActionBuilder(actionOrder++).build());
239 bucketB1.setAction(actionsList1);
241 final Bucket bucket1 = bucketB1.build(); // second bucket
243 bucketList.add(bucket1);
245 bucketsB.setBucket(bucketList);// List of bucket added to the Buckets
246 final Buckets buckets = bucketsB.build();
248 addGroupBuilder.setBuckets(buckets);
250 VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData((short) 0X4);
251 data.setDatapathId(BigInteger.valueOf(1));
253 final GroupModInputBuilder outAddGroupInput = convert(addGroupBuilder.build(), data);
255 Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
256 Assert.assertEquals(GroupType.OFPGTFF, outAddGroupInput.getType());
258 Assert.assertEquals(10L, outAddGroupInput.getGroupId().getValue().longValue());
260 final List<Action> outActionList = outAddGroupInput.getBucketsList().get(0).getAction();
261 for (int outItem = 0; outItem < outActionList.size(); outItem++) {
262 final Action action = outActionList
264 if (action.getActionChoice() instanceof GroupActionCase) {
265 Assert.assertEquals((Long) 5L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
269 final List<Action> outActionList1 = outAddGroupInput.getBucketsList().get(1).getAction();
270 for (int outItem = 0; outItem < outActionList1.size(); outItem++) {
271 final Action action = outActionList1
273 if (action.getActionChoice() instanceof GroupActionCase) {
274 Assert.assertEquals((Long) 6L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
280 * 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)} }
283 public void testGroupModConvertSortedBuckets() {
285 final int actionOrder = 0;
287 final ArrayList<Bucket> bucket = new ArrayList<Bucket>();
289 bucket.add(new BucketBuilder()
290 .setBucketId(new BucketId((long) 4))
291 .setWatchPort((long)2)
292 .setWatchGroup((long) 1)
293 .setAction(ImmutableList.of(new ActionBuilder()
295 .setAction(new OutputActionCaseBuilder()
296 .setOutputAction(new OutputActionBuilder()
297 .setOutputNodeConnector(new Uri("openflow:1:2"))
303 bucket.add(new BucketBuilder()
304 .setBucketId(new BucketId((long) 3))
305 .setWatchPort((long)6)
306 .setWatchGroup((long) 1)
307 .setAction(ImmutableList.of(new ActionBuilder()
309 .setAction(new OutputActionCaseBuilder()
310 .setOutputAction(new OutputActionBuilder()
311 .setOutputNodeConnector(new Uri("openflow:1:6"))
317 bucket.add(new BucketBuilder()
318 .setBucketId(new BucketId((long) 2))
319 .setWatchPort((long)5)
320 .setWatchGroup((long) 1)
321 .setAction(ImmutableList.of(new ActionBuilder()
323 .setAction(new OutputActionCaseBuilder()
324 .setOutputAction(new OutputActionBuilder()
325 .setOutputNodeConnector(new Uri("openflow:1:5"))
331 bucket.add(new BucketBuilder()
332 .setBucketId(new BucketId((long) 1))
333 .setWatchPort((long)4)
334 .setWatchGroup((long) 1)
335 .setAction(ImmutableList.of(new ActionBuilder()
337 .setAction(new OutputActionCaseBuilder()
338 .setOutputAction(new OutputActionBuilder()
339 .setOutputNodeConnector(new Uri("openflow:1:4"))
345 bucket.add(new BucketBuilder()
346 .setBucketId(new BucketId((long) 0))
347 .setWatchPort((long)3)
348 .setWatchGroup((long) 1)
349 .setAction(ImmutableList.of(new ActionBuilder()
351 .setAction(new OutputActionCaseBuilder()
352 .setOutputAction(new OutputActionBuilder()
353 .setOutputNodeConnector(new Uri("openflow:1:3"))
360 final AddGroupInput input = new AddGroupInputBuilder()
361 .setGroupId(new GroupId((long) 1))
363 .setGroupType(GroupTypes.GroupFf)
364 .setBuckets(new BucketsBuilder()
369 VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData((short) 0X4);
370 data.setDatapathId(BigInteger.valueOf(1));
372 final GroupModInputBuilder outAddGroupInput = convert(input, data);
374 final List<BucketsList> bucketList = outAddGroupInput.getBucketsList();
375 Assert.assertEquals( Long.valueOf(1), bucketList.get(0).getWatchGroup());
376 Assert.assertEquals( Long.valueOf(3), bucketList.get(0).getWatchPort().getValue());
378 Assert.assertEquals( Long.valueOf(1), bucketList.get(1).getWatchGroup());
379 Assert.assertEquals( Long.valueOf(4), bucketList.get(1).getWatchPort().getValue());
381 Assert.assertEquals( Long.valueOf(1), bucketList.get(2).getWatchGroup());
382 Assert.assertEquals( Long.valueOf(5), bucketList.get(2).getWatchPort().getValue());
384 Assert.assertEquals( Long.valueOf(1), bucketList.get(3).getWatchGroup());
385 Assert.assertEquals( Long.valueOf(6), bucketList.get(3).getWatchPort().getValue());
387 Assert.assertEquals( Long.valueOf(1), bucketList.get(4).getWatchGroup());
388 Assert.assertEquals( Long.valueOf(2), bucketList.get(4).getWatchPort().getValue());
396 private static ActionBuilder assembleSetMplsTtlActionBuilder(final int actionOrder) {
397 final SetMplsTtlActionBuilder setMplsTtlActionBuilder = new SetMplsTtlActionBuilder();
398 setMplsTtlActionBuilder.setMplsTtl((short) 0X1);
399 final SetMplsTtlActionCaseBuilder setMplsTtlActionCaseBuilder = new SetMplsTtlActionCaseBuilder();
400 setMplsTtlActionCaseBuilder.setSetMplsTtlAction(setMplsTtlActionBuilder.build());
401 final ActionBuilder actionsB3 = new ActionBuilder();
402 actionsB3.setOrder(actionOrder).setAction(setMplsTtlActionCaseBuilder.build());
409 private static ActionBuilder assembleCopyTtlInBuilder(final int actionOrder) {
410 final CopyTtlInBuilder copyTtlB = new CopyTtlInBuilder();
411 final CopyTtlInCaseBuilder copyTtlInCaseBuilder = new CopyTtlInCaseBuilder();
412 copyTtlInCaseBuilder.setCopyTtlIn(copyTtlB.build());
413 final ActionBuilder actionsB2 = new ActionBuilder();
414 actionsB2.setOrder(actionOrder).setAction(copyTtlInCaseBuilder.build());
419 * @param groupName name of group
422 private static ActionBuilder assembleActionBuilder(final String groupName, final int actionOrder) {
423 final GroupActionBuilder groupActionBuilder = new GroupActionBuilder();
424 groupActionBuilder.setGroup(groupName);
425 final GroupActionCaseBuilder groupActionCaseBuilder = new GroupActionCaseBuilder();
426 groupActionCaseBuilder.setGroupAction(groupActionBuilder.build());
427 final ActionBuilder actionsBld = new ActionBuilder();
428 actionsBld.setOrder(actionOrder).setAction(groupActionCaseBuilder.build());
433 * 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)} }
436 public void testGroupModConvertorBucketwithNOWieghtValuesForGroupTypeAll() {
440 final AddGroupInputBuilder addGroupBuilder = new AddGroupInputBuilder();
442 addGroupBuilder.setGroupId(new GroupId(10L));
444 addGroupBuilder.setGroupType(GroupTypes.GroupAll);
445 final List<Bucket> bucketList = new ArrayList<Bucket>();
446 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>();
447 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>();
450 actionsList.add(assembleActionBuilder("005", actionOrder++).build());
452 actionsList.add(assembleActionBuilder("006", actionOrder++).build());
454 final BucketsBuilder bucketsB = new BucketsBuilder();
456 final BucketBuilder bucketB = new BucketBuilder();
458 bucketB.setAction(actionsList);
459 final Bucket bucket = bucketB.build();
461 bucketList.add(bucket); // List of bucket
463 final BucketBuilder bucketB1 = new BucketBuilder();
466 actionsList1.add(assembleCopyTtlInBuilder(actionOrder++).build());
468 actionsList1.add(assembleSetMplsTtlActionBuilder(actionOrder++).build());
470 bucketB1.setAction(actionsList);
472 final Bucket bucket1 = bucketB1.build(); // second bucket
474 bucketList.add(bucket1);
476 bucketsB.setBucket(bucketList);// List of bucket added to the Buckets
477 final Buckets buckets = bucketsB.build();
479 addGroupBuilder.setBuckets(buckets);
481 VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData((short) 0X4);
482 data.setDatapathId(BigInteger.valueOf(1));
484 final GroupModInputBuilder outAddGroupInput = convert(addGroupBuilder.build(), data);
486 Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
487 Assert.assertEquals(GroupType.OFPGTALL, outAddGroupInput.getType());
489 Assert.assertEquals(10L, outAddGroupInput.getGroupId().getValue().longValue());
491 final List<Action> outActionList = outAddGroupInput.getBucketsList().get(0).getAction();
492 for (int outItem = 0; outItem < outActionList.size(); outItem++) {
493 final Action action = outActionList
495 if (action.getActionChoice() instanceof GroupActionCase) {
496 Assert.assertEquals((Long) 5L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
502 final List<Action> outActionList1 = outAddGroupInput.getBucketsList().get(1).getAction();
503 for (int outItem = 0; outItem < outActionList1.size(); outItem++) {
504 final Action action = outActionList1
506 if (action.getActionChoice() instanceof GroupActionCase) {
508 Assert.assertEquals((Long) 6L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
516 private GroupModInputBuilder convert(Group group, VersionDatapathIdConvertorData data) {
517 final Optional<GroupModInputBuilder> outAddGroupInputOptional = convertorManager.convert(group, data);
518 Assert.assertTrue("Group convertor not found", outAddGroupInputOptional.isPresent());
519 return outAddGroupInputOptional.get();