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