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