Bug 1254 - Finished MultipartReplyTranslator tests
[openflowplugin.git] / openflowplugin / src / test / java / org / opendaylight / openflowplugin / openflow / md / core / translator / MultipartReplyTranslatorFourthTest.java
1 /*\r
2  * Copyright (c) 2014 Pantheon Technologies s.r.o. and others. All rights reserved.\r
3  *\r
4  * This program and the accompanying materials are made available under the\r
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
6  * and is available at http://www.eclipse.org/legal/epl-v10.html\r
7  */\r
8 \r
9 package org.opendaylight.openflowplugin.openflow.md.core.translator;\r
10 \r
11 import static org.mockito.Mockito.when;\r
12 \r
13 import java.math.BigInteger;\r
14 import java.util.ArrayList;\r
15 import java.util.List;\r
16 \r
17 import org.junit.Assert;\r
18 import org.junit.Before;\r
19 import org.junit.Test;\r
20 import org.mockito.Mock;\r
21 import org.mockito.MockitoAnnotations;\r
22 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;\r
23 import org.opendaylight.openflowplugin.api.openflow.md.core.SwitchConnectionDistinguisher;\r
24 import org.opendaylight.openflowplugin.openflow.md.core.ConnectionConductor;\r
25 import org.opendaylight.openflowplugin.openflow.md.core.session.SessionContext;\r
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GroupDescStatsUpdated;\r
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GroupStatisticsUpdated;\r
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;\r
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.Bucket;\r
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.desc.stats.reply.GroupDescStats;\r
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.DecMplsTtl;\r
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PopPbb;\r
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action;\r
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder;\r
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupId;\r
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupType;\r
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartRequestFlags;\r
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;\r
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;\r
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetFeaturesOutput;\r
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessage;\r
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessageBuilder;\r
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;\r
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.buckets.grouping.BucketsList;\r
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.buckets.grouping.BucketsListBuilder;\r
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyGroupCaseBuilder;\r
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyGroupDescCaseBuilder;\r
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.MultipartReplyGroupBuilder;\r
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.multipart.reply.group.GroupStats;\r
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.multipart.reply.group.GroupStatsBuilder;\r
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.multipart.reply.group.group.stats.BucketStats;\r
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.multipart.reply.group.group.stats.BucketStatsBuilder;\r
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group.desc._case.MultipartReplyGroupDescBuilder;\r
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group.desc._case.multipart.reply.group.desc.GroupDesc;\r
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group.desc._case.multipart.reply.group.desc.GroupDescBuilder;\r
56 import org.opendaylight.yangtools.yang.binding.DataObject;\r
57 \r
58 /**\r
59  * @author michal.polkorab\r
60  *\r
61  */\r
62 public class MultipartReplyTranslatorFourthTest {\r
63 \r
64     @Mock SwitchConnectionDistinguisher cookie;\r
65     @Mock SessionContext sc;\r
66     @Mock ConnectionConductor conductor;\r
67     @Mock GetFeaturesOutput features;\r
68 \r
69     MultipartReplyTranslator translator = new MultipartReplyTranslator();\r
70 \r
71     /**\r
72      * Initializes mocks\r
73      */\r
74     @Before\r
75     public void startUp() {\r
76         MockitoAnnotations.initMocks(this);\r
77         when(sc.getPrimaryConductor()).thenReturn(conductor);\r
78         when(conductor.getVersion()).thenReturn((short) EncodeConstants.OF13_VERSION_ID);\r
79         when(sc.getFeatures()).thenReturn(features);\r
80         when(features.getDatapathId()).thenReturn(new BigInteger("42"));\r
81     }\r
82 \r
83     /**\r
84      * Test {@link MultipartReplyTranslator#translate(SwitchConnectionDistinguisher, SessionContext, OfHeader)}\r
85      * with empty group stats\r
86      */\r
87     @Test\r
88     public void testEmptyGroupStats() {\r
89         MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder();\r
90         mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID);\r
91         mpBuilder.setXid(123L);\r
92         mpBuilder.setFlags(new MultipartRequestFlags(false));\r
93         mpBuilder.setType(MultipartType.OFPMPGROUP);\r
94 \r
95         MultipartReplyGroupCaseBuilder caseBuilder = new MultipartReplyGroupCaseBuilder();\r
96         MultipartReplyGroupBuilder groupBuilder = new MultipartReplyGroupBuilder();\r
97         List<GroupStats> groupStats = new ArrayList<>();\r
98         groupBuilder.setGroupStats(groupStats);\r
99         caseBuilder.setMultipartReplyGroup(groupBuilder.build());\r
100         mpBuilder.setMultipartReplyBody(caseBuilder.build());\r
101         MultipartReplyMessage message = mpBuilder.build();\r
102         \r
103         List<DataObject> list = translator.translate(cookie, sc, message);\r
104 \r
105         Assert.assertEquals("Wrong list size", 1, list.size());\r
106         GroupStatisticsUpdated statUpdate = (GroupStatisticsUpdated) list.get(0);\r
107         Assert.assertEquals("Wrong node-id", "openflow:42", statUpdate.getId().getValue());\r
108         Assert.assertEquals("Wrong more-replies", false, statUpdate.isMoreReplies());\r
109         Assert.assertEquals("Wrong transaction-id", 123, statUpdate.getTransactionId().getValue().intValue());\r
110         Assert.assertEquals("Wrong group stats size", 0, statUpdate.getGroupStats().size());\r
111     }\r
112 \r
113     /**\r
114      * Test {@link MultipartReplyTranslator#translate(SwitchConnectionDistinguisher, SessionContext, OfHeader)}\r
115      * with group stats\r
116      */\r
117     @Test\r
118     public void testGroupStats() {\r
119         MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder();\r
120         mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID);\r
121         mpBuilder.setXid(123L);\r
122         mpBuilder.setFlags(new MultipartRequestFlags(false));\r
123         mpBuilder.setType(MultipartType.OFPMPGROUP);\r
124 \r
125         MultipartReplyGroupCaseBuilder caseBuilder = new MultipartReplyGroupCaseBuilder();\r
126         MultipartReplyGroupBuilder groupBuilder = new MultipartReplyGroupBuilder();\r
127         List<GroupStats> groupStats = new ArrayList<>();\r
128         GroupStatsBuilder builder = new GroupStatsBuilder();\r
129         builder.setGroupId(new GroupId(55L));\r
130         builder.setRefCount(56L);\r
131         builder.setPacketCount(new BigInteger("57"));\r
132         builder.setByteCount(new BigInteger("58"));\r
133         builder.setDurationSec(59L);\r
134         builder.setDurationNsec(60L);\r
135         List<BucketStats> bucketStats = new ArrayList<>();\r
136         BucketStatsBuilder bucketBuilder = new BucketStatsBuilder();\r
137         bucketBuilder.setByteCount(new BigInteger("61"));\r
138         bucketBuilder.setPacketCount(new BigInteger("62"));\r
139         bucketStats.add(bucketBuilder.build());\r
140         bucketBuilder = new BucketStatsBuilder();\r
141         bucketBuilder.setByteCount(new BigInteger("63"));\r
142         bucketBuilder.setPacketCount(new BigInteger("64"));\r
143         bucketStats.add(bucketBuilder.build());\r
144         builder.setBucketStats(bucketStats);\r
145         groupStats.add(builder.build());\r
146         builder = new GroupStatsBuilder();\r
147         builder.setGroupId(new GroupId(550L));\r
148         builder.setRefCount(560L);\r
149         builder.setPacketCount(new BigInteger("570"));\r
150         builder.setByteCount(new BigInteger("580"));\r
151         builder.setDurationSec(590L);\r
152         builder.setDurationNsec(600L);\r
153         bucketStats = new ArrayList<>();\r
154         builder.setBucketStats(bucketStats);\r
155         groupStats.add(builder.build());\r
156         groupBuilder.setGroupStats(groupStats);\r
157         caseBuilder.setMultipartReplyGroup(groupBuilder.build());\r
158         mpBuilder.setMultipartReplyBody(caseBuilder.build());\r
159         MultipartReplyMessage message = mpBuilder.build();\r
160         \r
161         List<DataObject> list = translator.translate(cookie, sc, message);\r
162 \r
163         Assert.assertEquals("Wrong list size", 1, list.size());\r
164         GroupStatisticsUpdated statUpdate = (GroupStatisticsUpdated) list.get(0);\r
165         Assert.assertEquals("Wrong node-id", "openflow:42", statUpdate.getId().getValue());\r
166         Assert.assertEquals("Wrong more-replies", false, statUpdate.isMoreReplies());\r
167         Assert.assertEquals("Wrong transaction-id", 123, statUpdate.getTransactionId().getValue().intValue());\r
168         Assert.assertEquals("Wrong group stats size", 2, statUpdate.getGroupStats().size());\r
169         org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply\r
170         .GroupStats stat = statUpdate.getGroupStats().get(0);\r
171         Assert.assertEquals("Wrong group-id", 55, stat.getGroupId().getValue().intValue());\r
172         Assert.assertEquals("Wrong ref count", 56, stat.getRefCount().getValue().intValue());\r
173         Assert.assertEquals("Wrong packet count", 57, stat.getPacketCount().getValue().intValue());\r
174         Assert.assertEquals("Wrong byte count", 58, stat.getByteCount().getValue().intValue());\r
175         Assert.assertEquals("Wrong duration sec", 59, stat.getDuration().getSecond().getValue().intValue());\r
176         Assert.assertEquals("Wrong duration n sec", 60, stat.getDuration().getNanosecond().getValue().intValue());\r
177         Assert.assertEquals("Wrong bucket stats size", 2, stat.getBuckets().getBucketCounter().size());\r
178         Assert.assertEquals("Wrong bucket-id", 0, stat.getBuckets().getBucketCounter().get(0).getBucketId().getValue().intValue());\r
179         Assert.assertEquals("Wrong byte count", 61, stat.getBuckets().getBucketCounter().get(0).getByteCount().getValue().intValue());\r
180         Assert.assertEquals("Wrong packet count", 62, stat.getBuckets().getBucketCounter().get(0).getPacketCount().getValue().intValue());\r
181         Assert.assertEquals("Wrong bucket-id", 1, stat.getBuckets().getBucketCounter().get(1).getBucketId().getValue().intValue());\r
182         Assert.assertEquals("Wrong byte count", 63, stat.getBuckets().getBucketCounter().get(1).getByteCount().getValue().intValue());\r
183         Assert.assertEquals("Wrong packet count", 64, stat.getBuckets().getBucketCounter().get(1).getPacketCount().getValue().intValue());\r
184         stat = statUpdate.getGroupStats().get(1);\r
185         Assert.assertEquals("Wrong group-id", 550, stat.getGroupId().getValue().intValue());\r
186         Assert.assertEquals("Wrong ref count", 560, stat.getRefCount().getValue().intValue());\r
187         Assert.assertEquals("Wrong packet count", 570, stat.getPacketCount().getValue().intValue());\r
188         Assert.assertEquals("Wrong byte count", 580, stat.getByteCount().getValue().intValue());\r
189         Assert.assertEquals("Wrong duration sec", 590, stat.getDuration().getSecond().getValue().intValue());\r
190         Assert.assertEquals("Wrong duration n sec", 600, stat.getDuration().getNanosecond().getValue().intValue());\r
191         Assert.assertEquals("Wrong bucket stats size", 0, stat.getBuckets().getBucketCounter().size());\r
192     }\r
193 \r
194     /**\r
195      * Test {@link MultipartReplyTranslator#translate(SwitchConnectionDistinguisher, SessionContext, OfHeader)}\r
196      * with empty group desc stats\r
197      */\r
198     @Test\r
199     public void testEmptyGroupDescStats() {\r
200         MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder();\r
201         mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID);\r
202         mpBuilder.setXid(123L);\r
203         mpBuilder.setFlags(new MultipartRequestFlags(false));\r
204         mpBuilder.setType(MultipartType.OFPMPGROUPDESC);\r
205 \r
206         MultipartReplyGroupDescCaseBuilder caseBuilder = new MultipartReplyGroupDescCaseBuilder();\r
207         MultipartReplyGroupDescBuilder groupBuilder = new MultipartReplyGroupDescBuilder();\r
208         List<GroupDesc> groupStats = new ArrayList<>();\r
209         groupBuilder.setGroupDesc(groupStats);\r
210         caseBuilder.setMultipartReplyGroupDesc(groupBuilder.build());\r
211         mpBuilder.setMultipartReplyBody(caseBuilder.build());\r
212         MultipartReplyMessage message = mpBuilder.build();\r
213         \r
214         List<DataObject> list = translator.translate(cookie, sc, message);\r
215 \r
216         Assert.assertEquals("Wrong list size", 1, list.size());\r
217         GroupDescStatsUpdated statUpdate = (GroupDescStatsUpdated) list.get(0);\r
218         Assert.assertEquals("Wrong node-id", "openflow:42", statUpdate.getId().getValue());\r
219         Assert.assertEquals("Wrong more-replies", false, statUpdate.isMoreReplies());\r
220         Assert.assertEquals("Wrong transaction-id", 123, statUpdate.getTransactionId().getValue().intValue());\r
221         Assert.assertEquals("Wrong group stats size", 0, statUpdate.getGroupDescStats().size());\r
222     }\r
223 \r
224     /**\r
225      * Test {@link MultipartReplyTranslator#translate(SwitchConnectionDistinguisher, SessionContext, OfHeader)}\r
226      * with group desc stats\r
227      */\r
228     @Test\r
229     public void testGroupDescStats() {\r
230         MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder();\r
231         mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID);\r
232         mpBuilder.setXid(123L);\r
233         mpBuilder.setFlags(new MultipartRequestFlags(false));\r
234         mpBuilder.setType(MultipartType.OFPMPGROUPDESC);\r
235 \r
236         MultipartReplyGroupDescCaseBuilder caseBuilder = new MultipartReplyGroupDescCaseBuilder();\r
237         MultipartReplyGroupDescBuilder groupBuilder = new MultipartReplyGroupDescBuilder();\r
238         List<GroupDesc> groupStats = new ArrayList<>();\r
239         \r
240         GroupDescBuilder builder = new GroupDescBuilder();\r
241         builder.setType(GroupType.OFPGTALL);\r
242         builder.setGroupId(new GroupId(1L));\r
243         List<BucketsList> buckets = new ArrayList<>();\r
244         BucketsListBuilder bucketBuilder = new BucketsListBuilder();\r
245         bucketBuilder.setWeight(28);\r
246         bucketBuilder.setWatchPort(new PortNumber(56L));\r
247         bucketBuilder.setWatchGroup(112L);\r
248         List<Action> actions = new ArrayList<>();\r
249         ActionBuilder actionBuilder = new ActionBuilder();\r
250         actionBuilder.setType(DecMplsTtl.class);\r
251         actions.add(actionBuilder.build());\r
252         actionBuilder = new ActionBuilder();\r
253         actionBuilder.setType(PopPbb.class);\r
254         actions.add(actionBuilder.build());\r
255         bucketBuilder.setAction(actions);\r
256         buckets.add(bucketBuilder.build());\r
257         bucketBuilder = new BucketsListBuilder();\r
258         bucketBuilder.setWeight(280);\r
259         bucketBuilder.setWatchPort(new PortNumber(560L));\r
260         bucketBuilder.setWatchGroup(1120L);\r
261         actions = new ArrayList<>();\r
262         bucketBuilder.setAction(actions);\r
263         buckets.add(bucketBuilder.build());\r
264         builder.setBucketsList(buckets);\r
265         groupStats.add(builder.build());\r
266         groupBuilder.setGroupDesc(groupStats);\r
267         caseBuilder.setMultipartReplyGroupDesc(groupBuilder.build());\r
268         mpBuilder.setMultipartReplyBody(caseBuilder.build());\r
269         MultipartReplyMessage message = mpBuilder.build();\r
270         \r
271         List<DataObject> list = translator.translate(cookie, sc, message);\r
272 \r
273         Assert.assertEquals("Wrong list size", 1, list.size());\r
274         GroupDescStatsUpdated statUpdate = (GroupDescStatsUpdated) list.get(0);\r
275         Assert.assertEquals("Wrong node-id", "openflow:42", statUpdate.getId().getValue());\r
276         Assert.assertEquals("Wrong more-replies", false, statUpdate.isMoreReplies());\r
277         Assert.assertEquals("Wrong transaction-id", 123, statUpdate.getTransactionId().getValue().intValue());\r
278         Assert.assertEquals("Wrong group stats size", 1, statUpdate.getGroupDescStats().size());\r
279         GroupDescStats stat = statUpdate.getGroupDescStats().get(0);\r
280         Assert.assertEquals("Wrong group-id", 1, stat.getGroupId().getValue().intValue());\r
281         Assert.assertEquals("Wrong group type", GroupTypes.GroupAll, stat.getGroupType());\r
282         Assert.assertEquals("Wrong buckets size", 2, stat.getBuckets().getBucket().size());\r
283         Bucket bucket = stat.getBuckets().getBucket().get(0);\r
284         Assert.assertEquals("Wrong weight size", 28, bucket.getWeight().intValue());\r
285         Assert.assertEquals("Wrong watch port size", 56, bucket.getWatchPort().intValue());\r
286         Assert.assertEquals("Wrong watch group size", 112, bucket.getWatchGroup().intValue());\r
287         Assert.assertEquals("Wrong actions size", 2, bucket.getAction().size());\r
288         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112"\r
289                 + ".action.action.DecMplsTtlCase", bucket.getAction().get(0).getAction().getImplementedInterface().getName());\r
290         Assert.assertEquals("Wrong action type", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112"\r
291                 + ".action.action.PopPbbActionCase", bucket.getAction().get(1).getAction().getImplementedInterface().getName());\r
292         bucket = stat.getBuckets().getBucket().get(1);\r
293         Assert.assertEquals("Wrong weight size", 280, bucket.getWeight().intValue());\r
294         Assert.assertEquals("Wrong watch port size", 560, bucket.getWatchPort().intValue());\r
295         Assert.assertEquals("Wrong watch group size", 1120, bucket.getWatchGroup().intValue());\r
296         Assert.assertEquals("Wrong actions size", 0, bucket.getAction().size());\r
297     }\r
298 }