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