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