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