Merge "Technical debt MeterUtil, GroupUtil, FlowUtil"
[openflowplugin.git] / openflowplugin / src / test / java / org / opendaylight / openflowplugin / openflow / md / core / sal / convertor / GroupConvertorTest.java
1 /**
2  * Copyright (c) 2014 Ericsson India Global Services Pvt Ltd. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
9
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.openflowplugin.openflow.md.util.OpenflowPortsUtil;
20 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlInCaseBuilder;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCase;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCaseBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCaseBuilder;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetMplsTtlActionCaseBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.copy.ttl.in._case.CopyTtlIn;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.copy.ttl.in._case.CopyTtlInBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.group.action._case.GroupAction;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.group.action._case.GroupActionBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.output.action._case.OutputActionBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.mpls.ttl.action._case.SetMplsTtlAction;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.mpls.ttl.action._case.SetMplsTtlActionBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.AddGroupInput;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.AddGroupInputBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.BucketId;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.Buckets;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.BucketsBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.Bucket;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupModCommand;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupType;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GroupModInputBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.buckets.grouping.BucketsList;
49
50 public class GroupConvertorTest {
51     private ConvertorManager convertorManager;
52
53     @Before
54     public void setUp() {
55         convertorManager = ConvertorManagerFactory.createDefaultManager();
56     }
57
58     /**
59      * 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)} }
60      */
61     @Test
62     public void testGroupModConvertorwithallParameters() {
63
64         final AddGroupInputBuilder addGroupBuilder = new AddGroupInputBuilder();
65
66         addGroupBuilder.setGroupId(new GroupId(10L));
67
68         addGroupBuilder.setGroupType(GroupTypes.GroupAll);
69         final List<Bucket> bucketList = new ArrayList<Bucket>();
70         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>();
71         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>();
72
73         int actionOrder = 0;
74
75         // Action1
76         final GroupActionBuilder groupActionBuilder = new GroupActionBuilder();
77         groupActionBuilder.setGroup("005");
78         final GroupAction groupIdaction = groupActionBuilder.build();
79         final ActionBuilder actionsB = new ActionBuilder();
80         actionsB.setOrder(actionOrder++).setAction(new GroupActionCaseBuilder().setGroupAction(groupIdaction).build());
81
82         // Action2:
83         final GroupActionBuilder groupActionBuilder1 = new GroupActionBuilder();
84         groupActionBuilder1.setGroup("006");
85         final GroupAction groupIdaction1 = groupActionBuilder.build();
86         final ActionBuilder actionsB1 = new ActionBuilder();
87         actionsB1.setOrder(actionOrder++).setAction(new GroupActionCaseBuilder().setGroupAction(groupIdaction1).build());
88
89         actionsList.add(actionsB.build());
90         actionsList.add(actionsB1.build());
91
92
93         final BucketsBuilder bucketsB = new BucketsBuilder();
94
95         final BucketBuilder bucketB = new BucketBuilder();
96         bucketB.setWeight(10);
97         bucketB.setWatchPort(20L);
98         bucketB.setWatchGroup(22L);
99
100         bucketB.setAction(actionsList);
101         final Bucket bucket = bucketB.build();
102
103         bucketList.add(bucket); // List of bucket
104
105         final BucketBuilder bucketB1 = new BucketBuilder();
106         bucketB1.setWeight(50);
107         bucketB1.setWatchPort(60L);
108         bucketB1.setWatchGroup(70L);
109
110         // Action1
111         final CopyTtlInBuilder copyTtlB = new CopyTtlInBuilder();
112         final CopyTtlIn copyTtl = copyTtlB.build();
113         final ActionBuilder actionsB2 = new ActionBuilder();
114         actionsB2.setOrder(actionOrder++).setAction(new CopyTtlInCaseBuilder().setCopyTtlIn(copyTtl).build());
115
116         // Action2:
117         final SetMplsTtlActionBuilder setMplsTtlActionBuilder = new SetMplsTtlActionBuilder();
118         setMplsTtlActionBuilder.setMplsTtl((short) 0X1);
119         final SetMplsTtlAction setMAction = setMplsTtlActionBuilder.build();
120         final ActionBuilder actionsB3 = new ActionBuilder();
121
122         actionsB3.setOrder(actionOrder++).setAction(new SetMplsTtlActionCaseBuilder().setSetMplsTtlAction(setMAction).build());
123
124
125         actionsList1.add(actionsB2.build());
126         actionsList1.add(actionsB3.build());
127
128         bucketB1.setAction(actionsList);
129
130         final Bucket bucket1 = bucketB1.build(); // second bucket
131
132         bucketList.add(bucket1);
133
134         bucketsB.setBucket(bucketList);// List of bucket added to the Buckets
135         final Buckets buckets = bucketsB.build();
136
137         addGroupBuilder.setBuckets(buckets);
138
139         VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData((short) 0X4);
140         data.setDatapathId(BigInteger.valueOf(1));
141
142         final GroupModInputBuilder outAddGroupInput = convert(addGroupBuilder.build(), data);
143
144         Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
145         Assert.assertEquals(GroupType.OFPGTALL, outAddGroupInput.getType());
146
147         Assert.assertEquals(10L, (long) outAddGroupInput.getGroupId().getValue());
148         Assert.assertEquals(10, (int) outAddGroupInput.getBucketsList().get(0).getWeight());
149         Assert.assertEquals(20L, (long) outAddGroupInput.getBucketsList().get(0).getWatchPort().getValue());
150         Assert.assertEquals((Long) 22L, outAddGroupInput.getBucketsList().get(0).getWatchGroup());
151
152         final List<Action> outActionList = outAddGroupInput.getBucketsList().get(0).getAction();
153         for (int outItem = 0; outItem < outActionList.size(); outItem++) {
154             final Action action = outActionList
155                     .get(outItem);
156             if (action.getActionChoice() instanceof GroupActionCase) {
157                 Assert.assertEquals((Long) 5L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
158
159             }
160             // TODO:setMplsTTL :OF layer doesnt have get();
161         }
162
163         Assert.assertEquals((Integer) 50, outAddGroupInput.getBucketsList().get(1).getWeight());
164         Assert.assertEquals((long) 60, (long) outAddGroupInput.getBucketsList().get(1).getWatchPort().getValue());
165         Assert.assertEquals((Long) 70L, outAddGroupInput.getBucketsList().get(1).getWatchGroup());
166         final List<Action> outActionList1 = outAddGroupInput.getBucketsList().get(1).getAction();
167         for (int outItem = 0; outItem < outActionList1.size(); outItem++) {
168             final Action action = outActionList1
169                     .get(outItem);
170             if (action.getActionChoice() instanceof GroupActionCase) {
171
172                 Assert.assertEquals((Long) 6L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
173
174
175             }
176             // TODO:setMplsTTL :OF layer doesnt have get();
177         }
178
179     }
180
181     /**
182      * 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)} }
183      */
184     @Test
185     public void testGroupModConvertorNoBucket() {
186         final AddGroupInputBuilder addGroupBuilder = new AddGroupInputBuilder();
187
188         addGroupBuilder.setGroupId(new GroupId(10L));
189
190         addGroupBuilder.setGroupType(GroupTypes.GroupAll);
191
192         VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData((short) 0X4);
193         data.setDatapathId(BigInteger.valueOf(1));
194
195         final GroupModInputBuilder outAddGroupInput = convert(addGroupBuilder.build(), data);
196         Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
197         Assert.assertEquals(GroupType.OFPGTALL, outAddGroupInput.getType());
198     }
199
200     /**
201      * 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)} }
202      */
203     @Test
204     public void testGroupModConvertorBucketwithNOWieghtValuesForGroupTypeFastFailure() {
205
206         int actionOrder = 0;
207
208         final AddGroupInputBuilder addGroupBuilder = new AddGroupInputBuilder();
209
210         addGroupBuilder.setGroupId(new GroupId(10L));
211
212         addGroupBuilder.setGroupType(GroupTypes.GroupFf);
213         final List<Bucket> bucketList = new ArrayList<Bucket>();
214         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>();
215         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>();
216
217         // Action1: 005
218         actionsList.add(assembleActionBuilder("005", actionOrder++).build());
219         // Action2: 006
220         actionsList.add(assembleActionBuilder("006", actionOrder++).build());
221         // .. and mr.Bond is not coming today
222
223         final BucketsBuilder bucketsB = new BucketsBuilder();
224
225         final BucketBuilder bucketB = new BucketBuilder();
226
227         bucketB.setAction(actionsList);
228         final Bucket bucket = bucketB.build();
229
230         bucketList.add(bucket); // List of bucket
231
232
233         final BucketBuilder bucketB1 = new BucketBuilder();
234
235         // Action1
236         actionsList1.add(assembleCopyTtlInBuilder(actionOrder++).build());
237         // Action2:
238         actionsList1.add(assembleSetMplsTtlActionBuilder(actionOrder++).build());
239
240         bucketB1.setAction(actionsList1);
241
242         final Bucket bucket1 = bucketB1.build(); // second bucket
243
244         bucketList.add(bucket1);
245
246         bucketsB.setBucket(bucketList);// List of bucket added to the Buckets
247         final Buckets buckets = bucketsB.build();
248
249         addGroupBuilder.setBuckets(buckets);
250
251         VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData((short) 0X4);
252         data.setDatapathId(BigInteger.valueOf(1));
253
254         final GroupModInputBuilder outAddGroupInput = convert(addGroupBuilder.build(), data);
255
256         Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
257         Assert.assertEquals(GroupType.OFPGTFF, outAddGroupInput.getType());
258
259         Assert.assertEquals(10L, outAddGroupInput.getGroupId().getValue().longValue());
260
261         final List<Action> outActionList = outAddGroupInput.getBucketsList().get(0).getAction();
262         for (int outItem = 0; outItem < outActionList.size(); outItem++) {
263             final Action action = outActionList
264                     .get(outItem);
265             if (action.getActionChoice() instanceof GroupActionCase) {
266                 Assert.assertEquals((Long) 5L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
267             }
268         }
269
270         final List<Action> outActionList1 = outAddGroupInput.getBucketsList().get(1).getAction();
271         for (int outItem = 0; outItem < outActionList1.size(); outItem++) {
272             final Action action = outActionList1
273                     .get(outItem);
274             if (action.getActionChoice() instanceof GroupActionCase) {
275                 Assert.assertEquals((Long) 6L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
276             }
277         }
278     }
279
280     /**
281      * 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)} }
282      */
283     @Test
284     public void testGroupModConvertSortedBuckets() {
285
286         final int actionOrder = 0;
287
288         final ArrayList<Bucket> bucket = new ArrayList<Bucket>();
289
290         bucket.add(new BucketBuilder()
291                 .setBucketId(new BucketId((long) 4))
292                 .setWatchPort((long)2)
293                 .setWatchGroup((long) 1)
294                 .setAction(ImmutableList.of(new ActionBuilder()
295                         .setOrder(0)
296                         .setAction(new OutputActionCaseBuilder()
297                                 .setOutputAction(new OutputActionBuilder()
298                                         .setOutputNodeConnector(new Uri("openflow:1:2"))
299                                         .build())
300                                 .build())
301                         .build()))
302                 .build());
303
304         bucket.add(new BucketBuilder()
305                 .setBucketId(new BucketId((long) 3))
306                 .setWatchPort((long)6)
307                 .setWatchGroup((long) 1)
308                 .setAction(ImmutableList.of(new ActionBuilder()
309                         .setOrder(0)
310                         .setAction(new OutputActionCaseBuilder()
311                                 .setOutputAction(new OutputActionBuilder()
312                                         .setOutputNodeConnector(new Uri("openflow:1:6"))
313                                         .build())
314                                 .build())
315                         .build()))
316                 .build());
317
318         bucket.add(new BucketBuilder()
319                 .setBucketId(new BucketId((long) 2))
320                 .setWatchPort((long)5)
321                 .setWatchGroup((long) 1)
322                 .setAction(ImmutableList.of(new ActionBuilder()
323                         .setOrder(0)
324                         .setAction(new OutputActionCaseBuilder()
325                                 .setOutputAction(new OutputActionBuilder()
326                                         .setOutputNodeConnector(new Uri("openflow:1:5"))
327                                         .build())
328                                 .build())
329                         .build()))
330                 .build());
331
332         bucket.add(new BucketBuilder()
333                 .setBucketId(new BucketId((long) 1))
334                 .setWatchPort((long)4)
335                 .setWatchGroup((long) 1)
336                 .setAction(ImmutableList.of(new ActionBuilder()
337                         .setOrder(0)
338                         .setAction(new OutputActionCaseBuilder()
339                                 .setOutputAction(new OutputActionBuilder()
340                                         .setOutputNodeConnector(new Uri("openflow:1:4"))
341                                         .build())
342                                 .build())
343                         .build()))
344                 .build());
345
346         bucket.add(new BucketBuilder()
347                 .setBucketId(new BucketId((long) 0))
348                 .setWatchPort((long)3)
349                 .setWatchGroup((long) 1)
350                 .setAction(ImmutableList.of(new ActionBuilder()
351                         .setOrder(0)
352                         .setAction(new OutputActionCaseBuilder()
353                                 .setOutputAction(new OutputActionBuilder()
354                                         .setOutputNodeConnector(new Uri("openflow:1:3"))
355                                         .build())
356                                 .build())
357                         .build()))
358                 .build());
359
360
361         final AddGroupInput input = new AddGroupInputBuilder()
362                 .setGroupId(new GroupId((long) 1))
363                 .setGroupName("Foo")
364                 .setGroupType(GroupTypes.GroupFf)
365                 .setBuckets(new BucketsBuilder()
366                         .setBucket(bucket)
367                         .build())
368                 .build();
369
370         OpenflowPortsUtil.init();
371
372         VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData((short) 0X4);
373         data.setDatapathId(BigInteger.valueOf(1));
374
375         final GroupModInputBuilder outAddGroupInput = convert(input, data);
376
377         final List<BucketsList> bucketList = outAddGroupInput.getBucketsList();
378         Assert.assertEquals( Long.valueOf(1), bucketList.get(0).getWatchGroup());
379         Assert.assertEquals( Long.valueOf(3), bucketList.get(0).getWatchPort().getValue());
380
381         Assert.assertEquals( Long.valueOf(1), bucketList.get(1).getWatchGroup());
382         Assert.assertEquals( Long.valueOf(4), bucketList.get(1).getWatchPort().getValue());
383
384         Assert.assertEquals( Long.valueOf(1), bucketList.get(2).getWatchGroup());
385         Assert.assertEquals( Long.valueOf(5), bucketList.get(2).getWatchPort().getValue());
386
387         Assert.assertEquals( Long.valueOf(1), bucketList.get(3).getWatchGroup());
388         Assert.assertEquals( Long.valueOf(6), bucketList.get(3).getWatchPort().getValue());
389
390         Assert.assertEquals( Long.valueOf(1), bucketList.get(4).getWatchGroup());
391         Assert.assertEquals( Long.valueOf(2), bucketList.get(4).getWatchPort().getValue());
392
393
394     }
395
396     /**
397      * @return
398      */
399     private static ActionBuilder assembleSetMplsTtlActionBuilder(final int actionOrder) {
400         final SetMplsTtlActionBuilder setMplsTtlActionBuilder = new SetMplsTtlActionBuilder();
401         setMplsTtlActionBuilder.setMplsTtl((short) 0X1);
402         final SetMplsTtlActionCaseBuilder setMplsTtlActionCaseBuilder = new SetMplsTtlActionCaseBuilder();
403         setMplsTtlActionCaseBuilder.setSetMplsTtlAction(setMplsTtlActionBuilder.build());
404         final ActionBuilder actionsB3 = new ActionBuilder();
405         actionsB3.setOrder(actionOrder).setAction(setMplsTtlActionCaseBuilder.build());
406         return actionsB3;
407     }
408
409     /**
410      * @return
411      */
412     private static ActionBuilder assembleCopyTtlInBuilder(final int actionOrder) {
413         final CopyTtlInBuilder copyTtlB = new CopyTtlInBuilder();
414         final CopyTtlInCaseBuilder copyTtlInCaseBuilder = new CopyTtlInCaseBuilder();
415         copyTtlInCaseBuilder.setCopyTtlIn(copyTtlB.build());
416         final ActionBuilder actionsB2 = new ActionBuilder();
417         actionsB2.setOrder(actionOrder).setAction(copyTtlInCaseBuilder.build());
418         return actionsB2;
419     }
420
421     /**
422      * @param groupName name of group
423      * @return
424      */
425     private static ActionBuilder assembleActionBuilder(final String groupName, final int actionOrder) {
426         final GroupActionBuilder groupActionBuilder = new GroupActionBuilder();
427         groupActionBuilder.setGroup(groupName);
428         final GroupActionCaseBuilder groupActionCaseBuilder = new GroupActionCaseBuilder();
429         groupActionCaseBuilder.setGroupAction(groupActionBuilder.build());
430         final ActionBuilder actionsBld = new ActionBuilder();
431         actionsBld.setOrder(actionOrder).setAction(groupActionCaseBuilder.build());
432         return actionsBld;
433     }
434
435     /**
436      * 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)} }
437      */
438     @Test
439     public void testGroupModConvertorBucketwithNOWieghtValuesForGroupTypeAll() {
440
441         int actionOrder = 0;
442
443         final AddGroupInputBuilder addGroupBuilder = new AddGroupInputBuilder();
444
445         addGroupBuilder.setGroupId(new GroupId(10L));
446
447         addGroupBuilder.setGroupType(GroupTypes.GroupAll);
448         final List<Bucket> bucketList = new ArrayList<Bucket>();
449         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>();
450         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>();
451
452         // Action1
453         actionsList.add(assembleActionBuilder("005", actionOrder++).build());
454         // Action2:
455         actionsList.add(assembleActionBuilder("006", actionOrder++).build());
456
457         final BucketsBuilder bucketsB = new BucketsBuilder();
458
459         final BucketBuilder bucketB = new BucketBuilder();
460
461         bucketB.setAction(actionsList);
462         final Bucket bucket = bucketB.build();
463
464         bucketList.add(bucket); // List of bucket
465
466         final BucketBuilder bucketB1 = new BucketBuilder();
467
468         // Action1
469         actionsList1.add(assembleCopyTtlInBuilder(actionOrder++).build());
470         // Action2:
471         actionsList1.add(assembleSetMplsTtlActionBuilder(actionOrder++).build());
472
473         bucketB1.setAction(actionsList);
474
475         final Bucket bucket1 = bucketB1.build(); // second bucket
476
477         bucketList.add(bucket1);
478
479         bucketsB.setBucket(bucketList);// List of bucket added to the Buckets
480         final Buckets buckets = bucketsB.build();
481
482         addGroupBuilder.setBuckets(buckets);
483
484         VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData((short) 0X4);
485         data.setDatapathId(BigInteger.valueOf(1));
486
487         final GroupModInputBuilder outAddGroupInput = convert(addGroupBuilder.build(), data);
488
489         Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
490         Assert.assertEquals(GroupType.OFPGTALL, outAddGroupInput.getType());
491
492         Assert.assertEquals(10L, outAddGroupInput.getGroupId().getValue().longValue());
493
494         final List<Action> outActionList = outAddGroupInput.getBucketsList().get(0).getAction();
495         for (int outItem = 0; outItem < outActionList.size(); outItem++) {
496             final Action action = outActionList
497                     .get(outItem);
498             if (action.getActionChoice() instanceof GroupActionCase) {
499                 Assert.assertEquals((Long) 5L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
500
501             }
502
503         }
504
505         final List<Action> outActionList1 = outAddGroupInput.getBucketsList().get(1).getAction();
506         for (int outItem = 0; outItem < outActionList1.size(); outItem++) {
507             final Action action = outActionList1
508                     .get(outItem);
509             if (action.getActionChoice() instanceof GroupActionCase) {
510
511                 Assert.assertEquals((Long) 6L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
512
513             }
514
515         }
516
517     }
518
519     private GroupModInputBuilder convert(Group group, VersionDatapathIdConvertorData data) {
520         final Optional<GroupModInputBuilder> outAddGroupInputOptional = convertorManager.convert(group, data);
521         Assert.assertTrue("Group convertor not found", outAddGroupInputOptional.isPresent());
522         return outAddGroupInputOptional.get();
523     }
524 }