Merge "Bug 8873 - Bundle based reconciliation to enable bundling of messages"
[openflowplugin.git] / openflowplugin / src / test / java / org / opendaylight / openflowplugin / openflow / md / core / translator / MultipartReplyTranslatorThirdTest.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 import org.junit.Assert;\r
17 import org.junit.Before;\r
18 import org.junit.Test;\r
19 import org.junit.runner.RunWith;\r
20 import org.mockito.Mock;\r
21 import org.mockito.runners.MockitoJUnitRunner;\r
22 import org.opendaylight.openflowjava.protocol.api.util.BinContent;\r
23 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;\r
24 import org.opendaylight.openflowplugin.api.openflow.md.core.ConnectionConductor;\r
25 import org.opendaylight.openflowplugin.api.openflow.md.core.SwitchConnectionDistinguisher;\r
26 import org.opendaylight.openflowplugin.api.openflow.md.core.session.SessionContext;\r
27 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManager;\r
28 import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManagerFactory;\r
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.table.statistics.rev131215.FlowTableStatisticsUpdate;\r
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.table.statistics.rev131215.flow.table.and.statistics.map.FlowTableAndStatisticsMap;\r
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartRequestFlags;\r
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;\r
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumberValues;\r
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetFeaturesOutput;\r
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessage;\r
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessageBuilder;\r
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;\r
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyPortStatsCaseBuilder;\r
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyQueueCaseBuilder;\r
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyTableCaseBuilder;\r
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.port.stats._case.MultipartReplyPortStatsBuilder;\r
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.port.stats._case.multipart.reply.port.stats.PortStats;\r
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.port.stats._case.multipart.reply.port.stats.PortStatsBuilder;\r
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.queue._case.MultipartReplyQueueBuilder;\r
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.queue._case.multipart.reply.queue.QueueStats;\r
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.queue._case.multipart.reply.queue.QueueStatsBuilder;\r
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.table._case.MultipartReplyTableBuilder;\r
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.table._case.multipart.reply.table.TableStats;\r
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.table._case.multipart.reply.table.TableStatsBuilder;\r
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.NodeConnectorStatisticsUpdate;\r
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.node.connector.statistics.and.port.number.map.NodeConnectorStatisticsAndPortNumberMap;\r
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.QueueStatisticsUpdate;\r
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.queue.id.and.statistics.map.QueueIdAndStatisticsMap;\r
54 import org.opendaylight.yangtools.yang.binding.DataObject;\r
55 \r
56 /**\r
57  * @author michal.polkorab\r
58  *\r
59  */\r
60 @RunWith(MockitoJUnitRunner.class)\r
61 public class MultipartReplyTranslatorThirdTest {\r
62 \r
63     @Mock SwitchConnectionDistinguisher cookie;\r
64     @Mock SessionContext sc;\r
65     @Mock ConnectionConductor conductor;\r
66     @Mock GetFeaturesOutput features;\r
67 \r
68     MultipartReplyTranslator translator;\r
69 \r
70     /**\r
71      * Initializes mocks\r
72      */\r
73     @Before\r
74     public void startUp() {\r
75         final ConvertorManager convertorManager = ConvertorManagerFactory.createDefaultManager();\r
76         translator = new MultipartReplyTranslator(convertorManager);\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 port stats\r
86      */\r
87     @Test\r
88     public void testEmptyPortStats() {\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.OFPMPPORTSTATS);\r
94         \r
95         MultipartReplyPortStatsCaseBuilder caseBuilder = new MultipartReplyPortStatsCaseBuilder();\r
96         MultipartReplyPortStatsBuilder statsBuilder = new MultipartReplyPortStatsBuilder();\r
97         List<PortStats> portStats = new ArrayList<>();\r
98         statsBuilder.setPortStats(portStats);\r
99         caseBuilder.setMultipartReplyPortStats(statsBuilder.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         NodeConnectorStatisticsUpdate statUpdate = (NodeConnectorStatisticsUpdate) 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 port stats size", 0, statUpdate.getNodeConnectorStatisticsAndPortNumberMap().size());\r
111     }\r
112 \r
113     /**\r
114      * Test {@link MultipartReplyTranslator#translate(SwitchConnectionDistinguisher, SessionContext, OfHeader)}\r
115      * with port stats\r
116      */\r
117     @Test\r
118     public void testPortStats() {\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.OFPMPPORTSTATS);\r
124         \r
125         MultipartReplyPortStatsCaseBuilder caseBuilder = new MultipartReplyPortStatsCaseBuilder();\r
126         MultipartReplyPortStatsBuilder statsBuilder = new MultipartReplyPortStatsBuilder();\r
127         List<PortStats> portStats = new ArrayList<>();\r
128         PortStatsBuilder builder = new PortStatsBuilder();\r
129         builder.setPortNo(1L);\r
130         builder.setRxPackets(new BigInteger("2"));\r
131         builder.setTxPackets(new BigInteger("3"));\r
132         builder.setRxBytes(new BigInteger("4"));\r
133         builder.setTxBytes(new BigInteger("5"));\r
134         builder.setRxDropped(new BigInteger("6"));\r
135         builder.setTxDropped(new BigInteger("7"));\r
136         builder.setRxErrors(new BigInteger("8"));\r
137         builder.setTxErrors(new BigInteger("9"));\r
138         builder.setRxFrameErr(new BigInteger("10"));\r
139         builder.setRxOverErr(new BigInteger("11"));\r
140         builder.setRxCrcErr(new BigInteger("12"));\r
141         builder.setCollisions(new BigInteger("13"));\r
142         builder.setDurationSec(14L);\r
143         builder.setDurationNsec(15L);\r
144         portStats.add(builder.build());\r
145         builder = new PortStatsBuilder();\r
146         builder.setPortNo(BinContent.intToUnsignedLong(PortNumberValues.CONTROLLER.getIntValue()));\r
147         builder.setRxPackets(new BigInteger("20"));\r
148         builder.setTxPackets(new BigInteger("30"));\r
149         builder.setRxBytes(new BigInteger("40"));\r
150         builder.setTxBytes(new BigInteger("50"));\r
151         builder.setRxDropped(new BigInteger("60"));\r
152         builder.setTxDropped(new BigInteger("70"));\r
153         builder.setRxErrors(new BigInteger("80"));\r
154         builder.setTxErrors(new BigInteger("90"));\r
155         builder.setRxFrameErr(new BigInteger("100"));\r
156         builder.setRxOverErr(new BigInteger("110"));\r
157         builder.setRxCrcErr(new BigInteger("120"));\r
158         builder.setCollisions(new BigInteger("130"));\r
159         portStats.add(builder.build());\r
160         statsBuilder.setPortStats(portStats);\r
161         caseBuilder.setMultipartReplyPortStats(statsBuilder.build());\r
162         mpBuilder.setMultipartReplyBody(caseBuilder.build());\r
163         MultipartReplyMessage message = mpBuilder.build();\r
164         \r
165         List<DataObject> list = translator.translate(cookie, sc, message);\r
166 \r
167         Assert.assertEquals("Wrong list size", 1, list.size());\r
168         NodeConnectorStatisticsUpdate statUpdate = (NodeConnectorStatisticsUpdate) list.get(0);\r
169         Assert.assertEquals("Wrong node-id", "openflow:42", statUpdate.getId().getValue());\r
170         Assert.assertEquals("Wrong more-replies", false, statUpdate.isMoreReplies());\r
171         Assert.assertEquals("Wrong transaction-id", 123, statUpdate.getTransactionId().getValue().intValue());\r
172         Assert.assertEquals("Wrong port stats size", 2, statUpdate.getNodeConnectorStatisticsAndPortNumberMap().size());\r
173         NodeConnectorStatisticsAndPortNumberMap stat = statUpdate.getNodeConnectorStatisticsAndPortNumberMap().get(0);\r
174         Assert.assertEquals("Wrong port number", "openflow:42:1", stat.getNodeConnectorId().getValue());\r
175         Assert.assertEquals("Wrong rx packets", 2, stat.getPackets().getReceived().intValue());\r
176         Assert.assertEquals("Wrong tx packets", 3, stat.getPackets().getTransmitted().intValue());\r
177         Assert.assertEquals("Wrong rx bytes", 4, stat.getBytes().getReceived().intValue());\r
178         Assert.assertEquals("Wrong tx bytes", 5, stat.getBytes().getTransmitted().intValue());\r
179         Assert.assertEquals("Wrong rx dropped", 6, stat.getReceiveDrops().intValue());\r
180         Assert.assertEquals("Wrong tx dropped", 7, stat.getTransmitDrops().intValue());\r
181         Assert.assertEquals("Wrong rx errors", 8, stat.getReceiveErrors().intValue());\r
182         Assert.assertEquals("Wrong tx errors", 9, stat.getTransmitErrors().intValue());\r
183         Assert.assertEquals("Wrong rx frame error", 10, stat.getReceiveFrameError().intValue());\r
184         Assert.assertEquals("Wrong rx over error", 11, stat.getReceiveOverRunError().intValue());\r
185         Assert.assertEquals("Wrong rx crc error", 12, stat.getReceiveCrcError().intValue());\r
186         Assert.assertEquals("Wrong collision count", 13, stat.getCollisionCount().intValue());\r
187         Assert.assertEquals("Wrong duration sec", 14, stat.getDuration().getSecond().getValue().intValue());\r
188         Assert.assertEquals("Wrong duration n sec", 15, stat.getDuration().getNanosecond().getValue().intValue());\r
189         stat = statUpdate.getNodeConnectorStatisticsAndPortNumberMap().get(1);\r
190         Assert.assertEquals("Wrong port number", "openflow:42:CONTROLLER", stat.getNodeConnectorId().getValue());\r
191         Assert.assertEquals("Wrong rx packets", 20, stat.getPackets().getReceived().intValue());\r
192         Assert.assertEquals("Wrong tx packets", 30, stat.getPackets().getTransmitted().intValue());\r
193         Assert.assertEquals("Wrong rx bytes", 40, stat.getBytes().getReceived().intValue());\r
194         Assert.assertEquals("Wrong tx bytes", 50, stat.getBytes().getTransmitted().intValue());\r
195         Assert.assertEquals("Wrong rx dropped", 60, stat.getReceiveDrops().intValue());\r
196         Assert.assertEquals("Wrong tx dropped", 70, stat.getTransmitDrops().intValue());\r
197         Assert.assertEquals("Wrong rx errors", 80, stat.getReceiveErrors().intValue());\r
198         Assert.assertEquals("Wrong tx errors", 90, stat.getTransmitErrors().intValue());\r
199         Assert.assertEquals("Wrong rx frame error", 100, stat.getReceiveFrameError().intValue());\r
200         Assert.assertEquals("Wrong rx over error", 110, stat.getReceiveOverRunError().intValue());\r
201         Assert.assertEquals("Wrong rx crc error", 120, stat.getReceiveCrcError().intValue());\r
202         Assert.assertEquals("Wrong collision count", 130, stat.getCollisionCount().intValue());\r
203         Assert.assertEquals("Wrong duration sec", null, stat.getDuration().getSecond());\r
204         Assert.assertEquals("Wrong duration n sec", null, stat.getDuration().getNanosecond());\r
205     }\r
206 \r
207     /**\r
208      * Test {@link MultipartReplyTranslator#translate(SwitchConnectionDistinguisher, SessionContext, OfHeader)}\r
209      * with empty table stats\r
210      */\r
211     @Test\r
212     public void testEmptyTableStats() {\r
213         MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder();\r
214         mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID);\r
215         mpBuilder.setXid(123L);\r
216         mpBuilder.setFlags(new MultipartRequestFlags(false));\r
217         mpBuilder.setType(MultipartType.OFPMPTABLE);\r
218         \r
219         MultipartReplyTableCaseBuilder caseBuilder = new MultipartReplyTableCaseBuilder();\r
220         MultipartReplyTableBuilder statsBuilder = new MultipartReplyTableBuilder();\r
221         List<TableStats> tableStats = new ArrayList<>();\r
222         statsBuilder.setTableStats(tableStats);\r
223         caseBuilder.setMultipartReplyTable(statsBuilder.build());\r
224         mpBuilder.setMultipartReplyBody(caseBuilder.build());\r
225         MultipartReplyMessage message = mpBuilder.build();\r
226         \r
227         List<DataObject> list = translator.translate(cookie, sc, message);\r
228 \r
229         Assert.assertEquals("Wrong list size", 1, list.size());\r
230         FlowTableStatisticsUpdate statUpdate = (FlowTableStatisticsUpdate) list.get(0);\r
231         Assert.assertEquals("Wrong node-id", "openflow:42", statUpdate.getId().getValue());\r
232         Assert.assertEquals("Wrong more-replies", false, statUpdate.isMoreReplies());\r
233         Assert.assertEquals("Wrong transaction-id", 123, statUpdate.getTransactionId().getValue().intValue());\r
234         Assert.assertEquals("Wrong table stats size", 0, statUpdate.getFlowTableAndStatisticsMap().size());\r
235     }\r
236 \r
237     /**\r
238      * Test {@link MultipartReplyTranslator#translate(SwitchConnectionDistinguisher, SessionContext, OfHeader)}\r
239      * with table stats\r
240      */\r
241     @Test\r
242     public void testTableStats() {\r
243         MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder();\r
244         mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID);\r
245         mpBuilder.setXid(123L);\r
246         mpBuilder.setFlags(new MultipartRequestFlags(false));\r
247         mpBuilder.setType(MultipartType.OFPMPTABLE);\r
248         \r
249         MultipartReplyTableCaseBuilder caseBuilder = new MultipartReplyTableCaseBuilder();\r
250         MultipartReplyTableBuilder statsBuilder = new MultipartReplyTableBuilder();\r
251         List<TableStats> tableStats = new ArrayList<>();\r
252         TableStatsBuilder builder = new TableStatsBuilder();\r
253         builder.setTableId((short) 1);\r
254         builder.setActiveCount(2L);\r
255         builder.setLookupCount(new BigInteger("3"));\r
256         builder.setMatchedCount(new BigInteger("4"));\r
257         tableStats.add(builder.build());\r
258         builder = new TableStatsBuilder();\r
259         builder.setTableId((short) 10);\r
260         builder.setActiveCount(20L);\r
261         builder.setLookupCount(new BigInteger("30"));\r
262         builder.setMatchedCount(new BigInteger("40"));\r
263         tableStats.add(builder.build());\r
264         statsBuilder.setTableStats(tableStats);\r
265         caseBuilder.setMultipartReplyTable(statsBuilder.build());\r
266         mpBuilder.setMultipartReplyBody(caseBuilder.build());\r
267         MultipartReplyMessage message = mpBuilder.build();\r
268         \r
269         List<DataObject> list = translator.translate(cookie, sc, message);\r
270 \r
271         Assert.assertEquals("Wrong list size", 1, list.size());\r
272         FlowTableStatisticsUpdate statUpdate = (FlowTableStatisticsUpdate) list.get(0);\r
273         Assert.assertEquals("Wrong node-id", "openflow:42", statUpdate.getId().getValue());\r
274         Assert.assertEquals("Wrong more-replies", false, statUpdate.isMoreReplies());\r
275         Assert.assertEquals("Wrong transaction-id", 123, statUpdate.getTransactionId().getValue().intValue());\r
276         Assert.assertEquals("Wrong table stats size", 2, statUpdate.getFlowTableAndStatisticsMap().size());\r
277         FlowTableAndStatisticsMap stat = statUpdate.getFlowTableAndStatisticsMap().get(0);\r
278         Assert.assertEquals("Wrong table-id", 1, stat.getTableId().getValue().intValue());\r
279         Assert.assertEquals("Wrong active count", 2, stat.getActiveFlows().getValue().intValue());\r
280         Assert.assertEquals("Wrong lookup count", 3, stat.getPacketsLookedUp().getValue().intValue());\r
281         Assert.assertEquals("Wrong matched count", 4, stat.getPacketsMatched().getValue().intValue());\r
282         stat = statUpdate.getFlowTableAndStatisticsMap().get(1);\r
283         Assert.assertEquals("Wrong table-id", 10, stat.getTableId().getValue().intValue());\r
284         Assert.assertEquals("Wrong active count", 20, stat.getActiveFlows().getValue().intValue());\r
285         Assert.assertEquals("Wrong lookup count", 30, stat.getPacketsLookedUp().getValue().intValue());\r
286         Assert.assertEquals("Wrong matched count", 40, stat.getPacketsMatched().getValue().intValue());\r
287     }\r
288 \r
289     /**\r
290      * Test {@link MultipartReplyTranslator#translate(SwitchConnectionDistinguisher, SessionContext, OfHeader)}\r
291      * with empty queue stats\r
292      */\r
293     @Test\r
294     public void testEmptyQueueStats() {\r
295         MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder();\r
296         mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID);\r
297         mpBuilder.setXid(123L);\r
298         mpBuilder.setFlags(new MultipartRequestFlags(false));\r
299         mpBuilder.setType(MultipartType.OFPMPQUEUE);\r
300         \r
301         MultipartReplyQueueCaseBuilder caseBuilder = new MultipartReplyQueueCaseBuilder();\r
302         MultipartReplyQueueBuilder statsBuilder = new MultipartReplyQueueBuilder();\r
303         List<QueueStats> queueStats = new ArrayList<>();\r
304         statsBuilder.setQueueStats(queueStats);\r
305         caseBuilder.setMultipartReplyQueue(statsBuilder.build());\r
306         mpBuilder.setMultipartReplyBody(caseBuilder.build());\r
307         MultipartReplyMessage message = mpBuilder.build();\r
308         \r
309         List<DataObject> list = translator.translate(cookie, sc, message);\r
310 \r
311         Assert.assertEquals("Wrong list size", 1, list.size());\r
312         QueueStatisticsUpdate statUpdate = (QueueStatisticsUpdate) list.get(0);\r
313         Assert.assertEquals("Wrong node-id", "openflow:42", statUpdate.getId().getValue());\r
314         Assert.assertEquals("Wrong more-replies", false, statUpdate.isMoreReplies());\r
315         Assert.assertEquals("Wrong transaction-id", 123, statUpdate.getTransactionId().getValue().intValue());\r
316         Assert.assertEquals("Wrong queue stats size", 0, statUpdate.getQueueIdAndStatisticsMap().size());\r
317     }\r
318 \r
319     /**\r
320      * Test {@link MultipartReplyTranslator#translate(SwitchConnectionDistinguisher, SessionContext, OfHeader)}\r
321      * with queue stats\r
322      */\r
323     @Test\r
324     public void testQueueStats() {\r
325         MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder();\r
326         mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID);\r
327         mpBuilder.setXid(123L);\r
328         mpBuilder.setFlags(new MultipartRequestFlags(false));\r
329         mpBuilder.setType(MultipartType.OFPMPQUEUE);\r
330         \r
331         MultipartReplyQueueCaseBuilder caseBuilder = new MultipartReplyQueueCaseBuilder();\r
332         MultipartReplyQueueBuilder statsBuilder = new MultipartReplyQueueBuilder();\r
333         List<QueueStats> queueStats = new ArrayList<>();\r
334         QueueStatsBuilder builder = new QueueStatsBuilder();\r
335         builder.setPortNo(BinContent.intToUnsignedLong(PortNumberValues.FLOOD.getIntValue()));\r
336         builder.setQueueId(2L);\r
337         builder.setTxPackets(new BigInteger("3"));\r
338         builder.setTxBytes(new BigInteger("4"));\r
339         builder.setTxErrors(new BigInteger("5"));\r
340         builder.setDurationSec(6L);\r
341         builder.setDurationNsec(7L);\r
342         queueStats.add(builder.build());\r
343         builder = new QueueStatsBuilder();\r
344         builder.setPortNo(BinContent.intToUnsignedLong(PortNumberValues.INPORT.getIntValue()));\r
345         builder.setQueueId(20L);\r
346         builder.setTxPackets(new BigInteger("30"));\r
347         builder.setTxBytes(new BigInteger("40"));\r
348         builder.setTxErrors(new BigInteger("50"));\r
349         builder.setDurationSec(60L);\r
350         builder.setDurationNsec(70L);\r
351         queueStats.add(builder.build());\r
352         statsBuilder.setQueueStats(queueStats);\r
353         caseBuilder.setMultipartReplyQueue(statsBuilder.build());\r
354         mpBuilder.setMultipartReplyBody(caseBuilder.build());\r
355         MultipartReplyMessage message = mpBuilder.build();\r
356         \r
357         List<DataObject> list = translator.translate(cookie, sc, message);\r
358 \r
359         Assert.assertEquals("Wrong list size", 1, list.size());\r
360         QueueStatisticsUpdate statUpdate = (QueueStatisticsUpdate) list.get(0);\r
361         Assert.assertEquals("Wrong node-id", "openflow:42", statUpdate.getId().getValue());\r
362         Assert.assertEquals("Wrong more-replies", false, statUpdate.isMoreReplies());\r
363         Assert.assertEquals("Wrong transaction-id", 123, statUpdate.getTransactionId().getValue().intValue());\r
364         Assert.assertEquals("Wrong queue stats size", 2, statUpdate.getQueueIdAndStatisticsMap().size());\r
365         QueueIdAndStatisticsMap stat = statUpdate.getQueueIdAndStatisticsMap().get(0);\r
366         Assert.assertEquals("Wrong port number", "openflow:42:FLOOD", stat.getNodeConnectorId().getValue());\r
367         Assert.assertEquals("Wrong queue-id", 2, stat.getQueueId().getValue().intValue());\r
368         Assert.assertEquals("Wrong tx packets", 3, stat.getTransmittedPackets().getValue().intValue());\r
369         Assert.assertEquals("Wrong tx bytes", 4, stat.getTransmittedBytes().getValue().intValue());\r
370         Assert.assertEquals("Wrong tx errors", 5, stat.getTransmissionErrors().getValue().intValue());\r
371         Assert.assertEquals("Wrong duration sec", 6, stat.getDuration().getSecond().getValue().intValue());\r
372         Assert.assertEquals("Wrong duration n sec", 7, stat.getDuration().getNanosecond().getValue().intValue());\r
373         stat = statUpdate.getQueueIdAndStatisticsMap().get(1);\r
374         Assert.assertEquals("Wrong port number", "openflow:42:IN_PORT", stat.getNodeConnectorId().getValue());\r
375         Assert.assertEquals("Wrong queue-id", 20, stat.getQueueId().getValue().intValue());\r
376         Assert.assertEquals("Wrong tx packets", 30, stat.getTransmittedPackets().getValue().intValue());\r
377         Assert.assertEquals("Wrong tx bytes", 40, stat.getTransmittedBytes().getValue().intValue());\r
378         Assert.assertEquals("Wrong tx errors", 50, stat.getTransmissionErrors().getValue().intValue());\r
379         Assert.assertEquals("Wrong duration sec", 60, stat.getDuration().getSecond().getValue().intValue());\r
380         Assert.assertEquals("Wrong duration n sec", 70, stat.getDuration().getNanosecond().getValue().intValue());\r
381     }\r
382 }