Merge "Cli to display all the connected DPNs"
[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.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     private ConvertorManager convertorManager;
51
52     @Before
53     public void setUp() {
54         convertorManager = ConvertorManagerFactory.createDefaultManager();
55     }
56
57     /**
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)} }
59      */
60     @Test
61     public void testGroupModConvertorwithallParameters() {
62
63         final AddGroupInputBuilder addGroupBuilder = new AddGroupInputBuilder();
64
65         addGroupBuilder.setGroupId(new GroupId(10L));
66
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>();
71
72         int actionOrder = 0;
73
74         // Action1
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());
80
81         // Action2:
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());
87
88         actionsList.add(actionsB.build());
89         actionsList.add(actionsB1.build());
90
91
92         final BucketsBuilder bucketsB = new BucketsBuilder();
93
94         final BucketBuilder bucketB = new BucketBuilder();
95         bucketB.setWeight(10);
96         bucketB.setWatchPort(20L);
97         bucketB.setWatchGroup(22L);
98
99         bucketB.setAction(actionsList);
100         final Bucket bucket = bucketB.build();
101
102         bucketList.add(bucket); // List of bucket
103
104         final BucketBuilder bucketB1 = new BucketBuilder();
105         bucketB1.setWeight(50);
106         bucketB1.setWatchPort(60L);
107         bucketB1.setWatchGroup(70L);
108
109         // Action1
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());
114
115         // Action2:
116         final SetMplsTtlActionBuilder setMplsTtlActionBuilder = new SetMplsTtlActionBuilder();
117         setMplsTtlActionBuilder.setMplsTtl((short) 0X1);
118         final SetMplsTtlAction setMAction = setMplsTtlActionBuilder.build();
119         final ActionBuilder actionsB3 = new ActionBuilder();
120
121         actionsB3.setOrder(actionOrder++).setAction(new SetMplsTtlActionCaseBuilder().setSetMplsTtlAction(setMAction).build());
122
123
124         actionsList1.add(actionsB2.build());
125         actionsList1.add(actionsB3.build());
126
127         bucketB1.setAction(actionsList);
128
129         final Bucket bucket1 = bucketB1.build(); // second bucket
130
131         bucketList.add(bucket1);
132
133         bucketsB.setBucket(bucketList);// List of bucket added to the Buckets
134         final Buckets buckets = bucketsB.build();
135
136         addGroupBuilder.setBuckets(buckets);
137
138         VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData((short) 0X4);
139         data.setDatapathId(BigInteger.valueOf(1));
140
141         final GroupModInputBuilder outAddGroupInput = convert(addGroupBuilder.build(), data);
142
143         Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
144         Assert.assertEquals(GroupType.OFPGTALL, outAddGroupInput.getType());
145
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());
150
151         final List<Action> outActionList = outAddGroupInput.getBucketsList().get(0).getAction();
152         for (int outItem = 0; outItem < outActionList.size(); outItem++) {
153             final Action action = outActionList
154                     .get(outItem);
155             if (action.getActionChoice() instanceof GroupActionCase) {
156                 Assert.assertEquals((Long) 5L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
157
158             }
159             // TODO:setMplsTTL :OF layer doesnt have get();
160         }
161
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
168                     .get(outItem);
169             if (action.getActionChoice() instanceof GroupActionCase) {
170
171                 Assert.assertEquals((Long) 6L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
172
173
174             }
175             // TODO:setMplsTTL :OF layer doesnt have get();
176         }
177
178     }
179
180     /**
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)} }
182      */
183     @Test
184     public void testGroupModConvertorNoBucket() {
185         final AddGroupInputBuilder addGroupBuilder = new AddGroupInputBuilder();
186
187         addGroupBuilder.setGroupId(new GroupId(10L));
188
189         addGroupBuilder.setGroupType(GroupTypes.GroupAll);
190
191         VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData((short) 0X4);
192         data.setDatapathId(BigInteger.valueOf(1));
193
194         final GroupModInputBuilder outAddGroupInput = convert(addGroupBuilder.build(), data);
195         Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
196         Assert.assertEquals(GroupType.OFPGTALL, outAddGroupInput.getType());
197     }
198
199     /**
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)} }
201      */
202     @Test
203     public void testGroupModConvertorBucketwithNOWieghtValuesForGroupTypeFastFailure() {
204
205         int actionOrder = 0;
206
207         final AddGroupInputBuilder addGroupBuilder = new AddGroupInputBuilder();
208
209         addGroupBuilder.setGroupId(new GroupId(10L));
210
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>();
215
216         // Action1: 005
217         actionsList.add(assembleActionBuilder("005", actionOrder++).build());
218         // Action2: 006
219         actionsList.add(assembleActionBuilder("006", actionOrder++).build());
220         // .. and mr.Bond is not coming today
221
222         final BucketsBuilder bucketsB = new BucketsBuilder();
223
224         final BucketBuilder bucketB = new BucketBuilder();
225
226         bucketB.setAction(actionsList);
227         final Bucket bucket = bucketB.build();
228
229         bucketList.add(bucket); // List of bucket
230
231
232         final BucketBuilder bucketB1 = new BucketBuilder();
233
234         // Action1
235         actionsList1.add(assembleCopyTtlInBuilder(actionOrder++).build());
236         // Action2:
237         actionsList1.add(assembleSetMplsTtlActionBuilder(actionOrder++).build());
238
239         bucketB1.setAction(actionsList1);
240
241         final Bucket bucket1 = bucketB1.build(); // second bucket
242
243         bucketList.add(bucket1);
244
245         bucketsB.setBucket(bucketList);// List of bucket added to the Buckets
246         final Buckets buckets = bucketsB.build();
247
248         addGroupBuilder.setBuckets(buckets);
249
250         VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData((short) 0X4);
251         data.setDatapathId(BigInteger.valueOf(1));
252
253         final GroupModInputBuilder outAddGroupInput = convert(addGroupBuilder.build(), data);
254
255         Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
256         Assert.assertEquals(GroupType.OFPGTFF, outAddGroupInput.getType());
257
258         Assert.assertEquals(10L, outAddGroupInput.getGroupId().getValue().longValue());
259
260         final List<Action> outActionList = outAddGroupInput.getBucketsList().get(0).getAction();
261         for (int outItem = 0; outItem < outActionList.size(); outItem++) {
262             final Action action = outActionList
263                     .get(outItem);
264             if (action.getActionChoice() instanceof GroupActionCase) {
265                 Assert.assertEquals((Long) 5L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
266             }
267         }
268
269         final List<Action> outActionList1 = outAddGroupInput.getBucketsList().get(1).getAction();
270         for (int outItem = 0; outItem < outActionList1.size(); outItem++) {
271             final Action action = outActionList1
272                     .get(outItem);
273             if (action.getActionChoice() instanceof GroupActionCase) {
274                 Assert.assertEquals((Long) 6L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
275             }
276         }
277     }
278
279     /**
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)} }
281      */
282     @Test
283     public void testGroupModConvertSortedBuckets() {
284
285         final int actionOrder = 0;
286
287         final ArrayList<Bucket> bucket = new ArrayList<Bucket>();
288
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()
294                         .setOrder(0)
295                         .setAction(new OutputActionCaseBuilder()
296                                 .setOutputAction(new OutputActionBuilder()
297                                         .setOutputNodeConnector(new Uri("openflow:1:2"))
298                                         .build())
299                                 .build())
300                         .build()))
301                 .build());
302
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()
308                         .setOrder(0)
309                         .setAction(new OutputActionCaseBuilder()
310                                 .setOutputAction(new OutputActionBuilder()
311                                         .setOutputNodeConnector(new Uri("openflow:1:6"))
312                                         .build())
313                                 .build())
314                         .build()))
315                 .build());
316
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()
322                         .setOrder(0)
323                         .setAction(new OutputActionCaseBuilder()
324                                 .setOutputAction(new OutputActionBuilder()
325                                         .setOutputNodeConnector(new Uri("openflow:1:5"))
326                                         .build())
327                                 .build())
328                         .build()))
329                 .build());
330
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()
336                         .setOrder(0)
337                         .setAction(new OutputActionCaseBuilder()
338                                 .setOutputAction(new OutputActionBuilder()
339                                         .setOutputNodeConnector(new Uri("openflow:1:4"))
340                                         .build())
341                                 .build())
342                         .build()))
343                 .build());
344
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()
350                         .setOrder(0)
351                         .setAction(new OutputActionCaseBuilder()
352                                 .setOutputAction(new OutputActionBuilder()
353                                         .setOutputNodeConnector(new Uri("openflow:1:3"))
354                                         .build())
355                                 .build())
356                         .build()))
357                 .build());
358
359
360         final AddGroupInput input = new AddGroupInputBuilder()
361                 .setGroupId(new GroupId((long) 1))
362                 .setGroupName("Foo")
363                 .setGroupType(GroupTypes.GroupFf)
364                 .setBuckets(new BucketsBuilder()
365                         .setBucket(bucket)
366                         .build())
367                 .build();
368
369         VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData((short) 0X4);
370         data.setDatapathId(BigInteger.valueOf(1));
371
372         final GroupModInputBuilder outAddGroupInput = convert(input, data);
373
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());
377
378         Assert.assertEquals( Long.valueOf(1), bucketList.get(1).getWatchGroup());
379         Assert.assertEquals( Long.valueOf(4), bucketList.get(1).getWatchPort().getValue());
380
381         Assert.assertEquals( Long.valueOf(1), bucketList.get(2).getWatchGroup());
382         Assert.assertEquals( Long.valueOf(5), bucketList.get(2).getWatchPort().getValue());
383
384         Assert.assertEquals( Long.valueOf(1), bucketList.get(3).getWatchGroup());
385         Assert.assertEquals( Long.valueOf(6), bucketList.get(3).getWatchPort().getValue());
386
387         Assert.assertEquals( Long.valueOf(1), bucketList.get(4).getWatchGroup());
388         Assert.assertEquals( Long.valueOf(2), bucketList.get(4).getWatchPort().getValue());
389
390
391     }
392
393     /**
394      * @return
395      */
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());
403         return actionsB3;
404     }
405
406     /**
407      * @return
408      */
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());
415         return actionsB2;
416     }
417
418     /**
419      * @param groupName name of group
420      * @return
421      */
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());
429         return actionsBld;
430     }
431
432     /**
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)} }
434      */
435     @Test
436     public void testGroupModConvertorBucketwithNOWieghtValuesForGroupTypeAll() {
437
438         int actionOrder = 0;
439
440         final AddGroupInputBuilder addGroupBuilder = new AddGroupInputBuilder();
441
442         addGroupBuilder.setGroupId(new GroupId(10L));
443
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>();
448
449         // Action1
450         actionsList.add(assembleActionBuilder("005", actionOrder++).build());
451         // Action2:
452         actionsList.add(assembleActionBuilder("006", actionOrder++).build());
453
454         final BucketsBuilder bucketsB = new BucketsBuilder();
455
456         final BucketBuilder bucketB = new BucketBuilder();
457
458         bucketB.setAction(actionsList);
459         final Bucket bucket = bucketB.build();
460
461         bucketList.add(bucket); // List of bucket
462
463         final BucketBuilder bucketB1 = new BucketBuilder();
464
465         // Action1
466         actionsList1.add(assembleCopyTtlInBuilder(actionOrder++).build());
467         // Action2:
468         actionsList1.add(assembleSetMplsTtlActionBuilder(actionOrder++).build());
469
470         bucketB1.setAction(actionsList);
471
472         final Bucket bucket1 = bucketB1.build(); // second bucket
473
474         bucketList.add(bucket1);
475
476         bucketsB.setBucket(bucketList);// List of bucket added to the Buckets
477         final Buckets buckets = bucketsB.build();
478
479         addGroupBuilder.setBuckets(buckets);
480
481         VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData((short) 0X4);
482         data.setDatapathId(BigInteger.valueOf(1));
483
484         final GroupModInputBuilder outAddGroupInput = convert(addGroupBuilder.build(), data);
485
486         Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
487         Assert.assertEquals(GroupType.OFPGTALL, outAddGroupInput.getType());
488
489         Assert.assertEquals(10L, outAddGroupInput.getGroupId().getValue().longValue());
490
491         final List<Action> outActionList = outAddGroupInput.getBucketsList().get(0).getAction();
492         for (int outItem = 0; outItem < outActionList.size(); outItem++) {
493             final Action action = outActionList
494                     .get(outItem);
495             if (action.getActionChoice() instanceof GroupActionCase) {
496                 Assert.assertEquals((Long) 5L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
497
498             }
499
500         }
501
502         final List<Action> outActionList1 = outAddGroupInput.getBucketsList().get(1).getAction();
503         for (int outItem = 0; outItem < outActionList1.size(); outItem++) {
504             final Action action = outActionList1
505                     .get(outItem);
506             if (action.getActionChoice() instanceof GroupActionCase) {
507
508                 Assert.assertEquals((Long) 6L, ((GroupActionCase) action.getActionChoice()).getGroupAction().getGroupId());
509
510             }
511
512         }
513
514     }
515
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();
520     }
521 }