Bug 5540 - ConvertorManager DataContainer source, one Convertor interface
[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.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;
48
49 public class GroupConvertorTest {
50
51     /**
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)} }
53      */
54     @Test
55     public void testGroupModConvertorwithallParameters() {
56
57         final AddGroupInputBuilder addGroupBuilder = new AddGroupInputBuilder();
58
59         addGroupBuilder.setGroupId(new GroupId(10L));
60
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>();
65
66         int actionOrder = 0;
67
68         // Action1
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());
74
75         // Action2:
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());
81
82         actionsList.add(actionsB.build());
83         actionsList.add(actionsB1.build());
84
85
86         final BucketsBuilder bucketsB = new BucketsBuilder();
87
88         final BucketBuilder bucketB = new BucketBuilder();
89         bucketB.setWeight(10);
90         bucketB.setWatchPort(20L);
91         bucketB.setWatchGroup(22L);
92
93         bucketB.setAction(actionsList);
94         final Bucket bucket = bucketB.build();
95
96         bucketList.add(bucket); // List of bucket
97
98         final BucketBuilder bucketB1 = new BucketBuilder();
99         bucketB1.setWeight(50);
100         bucketB1.setWatchPort(60L);
101         bucketB1.setWatchGroup(70L);
102
103         // Action1
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());
108
109         // Action2:
110         final SetMplsTtlActionBuilder setMplsTtlActionBuilder = new SetMplsTtlActionBuilder();
111         setMplsTtlActionBuilder.setMplsTtl((short) 0X1);
112         final SetMplsTtlAction setMAction = setMplsTtlActionBuilder.build();
113         final ActionBuilder actionsB3 = new ActionBuilder();
114
115         actionsB3.setOrder(actionOrder++).setAction(new SetMplsTtlActionCaseBuilder().setSetMplsTtlAction(setMAction).build());
116
117
118         actionsList1.add(actionsB2.build());
119         actionsList1.add(actionsB3.build());
120
121         bucketB1.setAction(actionsList);
122
123         final Bucket bucket1 = bucketB1.build(); // second bucket
124
125         bucketList.add(bucket1);
126
127         bucketsB.setBucket(bucketList);// List of bucket added to the Buckets
128         final Buckets buckets = bucketsB.build();
129
130         addGroupBuilder.setBuckets(buckets);
131
132         VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData((short) 0X4);
133         data.setDatapathId(BigInteger.valueOf(1));
134
135         final GroupModInputBuilder outAddGroupInput = convert(addGroupBuilder.build(), data);
136
137         Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
138         Assert.assertEquals(GroupType.OFPGTALL, outAddGroupInput.getType());
139
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());
144
145         final List<Action> outActionList = outAddGroupInput.getBucketsList().get(0).getAction();
146         for (int outItem = 0; outItem < outActionList.size(); outItem++) {
147             final Action action = outActionList
148                     .get(outItem);
149             if (action.getActionChoice() instanceof GroupActionCase) {
150                 Assert.assertEquals((Long) 5L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
151
152             }
153             // TODO:setMplsTTL :OF layer doesnt have get();
154         }
155
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
162                     .get(outItem);
163             if (action.getActionChoice() instanceof GroupActionCase) {
164
165                 Assert.assertEquals((Long) 6L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
166
167
168             }
169             // TODO:setMplsTTL :OF layer doesnt have get();
170         }
171
172     }
173
174     /**
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)} }
176      */
177     @Test
178     public void testGroupModConvertorNoBucket() {
179         final AddGroupInputBuilder addGroupBuilder = new AddGroupInputBuilder();
180
181         addGroupBuilder.setGroupId(new GroupId(10L));
182
183         addGroupBuilder.setGroupType(GroupTypes.GroupAll);
184
185         VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData((short) 0X4);
186         data.setDatapathId(BigInteger.valueOf(1));
187
188         final GroupModInputBuilder outAddGroupInput = convert(addGroupBuilder.build(), data);
189         Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
190         Assert.assertEquals(GroupType.OFPGTALL, outAddGroupInput.getType());
191     }
192
193     /**
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)} }
195      */
196     @Test
197     public void testGroupModConvertorBucketwithNOWieghtValuesForGroupTypeFastFailure() {
198
199         int actionOrder = 0;
200
201         final AddGroupInputBuilder addGroupBuilder = new AddGroupInputBuilder();
202
203         addGroupBuilder.setGroupId(new GroupId(10L));
204
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>();
209
210         // Action1: 005
211         actionsList.add(assembleActionBuilder("005", actionOrder++).build());
212         // Action2: 006
213         actionsList.add(assembleActionBuilder("006", actionOrder++).build());
214         // .. and mr.Bond is not coming today
215
216         final BucketsBuilder bucketsB = new BucketsBuilder();
217
218         final BucketBuilder bucketB = new BucketBuilder();
219
220         bucketB.setAction(actionsList);
221         final Bucket bucket = bucketB.build();
222
223         bucketList.add(bucket); // List of bucket
224
225
226         final BucketBuilder bucketB1 = new BucketBuilder();
227
228         // Action1
229         actionsList1.add(assembleCopyTtlInBuilder(actionOrder++).build());
230         // Action2:
231         actionsList1.add(assembleSetMplsTtlActionBuilder(actionOrder++).build());
232
233         bucketB1.setAction(actionsList1);
234
235         final Bucket bucket1 = bucketB1.build(); // second bucket
236
237         bucketList.add(bucket1);
238
239         bucketsB.setBucket(bucketList);// List of bucket added to the Buckets
240         final Buckets buckets = bucketsB.build();
241
242         addGroupBuilder.setBuckets(buckets);
243
244         VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData((short) 0X4);
245         data.setDatapathId(BigInteger.valueOf(1));
246
247         final GroupModInputBuilder outAddGroupInput = convert(addGroupBuilder.build(), data);
248
249         Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
250         Assert.assertEquals(GroupType.OFPGTFF, outAddGroupInput.getType());
251
252         Assert.assertEquals(10L, outAddGroupInput.getGroupId().getValue().longValue());
253
254         final List<Action> outActionList = outAddGroupInput.getBucketsList().get(0).getAction();
255         for (int outItem = 0; outItem < outActionList.size(); outItem++) {
256             final Action action = outActionList
257                     .get(outItem);
258             if (action.getActionChoice() instanceof GroupActionCase) {
259                 Assert.assertEquals((Long) 5L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
260             }
261         }
262
263         final List<Action> outActionList1 = outAddGroupInput.getBucketsList().get(1).getAction();
264         for (int outItem = 0; outItem < outActionList1.size(); outItem++) {
265             final Action action = outActionList1
266                     .get(outItem);
267             if (action.getActionChoice() instanceof GroupActionCase) {
268                 Assert.assertEquals((Long) 6L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
269             }
270         }
271     }
272
273     /**
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)} }
275      */
276     @Test
277     public void testGroupModConvertSortedBuckets() {
278
279         final int actionOrder = 0;
280
281         final ArrayList<Bucket> bucket = new ArrayList<Bucket>();
282
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()
288                         .setOrder(0)
289                         .setAction(new OutputActionCaseBuilder()
290                                 .setOutputAction(new OutputActionBuilder()
291                                         .setOutputNodeConnector(new Uri("openflow:1:2"))
292                                         .build())
293                                 .build())
294                         .build()))
295                 .build());
296
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()
302                         .setOrder(0)
303                         .setAction(new OutputActionCaseBuilder()
304                                 .setOutputAction(new OutputActionBuilder()
305                                         .setOutputNodeConnector(new Uri("openflow:1:6"))
306                                         .build())
307                                 .build())
308                         .build()))
309                 .build());
310
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()
316                         .setOrder(0)
317                         .setAction(new OutputActionCaseBuilder()
318                                 .setOutputAction(new OutputActionBuilder()
319                                         .setOutputNodeConnector(new Uri("openflow:1:5"))
320                                         .build())
321                                 .build())
322                         .build()))
323                 .build());
324
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()
330                         .setOrder(0)
331                         .setAction(new OutputActionCaseBuilder()
332                                 .setOutputAction(new OutputActionBuilder()
333                                         .setOutputNodeConnector(new Uri("openflow:1:4"))
334                                         .build())
335                                 .build())
336                         .build()))
337                 .build());
338
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()
344                         .setOrder(0)
345                         .setAction(new OutputActionCaseBuilder()
346                                 .setOutputAction(new OutputActionBuilder()
347                                         .setOutputNodeConnector(new Uri("openflow:1:3"))
348                                         .build())
349                                 .build())
350                         .build()))
351                 .build());
352
353
354         final AddGroupInput input = new AddGroupInputBuilder()
355                 .setGroupId(new GroupId((long) 1))
356                 .setGroupName("Foo")
357                 .setGroupType(GroupTypes.GroupFf)
358                 .setBuckets(new BucketsBuilder()
359                         .setBucket(bucket)
360                         .build())
361                 .build();
362
363         OpenflowPortsUtil.init();
364
365         VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData((short) 0X4);
366         data.setDatapathId(BigInteger.valueOf(1));
367
368         final GroupModInputBuilder outAddGroupInput = convert(input, data);
369
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());
373
374         Assert.assertEquals( Long.valueOf(1), bucketList.get(1).getWatchGroup());
375         Assert.assertEquals( Long.valueOf(4), bucketList.get(1).getWatchPort().getValue());
376
377         Assert.assertEquals( Long.valueOf(1), bucketList.get(2).getWatchGroup());
378         Assert.assertEquals( Long.valueOf(5), bucketList.get(2).getWatchPort().getValue());
379
380         Assert.assertEquals( Long.valueOf(1), bucketList.get(3).getWatchGroup());
381         Assert.assertEquals( Long.valueOf(6), bucketList.get(3).getWatchPort().getValue());
382
383         Assert.assertEquals( Long.valueOf(1), bucketList.get(4).getWatchGroup());
384         Assert.assertEquals( Long.valueOf(2), bucketList.get(4).getWatchPort().getValue());
385
386
387     }
388
389     /**
390      * @return
391      */
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());
399         return actionsB3;
400     }
401
402     /**
403      * @return
404      */
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());
411         return actionsB2;
412     }
413
414     /**
415      * @param groupName name of group
416      * @return
417      */
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());
425         return actionsBld;
426     }
427
428     /**
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)} }
430      */
431     @Test
432     public void testGroupModConvertorBucketwithNOWieghtValuesForGroupTypeAll() {
433
434         int actionOrder = 0;
435
436         final AddGroupInputBuilder addGroupBuilder = new AddGroupInputBuilder();
437
438         addGroupBuilder.setGroupId(new GroupId(10L));
439
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>();
444
445         // Action1
446         actionsList.add(assembleActionBuilder("005", actionOrder++).build());
447         // Action2:
448         actionsList.add(assembleActionBuilder("006", actionOrder++).build());
449
450         final BucketsBuilder bucketsB = new BucketsBuilder();
451
452         final BucketBuilder bucketB = new BucketBuilder();
453
454         bucketB.setAction(actionsList);
455         final Bucket bucket = bucketB.build();
456
457         bucketList.add(bucket); // List of bucket
458
459         final BucketBuilder bucketB1 = new BucketBuilder();
460
461         // Action1
462         actionsList1.add(assembleCopyTtlInBuilder(actionOrder++).build());
463         // Action2:
464         actionsList1.add(assembleSetMplsTtlActionBuilder(actionOrder++).build());
465
466         bucketB1.setAction(actionsList);
467
468         final Bucket bucket1 = bucketB1.build(); // second bucket
469
470         bucketList.add(bucket1);
471
472         bucketsB.setBucket(bucketList);// List of bucket added to the Buckets
473         final Buckets buckets = bucketsB.build();
474
475         addGroupBuilder.setBuckets(buckets);
476
477         VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData((short) 0X4);
478         data.setDatapathId(BigInteger.valueOf(1));
479
480         final GroupModInputBuilder outAddGroupInput = convert(addGroupBuilder.build(), data);
481
482         Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
483         Assert.assertEquals(GroupType.OFPGTALL, outAddGroupInput.getType());
484
485         Assert.assertEquals(10L, outAddGroupInput.getGroupId().getValue().longValue());
486
487         final List<Action> outActionList = outAddGroupInput.getBucketsList().get(0).getAction();
488         for (int outItem = 0; outItem < outActionList.size(); outItem++) {
489             final Action action = outActionList
490                     .get(outItem);
491             if (action.getActionChoice() instanceof GroupActionCase) {
492                 Assert.assertEquals((Long) 5L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
493
494             }
495
496         }
497
498         final List<Action> outActionList1 = outAddGroupInput.getBucketsList().get(1).getAction();
499         for (int outItem = 0; outItem < outActionList1.size(); outItem++) {
500             final Action action = outActionList1
501                     .get(outItem);
502             if (action.getActionChoice() instanceof GroupActionCase) {
503
504                 Assert.assertEquals((Long) 6L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
505
506             }
507
508         }
509
510     }
511
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();
516     }
517 }