Fix Bug 271
[openflowplugin.git] / openflowplugin / src / test / java / org / opendaylight / openflowplugin / openflow / md / core / sal / convertor / GroupConvertorTest.java
1 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
2
3 import java.math.BigInteger;
4 import java.util.ArrayList;
5 import java.util.List;
6
7 import org.junit.Assert;
8 import org.junit.Test;
9 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlInCaseBuilder;
10 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCaseBuilder;
11 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetMplsTtlActionCaseBuilder;
12 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.copy.ttl.in._case.CopyTtlIn;
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.copy.ttl.in._case.CopyTtlInBuilder;
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.group.action._case.GroupAction;
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.group.action._case.GroupActionBuilder;
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.mpls.ttl.action._case.SetMplsTtlAction;
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.set.mpls.ttl.action._case.SetMplsTtlActionBuilder;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.AddGroupInputBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.Buckets;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.BucketsBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.Bucket;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.GroupIdAction;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.ActionsList;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupModCommand;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupType;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GroupModInput;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GroupModInputBuilder;
32
33 public class GroupConvertorTest {
34
35     /**
36      * test of {@link GroupConvertor#toGroupModInput(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, short)}
37      */
38     @Test
39     public void testGroupModConvertorwithallParameters() {
40
41         AddGroupInputBuilder addGroupBuilder = new AddGroupInputBuilder();
42
43         addGroupBuilder.setGroupId(new GroupId(10L));
44
45         addGroupBuilder.setGroupType(GroupTypes.GroupAll);
46         List<Bucket> bucketList = new ArrayList<Bucket>();
47         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>();
48         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>();
49
50         // Action1
51         GroupActionBuilder groupActionBuilder = new GroupActionBuilder();
52         groupActionBuilder.setGroup("005");
53         GroupAction groupIdaction = groupActionBuilder.build();
54         ActionBuilder actionsB = new ActionBuilder();
55         actionsB.setAction(new GroupActionCaseBuilder().setGroupAction(groupIdaction).build());
56
57         // Action2:
58         GroupActionBuilder groupActionBuilder1 = new GroupActionBuilder();
59         groupActionBuilder1.setGroup("006");
60         GroupAction groupIdaction1 = groupActionBuilder.build();
61         ActionBuilder actionsB1 = new ActionBuilder();
62         actionsB1.setAction(new GroupActionCaseBuilder().setGroupAction(groupIdaction1).build());
63
64         actionsList.add(actionsB.build());
65         actionsList.add(actionsB1.build());
66
67
68         BucketsBuilder bucketsB = new BucketsBuilder();
69
70         BucketBuilder bucketB = new BucketBuilder();
71         bucketB.setWeight(10);
72         bucketB.setWatchPort(20L);
73         bucketB.setWatchGroup(22L);
74
75         bucketB.setAction(actionsList);
76         Bucket bucket = bucketB.build();
77
78         bucketList.add(bucket); // List of bucket
79
80         BucketBuilder bucketB1 = new BucketBuilder();
81         bucketB1.setWeight(50);
82         bucketB1.setWatchPort(60L);
83         bucketB1.setWatchGroup(70L);
84
85         // Action1
86         CopyTtlInBuilder copyTtlB = new CopyTtlInBuilder();
87         CopyTtlIn copyTtl = copyTtlB.build();
88         ActionBuilder actionsB2 = new ActionBuilder();
89         actionsB2.setAction(new CopyTtlInCaseBuilder().setCopyTtlIn(copyTtl).build());
90
91         // Action2:
92         SetMplsTtlActionBuilder setMplsTtlActionBuilder = new SetMplsTtlActionBuilder();
93         setMplsTtlActionBuilder.setMplsTtl((short)0X1);
94         SetMplsTtlAction setMAction = setMplsTtlActionBuilder.build();
95         ActionBuilder actionsB3 = new ActionBuilder();
96
97         actionsB3.setAction(new SetMplsTtlActionCaseBuilder().setSetMplsTtlAction(setMAction).build());
98
99
100         actionsList1.add(actionsB2.build());
101         actionsList1.add(actionsB3.build());
102
103         bucketB1.setAction(actionsList);
104
105         Bucket bucket1 = bucketB1.build(); // second bucket
106
107         bucketList.add(bucket1);
108
109         bucketsB.setBucket(bucketList);// List of bucket added to the Buckets
110         Buckets buckets = bucketsB.build();
111
112         addGroupBuilder.setBuckets(buckets);
113
114         GroupModInputBuilder outAddGroupInput = GroupConvertor.toGroupModInput(addGroupBuilder.build(), (short) 0X4,BigInteger.valueOf(1));
115
116         Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
117         Assert.assertEquals(GroupType.OFPGTALL, outAddGroupInput.getType());
118
119         Assert.assertEquals(10L, (long) outAddGroupInput.getGroupId().getValue());
120         Assert.assertEquals(10, (int) outAddGroupInput.getBucketsList().get(0).getWeight());
121         Assert.assertEquals(20L, (long) outAddGroupInput.getBucketsList().get(0).getWatchPort().getValue());
122         Assert.assertEquals((Long) 22L, outAddGroupInput.getBucketsList().get(0).getWatchGroup());
123
124         List<ActionsList> outActionList = outAddGroupInput.getBucketsList().get(0).getActionsList();
125         for (int outItem = 0; outItem < outActionList.size(); outItem++) {
126             org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.Action action = outActionList
127                     .get(outItem).getAction();
128             if (action instanceof GroupIdAction) {
129                 Assert.assertEquals((Long) 5L, ((GroupIdAction) action).getGroupId());
130
131             }
132             // TODO:setMplsTTL :OF layer doesnt have get();
133         }
134
135         Assert.assertEquals((Integer) 50, outAddGroupInput.getBucketsList().get(1).getWeight());
136         Assert.assertEquals((long) 60, (long) outAddGroupInput.getBucketsList().get(1).getWatchPort().getValue());
137         Assert.assertEquals((Long) 70L, outAddGroupInput.getBucketsList().get(1).getWatchGroup());
138         List<ActionsList> outActionList1 = outAddGroupInput.getBucketsList().get(1).getActionsList();
139         for (int outItem = 0; outItem < outActionList1.size(); outItem++) {
140             org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.Action action = outActionList1
141                     .get(outItem).getAction();
142             if (action instanceof GroupIdAction) {
143
144                 Assert.assertEquals((Long) 6L, ((GroupIdAction) action).getGroupId());
145
146
147             }
148             // TODO:setMplsTTL :OF layer doesnt have get();
149         }
150
151     }
152
153     /**
154      * test of {@link GroupConvertor#toGroupModInput(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, short)}
155      */
156     @Test
157     public void testGroupModConvertorNoBucket() {
158         AddGroupInputBuilder addGroupBuilder = new AddGroupInputBuilder();
159
160         addGroupBuilder.setGroupId(new GroupId(10L));
161
162         addGroupBuilder.setGroupType(GroupTypes.GroupAll);
163
164         GroupModInputBuilder outAddGroupInput = GroupConvertor.toGroupModInput(addGroupBuilder.build(), (short) 0X4,BigInteger.valueOf(1));
165
166         Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
167         Assert.assertEquals(GroupType.OFPGTALL, outAddGroupInput.getType());
168     }
169
170     /**
171      * test of {@link GroupConvertor#toGroupModInput(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, short)}
172      */
173     @Test
174     public void testGroupModConvertorBucketwithNOWieghtValuesForGroupTypeFastFailure() {
175
176         AddGroupInputBuilder addGroupBuilder = new AddGroupInputBuilder();
177
178         addGroupBuilder.setGroupId(new GroupId(10L));
179
180         addGroupBuilder.setGroupType(GroupTypes.GroupFf);
181         List<Bucket> bucketList = new ArrayList<Bucket>();
182         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>();
183         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>();
184
185         // Action1: 005
186         actionsList.add(assembleActionBuilder("005").build());
187         // Action2: 006
188         actionsList.add(assembleActionBuilder("006").build());
189         // .. and mr.Bond is not coming today
190
191         BucketsBuilder bucketsB = new BucketsBuilder();
192
193         BucketBuilder bucketB = new BucketBuilder();
194
195         bucketB.setAction(actionsList);
196         Bucket bucket = bucketB.build();
197
198         bucketList.add(bucket); // List of bucket
199         
200
201         
202         BucketBuilder bucketB1 = new BucketBuilder();
203
204         // Action1
205         actionsList1.add(assembleCopyTtlInBuilder().build());
206         // Action2:
207         actionsList1.add(assembleSetMplsTtlActionBuilder().build());
208
209         bucketB1.setAction(actionsList1);
210
211         Bucket bucket1 = bucketB1.build(); // second bucket
212
213         bucketList.add(bucket1);
214
215         bucketsB.setBucket(bucketList);// List of bucket added to the Buckets
216         Buckets buckets = bucketsB.build();
217
218         addGroupBuilder.setBuckets(buckets);
219
220         GroupModInputBuilder outAddGroupInput = GroupConvertor.toGroupModInput(addGroupBuilder.build(), (short) 0X4,BigInteger.valueOf(1));
221
222         Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
223         Assert.assertEquals(GroupType.OFPGTFF, outAddGroupInput.getType());
224
225         Assert.assertEquals(10L, outAddGroupInput.getGroupId().getValue().longValue());
226
227         List<ActionsList> outActionList = outAddGroupInput.getBucketsList().get(0).getActionsList();
228         for (int outItem = 0; outItem < outActionList.size(); outItem++) {
229             org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.Action action = outActionList
230                     .get(outItem).getAction();
231             if (action instanceof GroupIdAction) {
232                 Assert.assertEquals((Long) 5L, ((GroupIdAction) action).getGroupId());
233             }
234         }
235
236         List<ActionsList> outActionList1 = outAddGroupInput.getBucketsList().get(1).getActionsList();
237         for (int outItem = 0; outItem < outActionList1.size(); outItem++) {
238             org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.Action action = outActionList1
239                     .get(outItem).getAction();
240             if (action instanceof GroupIdAction) {
241                 Assert.assertEquals((Long) 6L, ((GroupIdAction) action).getGroupId());
242             }
243         }
244     }
245
246     /**
247      * @return
248      */
249     private static ActionBuilder assembleSetMplsTtlActionBuilder() {
250         SetMplsTtlActionBuilder setMplsTtlActionBuilder = new SetMplsTtlActionBuilder();
251         setMplsTtlActionBuilder.setMplsTtl((short) 0X1);
252         SetMplsTtlActionCaseBuilder setMplsTtlActionCaseBuilder = new SetMplsTtlActionCaseBuilder();
253         setMplsTtlActionCaseBuilder.setSetMplsTtlAction(setMplsTtlActionBuilder.build());
254         ActionBuilder actionsB3 = new ActionBuilder();
255         actionsB3.setAction(setMplsTtlActionCaseBuilder.build());
256         return actionsB3;
257     }
258
259     /**
260      * @return
261      */
262     private static ActionBuilder assembleCopyTtlInBuilder() {
263         CopyTtlInBuilder copyTtlB = new CopyTtlInBuilder();
264         CopyTtlInCaseBuilder copyTtlInCaseBuilder = new CopyTtlInCaseBuilder();
265         copyTtlInCaseBuilder.setCopyTtlIn(copyTtlB.build());
266         ActionBuilder actionsB2 = new ActionBuilder();
267         actionsB2.setAction(copyTtlInCaseBuilder.build());
268         return actionsB2;
269     }
270
271     /**
272      * @param groupName name of group
273      * @return 
274      * 
275      */
276     private static ActionBuilder assembleActionBuilder(String groupName) {
277         GroupActionBuilder groupActionBuilder = new GroupActionBuilder();
278         groupActionBuilder.setGroup(groupName);
279         GroupActionCaseBuilder groupActionCaseBuilder = new GroupActionCaseBuilder();
280         groupActionCaseBuilder.setGroupAction(groupActionBuilder.build());
281         ActionBuilder actionsBld = new ActionBuilder();
282         actionsBld.setAction(groupActionCaseBuilder.build());
283         return actionsBld;
284     }
285
286     /**
287      * test of {@link GroupConvertor#toGroupModInput(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, short)}
288      */
289     @Test
290     public void testGroupModConvertorBucketwithNOWieghtValuesForGroupTypeAll() {
291
292         AddGroupInputBuilder addGroupBuilder = new AddGroupInputBuilder();
293
294         addGroupBuilder.setGroupId(new GroupId(10L));
295
296         addGroupBuilder.setGroupType(GroupTypes.GroupAll);
297         List<Bucket> bucketList = new ArrayList<Bucket>();
298         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>();
299         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>();
300
301         // Action1
302         actionsList.add(assembleActionBuilder("005").build());
303         // Action2:
304         actionsList.add(assembleActionBuilder("006").build());
305
306         BucketsBuilder bucketsB = new BucketsBuilder();
307
308         BucketBuilder bucketB = new BucketBuilder();
309
310         bucketB.setAction(actionsList);
311         Bucket bucket = bucketB.build();
312
313         bucketList.add(bucket); // List of bucket
314
315         BucketBuilder bucketB1 = new BucketBuilder();
316
317         // Action1
318         actionsList1.add(assembleCopyTtlInBuilder().build());
319         // Action2:
320         actionsList1.add(assembleSetMplsTtlActionBuilder().build());
321
322         bucketB1.setAction(actionsList);
323
324         Bucket bucket1 = bucketB1.build(); // second bucket
325
326         bucketList.add(bucket1);
327
328         bucketsB.setBucket(bucketList);// List of bucket added to the Buckets
329         Buckets buckets = bucketsB.build();
330
331         addGroupBuilder.setBuckets(buckets);
332
333         GroupModInputBuilder outAddGroupInput = GroupConvertor.toGroupModInput(addGroupBuilder.build(), (short) 0X4,BigInteger.valueOf(1));
334
335         Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
336         Assert.assertEquals(GroupType.OFPGTALL, outAddGroupInput.getType());
337
338         Assert.assertEquals(10L, outAddGroupInput.getGroupId().getValue().longValue());
339
340         List<ActionsList> outActionList = outAddGroupInput.getBucketsList().get(0).getActionsList();
341         for (int outItem = 0; outItem < outActionList.size(); outItem++) {
342             org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.Action action = outActionList
343                     .get(outItem).getAction();
344             if (action instanceof GroupIdAction) {
345                 Assert.assertEquals((Long) 5L, ((GroupIdAction) action).getGroupId());
346
347             }
348
349         }
350
351         List<ActionsList> outActionList1 = outAddGroupInput.getBucketsList().get(1).getActionsList();
352         for (int outItem = 0; outItem < outActionList1.size(); outItem++) {
353             org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.actions.list.Action action = outActionList1
354                     .get(outItem).getAction();
355             if (action instanceof GroupIdAction) {
356
357                 Assert.assertEquals((Long) 6L, ((GroupIdAction) action).getGroupId());
358
359             }
360
361         }
362
363     }
364 }