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