2 * Copyright (c) 2014 Pantheon Technologies s.r.o. and others. All rights reserved.
\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
9 package org.opendaylight.openflowplugin.openflow.md.core.translator;
\r
11 import static org.mockito.Mockito.when;
\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.openflowplugin.openflow.md.util.OpenflowPortsUtil;
\r
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.table.statistics.rev131215.FlowTableStatisticsUpdate;
\r
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.table.statistics.rev131215.flow.table.and.statistics.map.FlowTableAndStatisticsMap;
\r
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartRequestFlags;
\r
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
\r
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumberValues;
\r
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetFeaturesOutput;
\r
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessage;
\r
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessageBuilder;
\r
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
\r
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyPortStatsCaseBuilder;
\r
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyQueueCaseBuilder;
\r
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyTableCaseBuilder;
\r
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.port.stats._case.MultipartReplyPortStatsBuilder;
\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.PortStats;
\r
44 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
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.queue._case.MultipartReplyQueueBuilder;
\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.QueueStats;
\r
47 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
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.table._case.MultipartReplyTableBuilder;
\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.TableStats;
\r
50 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
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.NodeConnectorStatisticsUpdate;
\r
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.node.connector.statistics.and.port.number.map.NodeConnectorStatisticsAndPortNumberMap;
\r
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.QueueStatisticsUpdate;
\r
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.queue.id.and.statistics.map.QueueIdAndStatisticsMap;
\r
55 import org.opendaylight.yangtools.yang.binding.DataObject;
\r
58 * @author michal.polkorab
\r
61 @RunWith(MockitoJUnitRunner.class)
\r
62 public class MultipartReplyTranslatorThirdTest {
\r
64 @Mock SwitchConnectionDistinguisher cookie;
\r
65 @Mock SessionContext sc;
\r
66 @Mock ConnectionConductor conductor;
\r
67 @Mock GetFeaturesOutput features;
\r
69 MultipartReplyTranslator translator;
\r
75 public void startUp() {
\r
76 final ConvertorManager convertorManager = ConvertorManagerFactory.createDefaultManager();
\r
77 translator = new MultipartReplyTranslator(convertorManager);
\r
78 when(sc.getPrimaryConductor()).thenReturn(conductor);
\r
79 when(conductor.getVersion()).thenReturn((short) EncodeConstants.OF13_VERSION_ID);
\r
80 when(sc.getFeatures()).thenReturn(features);
\r
81 when(features.getDatapathId()).thenReturn(new BigInteger("42"));
\r
82 OpenflowPortsUtil.init();
\r
86 * Test {@link MultipartReplyTranslator#translate(SwitchConnectionDistinguisher, SessionContext, OfHeader)}
\r
87 * with empty port stats
\r
90 public void testEmptyPortStats() {
\r
91 MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder();
\r
92 mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID);
\r
93 mpBuilder.setXid(123L);
\r
94 mpBuilder.setFlags(new MultipartRequestFlags(false));
\r
95 mpBuilder.setType(MultipartType.OFPMPPORTSTATS);
\r
97 MultipartReplyPortStatsCaseBuilder caseBuilder = new MultipartReplyPortStatsCaseBuilder();
\r
98 MultipartReplyPortStatsBuilder statsBuilder = new MultipartReplyPortStatsBuilder();
\r
99 List<PortStats> portStats = new ArrayList<>();
\r
100 statsBuilder.setPortStats(portStats);
\r
101 caseBuilder.setMultipartReplyPortStats(statsBuilder.build());
\r
102 mpBuilder.setMultipartReplyBody(caseBuilder.build());
\r
103 MultipartReplyMessage message = mpBuilder.build();
\r
105 List<DataObject> list = translator.translate(cookie, sc, message);
\r
107 Assert.assertEquals("Wrong list size", 1, list.size());
\r
108 NodeConnectorStatisticsUpdate statUpdate = (NodeConnectorStatisticsUpdate) list.get(0);
\r
109 Assert.assertEquals("Wrong node-id", "openflow:42", statUpdate.getId().getValue());
\r
110 Assert.assertEquals("Wrong more-replies", false, statUpdate.isMoreReplies());
\r
111 Assert.assertEquals("Wrong transaction-id", 123, statUpdate.getTransactionId().getValue().intValue());
\r
112 Assert.assertEquals("Wrong port stats size", 0, statUpdate.getNodeConnectorStatisticsAndPortNumberMap().size());
\r
116 * Test {@link MultipartReplyTranslator#translate(SwitchConnectionDistinguisher, SessionContext, OfHeader)}
\r
120 public void testPortStats() {
\r
121 MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder();
\r
122 mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID);
\r
123 mpBuilder.setXid(123L);
\r
124 mpBuilder.setFlags(new MultipartRequestFlags(false));
\r
125 mpBuilder.setType(MultipartType.OFPMPPORTSTATS);
\r
127 MultipartReplyPortStatsCaseBuilder caseBuilder = new MultipartReplyPortStatsCaseBuilder();
\r
128 MultipartReplyPortStatsBuilder statsBuilder = new MultipartReplyPortStatsBuilder();
\r
129 List<PortStats> portStats = new ArrayList<>();
\r
130 PortStatsBuilder builder = new PortStatsBuilder();
\r
131 builder.setPortNo(1L);
\r
132 builder.setRxPackets(new BigInteger("2"));
\r
133 builder.setTxPackets(new BigInteger("3"));
\r
134 builder.setRxBytes(new BigInteger("4"));
\r
135 builder.setTxBytes(new BigInteger("5"));
\r
136 builder.setRxDropped(new BigInteger("6"));
\r
137 builder.setTxDropped(new BigInteger("7"));
\r
138 builder.setRxErrors(new BigInteger("8"));
\r
139 builder.setTxErrors(new BigInteger("9"));
\r
140 builder.setRxFrameErr(new BigInteger("10"));
\r
141 builder.setRxOverErr(new BigInteger("11"));
\r
142 builder.setRxCrcErr(new BigInteger("12"));
\r
143 builder.setCollisions(new BigInteger("13"));
\r
144 builder.setDurationSec(14L);
\r
145 builder.setDurationNsec(15L);
\r
146 portStats.add(builder.build());
\r
147 builder = new PortStatsBuilder();
\r
148 builder.setPortNo(BinContent.intToUnsignedLong(PortNumberValues.CONTROLLER.getIntValue()));
\r
149 builder.setRxPackets(new BigInteger("20"));
\r
150 builder.setTxPackets(new BigInteger("30"));
\r
151 builder.setRxBytes(new BigInteger("40"));
\r
152 builder.setTxBytes(new BigInteger("50"));
\r
153 builder.setRxDropped(new BigInteger("60"));
\r
154 builder.setTxDropped(new BigInteger("70"));
\r
155 builder.setRxErrors(new BigInteger("80"));
\r
156 builder.setTxErrors(new BigInteger("90"));
\r
157 builder.setRxFrameErr(new BigInteger("100"));
\r
158 builder.setRxOverErr(new BigInteger("110"));
\r
159 builder.setRxCrcErr(new BigInteger("120"));
\r
160 builder.setCollisions(new BigInteger("130"));
\r
161 portStats.add(builder.build());
\r
162 statsBuilder.setPortStats(portStats);
\r
163 caseBuilder.setMultipartReplyPortStats(statsBuilder.build());
\r
164 mpBuilder.setMultipartReplyBody(caseBuilder.build());
\r
165 MultipartReplyMessage message = mpBuilder.build();
\r
167 List<DataObject> list = translator.translate(cookie, sc, message);
\r
169 Assert.assertEquals("Wrong list size", 1, list.size());
\r
170 NodeConnectorStatisticsUpdate statUpdate = (NodeConnectorStatisticsUpdate) list.get(0);
\r
171 Assert.assertEquals("Wrong node-id", "openflow:42", statUpdate.getId().getValue());
\r
172 Assert.assertEquals("Wrong more-replies", false, statUpdate.isMoreReplies());
\r
173 Assert.assertEquals("Wrong transaction-id", 123, statUpdate.getTransactionId().getValue().intValue());
\r
174 Assert.assertEquals("Wrong port stats size", 2, statUpdate.getNodeConnectorStatisticsAndPortNumberMap().size());
\r
175 NodeConnectorStatisticsAndPortNumberMap stat = statUpdate.getNodeConnectorStatisticsAndPortNumberMap().get(0);
\r
176 Assert.assertEquals("Wrong port number", "openflow:42:1", stat.getNodeConnectorId().getValue());
\r
177 Assert.assertEquals("Wrong rx packets", 2, stat.getPackets().getReceived().intValue());
\r
178 Assert.assertEquals("Wrong tx packets", 3, stat.getPackets().getTransmitted().intValue());
\r
179 Assert.assertEquals("Wrong rx bytes", 4, stat.getBytes().getReceived().intValue());
\r
180 Assert.assertEquals("Wrong tx bytes", 5, stat.getBytes().getTransmitted().intValue());
\r
181 Assert.assertEquals("Wrong rx dropped", 6, stat.getReceiveDrops().intValue());
\r
182 Assert.assertEquals("Wrong tx dropped", 7, stat.getTransmitDrops().intValue());
\r
183 Assert.assertEquals("Wrong rx errors", 8, stat.getReceiveErrors().intValue());
\r
184 Assert.assertEquals("Wrong tx errors", 9, stat.getTransmitErrors().intValue());
\r
185 Assert.assertEquals("Wrong rx frame error", 10, stat.getReceiveFrameError().intValue());
\r
186 Assert.assertEquals("Wrong rx over error", 11, stat.getReceiveOverRunError().intValue());
\r
187 Assert.assertEquals("Wrong rx crc error", 12, stat.getReceiveCrcError().intValue());
\r
188 Assert.assertEquals("Wrong collision count", 13, stat.getCollisionCount().intValue());
\r
189 Assert.assertEquals("Wrong duration sec", 14, stat.getDuration().getSecond().getValue().intValue());
\r
190 Assert.assertEquals("Wrong duration n sec", 15, stat.getDuration().getNanosecond().getValue().intValue());
\r
191 stat = statUpdate.getNodeConnectorStatisticsAndPortNumberMap().get(1);
\r
192 Assert.assertEquals("Wrong port number", "openflow:42:CONTROLLER", stat.getNodeConnectorId().getValue());
\r
193 Assert.assertEquals("Wrong rx packets", 20, stat.getPackets().getReceived().intValue());
\r
194 Assert.assertEquals("Wrong tx packets", 30, stat.getPackets().getTransmitted().intValue());
\r
195 Assert.assertEquals("Wrong rx bytes", 40, stat.getBytes().getReceived().intValue());
\r
196 Assert.assertEquals("Wrong tx bytes", 50, stat.getBytes().getTransmitted().intValue());
\r
197 Assert.assertEquals("Wrong rx dropped", 60, stat.getReceiveDrops().intValue());
\r
198 Assert.assertEquals("Wrong tx dropped", 70, stat.getTransmitDrops().intValue());
\r
199 Assert.assertEquals("Wrong rx errors", 80, stat.getReceiveErrors().intValue());
\r
200 Assert.assertEquals("Wrong tx errors", 90, stat.getTransmitErrors().intValue());
\r
201 Assert.assertEquals("Wrong rx frame error", 100, stat.getReceiveFrameError().intValue());
\r
202 Assert.assertEquals("Wrong rx over error", 110, stat.getReceiveOverRunError().intValue());
\r
203 Assert.assertEquals("Wrong rx crc error", 120, stat.getReceiveCrcError().intValue());
\r
204 Assert.assertEquals("Wrong collision count", 130, stat.getCollisionCount().intValue());
\r
205 Assert.assertEquals("Wrong duration sec", null, stat.getDuration().getSecond());
\r
206 Assert.assertEquals("Wrong duration n sec", null, stat.getDuration().getNanosecond());
\r
210 * Test {@link MultipartReplyTranslator#translate(SwitchConnectionDistinguisher, SessionContext, OfHeader)}
\r
211 * with empty table stats
\r
214 public void testEmptyTableStats() {
\r
215 MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder();
\r
216 mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID);
\r
217 mpBuilder.setXid(123L);
\r
218 mpBuilder.setFlags(new MultipartRequestFlags(false));
\r
219 mpBuilder.setType(MultipartType.OFPMPTABLE);
\r
221 MultipartReplyTableCaseBuilder caseBuilder = new MultipartReplyTableCaseBuilder();
\r
222 MultipartReplyTableBuilder statsBuilder = new MultipartReplyTableBuilder();
\r
223 List<TableStats> tableStats = new ArrayList<>();
\r
224 statsBuilder.setTableStats(tableStats);
\r
225 caseBuilder.setMultipartReplyTable(statsBuilder.build());
\r
226 mpBuilder.setMultipartReplyBody(caseBuilder.build());
\r
227 MultipartReplyMessage message = mpBuilder.build();
\r
229 List<DataObject> list = translator.translate(cookie, sc, message);
\r
231 Assert.assertEquals("Wrong list size", 1, list.size());
\r
232 FlowTableStatisticsUpdate statUpdate = (FlowTableStatisticsUpdate) list.get(0);
\r
233 Assert.assertEquals("Wrong node-id", "openflow:42", statUpdate.getId().getValue());
\r
234 Assert.assertEquals("Wrong more-replies", false, statUpdate.isMoreReplies());
\r
235 Assert.assertEquals("Wrong transaction-id", 123, statUpdate.getTransactionId().getValue().intValue());
\r
236 Assert.assertEquals("Wrong table stats size", 0, statUpdate.getFlowTableAndStatisticsMap().size());
\r
240 * Test {@link MultipartReplyTranslator#translate(SwitchConnectionDistinguisher, SessionContext, OfHeader)}
\r
244 public void testTableStats() {
\r
245 MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder();
\r
246 mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID);
\r
247 mpBuilder.setXid(123L);
\r
248 mpBuilder.setFlags(new MultipartRequestFlags(false));
\r
249 mpBuilder.setType(MultipartType.OFPMPTABLE);
\r
251 MultipartReplyTableCaseBuilder caseBuilder = new MultipartReplyTableCaseBuilder();
\r
252 MultipartReplyTableBuilder statsBuilder = new MultipartReplyTableBuilder();
\r
253 List<TableStats> tableStats = new ArrayList<>();
\r
254 TableStatsBuilder builder = new TableStatsBuilder();
\r
255 builder.setTableId((short) 1);
\r
256 builder.setActiveCount(2L);
\r
257 builder.setLookupCount(new BigInteger("3"));
\r
258 builder.setMatchedCount(new BigInteger("4"));
\r
259 tableStats.add(builder.build());
\r
260 builder = new TableStatsBuilder();
\r
261 builder.setTableId((short) 10);
\r
262 builder.setActiveCount(20L);
\r
263 builder.setLookupCount(new BigInteger("30"));
\r
264 builder.setMatchedCount(new BigInteger("40"));
\r
265 tableStats.add(builder.build());
\r
266 statsBuilder.setTableStats(tableStats);
\r
267 caseBuilder.setMultipartReplyTable(statsBuilder.build());
\r
268 mpBuilder.setMultipartReplyBody(caseBuilder.build());
\r
269 MultipartReplyMessage message = mpBuilder.build();
\r
271 List<DataObject> list = translator.translate(cookie, sc, message);
\r
273 Assert.assertEquals("Wrong list size", 1, list.size());
\r
274 FlowTableStatisticsUpdate statUpdate = (FlowTableStatisticsUpdate) 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 table stats size", 2, statUpdate.getFlowTableAndStatisticsMap().size());
\r
279 FlowTableAndStatisticsMap stat = statUpdate.getFlowTableAndStatisticsMap().get(0);
\r
280 Assert.assertEquals("Wrong table-id", 1, stat.getTableId().getValue().intValue());
\r
281 Assert.assertEquals("Wrong active count", 2, stat.getActiveFlows().getValue().intValue());
\r
282 Assert.assertEquals("Wrong lookup count", 3, stat.getPacketsLookedUp().getValue().intValue());
\r
283 Assert.assertEquals("Wrong matched count", 4, stat.getPacketsMatched().getValue().intValue());
\r
284 stat = statUpdate.getFlowTableAndStatisticsMap().get(1);
\r
285 Assert.assertEquals("Wrong table-id", 10, stat.getTableId().getValue().intValue());
\r
286 Assert.assertEquals("Wrong active count", 20, stat.getActiveFlows().getValue().intValue());
\r
287 Assert.assertEquals("Wrong lookup count", 30, stat.getPacketsLookedUp().getValue().intValue());
\r
288 Assert.assertEquals("Wrong matched count", 40, stat.getPacketsMatched().getValue().intValue());
\r
292 * Test {@link MultipartReplyTranslator#translate(SwitchConnectionDistinguisher, SessionContext, OfHeader)}
\r
293 * with empty queue stats
\r
296 public void testEmptyQueueStats() {
\r
297 MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder();
\r
298 mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID);
\r
299 mpBuilder.setXid(123L);
\r
300 mpBuilder.setFlags(new MultipartRequestFlags(false));
\r
301 mpBuilder.setType(MultipartType.OFPMPQUEUE);
\r
303 MultipartReplyQueueCaseBuilder caseBuilder = new MultipartReplyQueueCaseBuilder();
\r
304 MultipartReplyQueueBuilder statsBuilder = new MultipartReplyQueueBuilder();
\r
305 List<QueueStats> queueStats = new ArrayList<>();
\r
306 statsBuilder.setQueueStats(queueStats);
\r
307 caseBuilder.setMultipartReplyQueue(statsBuilder.build());
\r
308 mpBuilder.setMultipartReplyBody(caseBuilder.build());
\r
309 MultipartReplyMessage message = mpBuilder.build();
\r
311 List<DataObject> list = translator.translate(cookie, sc, message);
\r
313 Assert.assertEquals("Wrong list size", 1, list.size());
\r
314 QueueStatisticsUpdate statUpdate = (QueueStatisticsUpdate) list.get(0);
\r
315 Assert.assertEquals("Wrong node-id", "openflow:42", statUpdate.getId().getValue());
\r
316 Assert.assertEquals("Wrong more-replies", false, statUpdate.isMoreReplies());
\r
317 Assert.assertEquals("Wrong transaction-id", 123, statUpdate.getTransactionId().getValue().intValue());
\r
318 Assert.assertEquals("Wrong queue stats size", 0, statUpdate.getQueueIdAndStatisticsMap().size());
\r
322 * Test {@link MultipartReplyTranslator#translate(SwitchConnectionDistinguisher, SessionContext, OfHeader)}
\r
326 public void testQueueStats() {
\r
327 MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder();
\r
328 mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID);
\r
329 mpBuilder.setXid(123L);
\r
330 mpBuilder.setFlags(new MultipartRequestFlags(false));
\r
331 mpBuilder.setType(MultipartType.OFPMPQUEUE);
\r
333 MultipartReplyQueueCaseBuilder caseBuilder = new MultipartReplyQueueCaseBuilder();
\r
334 MultipartReplyQueueBuilder statsBuilder = new MultipartReplyQueueBuilder();
\r
335 List<QueueStats> queueStats = new ArrayList<>();
\r
336 QueueStatsBuilder builder = new QueueStatsBuilder();
\r
337 builder.setPortNo(BinContent.intToUnsignedLong(PortNumberValues.FLOOD.getIntValue()));
\r
338 builder.setQueueId(2L);
\r
339 builder.setTxPackets(new BigInteger("3"));
\r
340 builder.setTxBytes(new BigInteger("4"));
\r
341 builder.setTxErrors(new BigInteger("5"));
\r
342 builder.setDurationSec(6L);
\r
343 builder.setDurationNsec(7L);
\r
344 queueStats.add(builder.build());
\r
345 builder = new QueueStatsBuilder();
\r
346 builder.setPortNo(BinContent.intToUnsignedLong(PortNumberValues.INPORT.getIntValue()));
\r
347 builder.setQueueId(20L);
\r
348 builder.setTxPackets(new BigInteger("30"));
\r
349 builder.setTxBytes(new BigInteger("40"));
\r
350 builder.setTxErrors(new BigInteger("50"));
\r
351 builder.setDurationSec(60L);
\r
352 builder.setDurationNsec(70L);
\r
353 queueStats.add(builder.build());
\r
354 statsBuilder.setQueueStats(queueStats);
\r
355 caseBuilder.setMultipartReplyQueue(statsBuilder.build());
\r
356 mpBuilder.setMultipartReplyBody(caseBuilder.build());
\r
357 MultipartReplyMessage message = mpBuilder.build();
\r
359 List<DataObject> list = translator.translate(cookie, sc, message);
\r
361 Assert.assertEquals("Wrong list size", 1, list.size());
\r
362 QueueStatisticsUpdate statUpdate = (QueueStatisticsUpdate) list.get(0);
\r
363 Assert.assertEquals("Wrong node-id", "openflow:42", statUpdate.getId().getValue());
\r
364 Assert.assertEquals("Wrong more-replies", false, statUpdate.isMoreReplies());
\r
365 Assert.assertEquals("Wrong transaction-id", 123, statUpdate.getTransactionId().getValue().intValue());
\r
366 Assert.assertEquals("Wrong queue stats size", 2, statUpdate.getQueueIdAndStatisticsMap().size());
\r
367 QueueIdAndStatisticsMap stat = statUpdate.getQueueIdAndStatisticsMap().get(0);
\r
368 Assert.assertEquals("Wrong port number", "openflow:42:FLOOD", stat.getNodeConnectorId().getValue());
\r
369 Assert.assertEquals("Wrong queue-id", 2, stat.getQueueId().getValue().intValue());
\r
370 Assert.assertEquals("Wrong tx packets", 3, stat.getTransmittedPackets().getValue().intValue());
\r
371 Assert.assertEquals("Wrong tx bytes", 4, stat.getTransmittedBytes().getValue().intValue());
\r
372 Assert.assertEquals("Wrong tx errors", 5, stat.getTransmissionErrors().getValue().intValue());
\r
373 Assert.assertEquals("Wrong duration sec", 6, stat.getDuration().getSecond().getValue().intValue());
\r
374 Assert.assertEquals("Wrong duration n sec", 7, stat.getDuration().getNanosecond().getValue().intValue());
\r
375 stat = statUpdate.getQueueIdAndStatisticsMap().get(1);
\r
376 Assert.assertEquals("Wrong port number", "openflow:42:INPORT", stat.getNodeConnectorId().getValue());
\r
377 Assert.assertEquals("Wrong queue-id", 20, stat.getQueueId().getValue().intValue());
\r
378 Assert.assertEquals("Wrong tx packets", 30, stat.getTransmittedPackets().getValue().intValue());
\r
379 Assert.assertEquals("Wrong tx bytes", 40, stat.getTransmittedBytes().getValue().intValue());
\r
380 Assert.assertEquals("Wrong tx errors", 50, stat.getTransmissionErrors().getValue().intValue());
\r
381 Assert.assertEquals("Wrong duration sec", 60, stat.getDuration().getSecond().getValue().intValue());
\r
382 Assert.assertEquals("Wrong duration n sec", 70, stat.getDuration().getNanosecond().getValue().intValue());
\r