multipart request message updated
[openflowjava.git] / openflow-protocol-impl / src / test / java / org / opendaylight / openflowjava / protocol / impl / deserialization / factories / MultipartReplyMessageFactoryTest.java
1 /* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */\r
2 package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;\r
3 \r
4 import io.netty.buffer.ByteBuf;\r
5 \r
6 import java.math.BigInteger;\r
7 \r
8 import org.junit.Assert;\r
9 import org.junit.Test;\r
10 import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper;\r
11 import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;\r
12 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;\r
13 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowModFlags;\r
14 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterFlags;\r
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortConfig;\r
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortFeatures;\r
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortState;\r
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessage;\r
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDrop;\r
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDscpRemark;\r
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandExperimenter;\r
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyAggregate;\r
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyDesc;\r
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyExperimenter;\r
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyFlow;\r
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyGroup;\r
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyMeter;\r
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyMeterConfig;\r
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyMeterFeatures;\r
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyPortDesc;\r
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyPortStats;\r
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyQueue;\r
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyTable;\r
34 \r
35 /**\r
36  * @author timotej.kubas\r
37  * @author michal.polkorab\r
38  */\r
39 public class MultipartReplyMessageFactoryTest {\r
40 \r
41     /**\r
42      * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO\r
43      */\r
44     @Test\r
45     public void test(){\r
46         ByteBuf bb = BufferHelper.buildBuffer("00 07 00 01 00 00 00 00 01 02 03 04");\r
47         MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);\r
48         \r
49         BufferHelper.checkHeaderV13(builtByFactory);\r
50         \r
51         Assert.assertEquals("Wrong type", 0x07, builtByFactory.getType().getIntValue());\r
52         Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());\r
53         //Assert.assertArrayEquals("Wrong body", new byte[]{0x01, 0x02, 0x03, 0x04}, builtByFactory.getBody());\r
54     }\r
55     \r
56     /**\r
57      * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO\r
58      */\r
59     @Test\r
60     public void testMultipartReplyDescBody(){\r
61         final int DESC_STR_LEN = 256;\r
62         final int SERIAL_NUM_LEN = 32;\r
63         ByteBuf bb = BufferHelper.buildBuffer("00 00 00 01 00 00 00 00");\r
64         \r
65         String mfrDesc = "Manufacturer description";\r
66         byte[] mfrDescBytes = new byte[256];\r
67         mfrDescBytes = mfrDesc.getBytes();\r
68         bb.writeBytes(mfrDescBytes);\r
69         ByteBufUtils.padBuffer((DESC_STR_LEN - mfrDescBytes.length), bb);\r
70         \r
71         String hwDesc = "Hardware description";\r
72         byte[] hwDescBytes = new byte[256];\r
73         hwDescBytes = hwDesc.getBytes();\r
74         bb.writeBytes(hwDescBytes);\r
75         ByteBufUtils.padBuffer((DESC_STR_LEN - hwDescBytes.length), bb);\r
76         \r
77         String swDesc = "Software description";\r
78         byte[] swDescBytes = new byte[256];\r
79         swDescBytes = swDesc.getBytes();\r
80         bb.writeBytes(swDescBytes);\r
81         ByteBufUtils.padBuffer((DESC_STR_LEN - swDescBytes.length), bb);\r
82         \r
83         String serialNum = "SN0123456789";\r
84         byte[] serialNumBytes = new byte[32];\r
85         serialNumBytes = serialNum.getBytes();\r
86         bb.writeBytes(serialNumBytes);\r
87         ByteBufUtils.padBuffer((SERIAL_NUM_LEN - serialNumBytes.length), bb);\r
88         \r
89         String dpDesc = "switch3 in room 3120";\r
90         byte[] dpDescBytes = new byte[256];\r
91         dpDescBytes = dpDesc.getBytes();\r
92         bb.writeBytes(dpDescBytes);\r
93         ByteBufUtils.padBuffer((DESC_STR_LEN - dpDescBytes.length), bb);\r
94         \r
95         MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);\r
96         \r
97         BufferHelper.checkHeaderV13(builtByFactory);\r
98         Assert.assertEquals("Wrong type", 0x00, builtByFactory.getType().getIntValue());\r
99         Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());\r
100         MultipartReplyDesc message = (MultipartReplyDesc) builtByFactory.getMultipartReplyBody();\r
101         Assert.assertEquals("Wrong mfrDesc", "Manufacturer description", message.getMfrDesc());\r
102         Assert.assertEquals("Wrong hwDesc", "Hardware description", message.getHwDesc());\r
103         Assert.assertEquals("Wrong swDesc", "Software description", message.getSwDesc());\r
104         Assert.assertEquals("Wrong serialNum", "SN0123456789", message.getSerialNum());\r
105         Assert.assertEquals("Wrong dpDesc", "switch3 in room 3120", message.getDpDesc());\r
106     }\r
107     \r
108     /**\r
109      * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO\r
110      */\r
111     @Test\r
112     public void testMultipartReplyFlowBody(){\r
113         ByteBuf bb = BufferHelper.buildBuffer("00 01 00 01 00 00 00 00 "+\r
114                                               "00 0C "+//length\r
115                                               "08 "+//tableId\r
116                                               "00 "+//pad_01\r
117                                               "00 00 00 09 "+//durationSec\r
118                                               "00 00 00 07 "+//durationNsec\r
119                                               "00 0C "+//priority\r
120                                               "00 0E "+//idleTimeout\r
121                                               "00 0F "+//hardTimeout\r
122                                               "00 0B "+//flags\r
123                                               "00 00 00 00 "+//pad_02\r
124                                               "00 01 01 01 01 01 01 01 "+//cookie\r
125                                               "00 01 01 01 01 01 01 01 "+//packetCount\r
126                                               "00 01 01 01 01 01 01 01"//byteCount\r
127                                               );\r
128         \r
129         MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);\r
130         \r
131         BufferHelper.checkHeaderV13(builtByFactory);\r
132         Assert.assertEquals("Wrong type", 0x01, builtByFactory.getType().getIntValue());\r
133         Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());\r
134         MultipartReplyFlow message = (MultipartReplyFlow) builtByFactory.getMultipartReplyBody();\r
135         Assert.assertEquals("Wrong tableId", 8, message.getFlowStats().get(0).getTableId().intValue());\r
136         Assert.assertEquals("Wrong durationSec", 9, message.getFlowStats().get(0).getDurationSec().intValue());\r
137         Assert.assertEquals("Wrong durationNsec", 7, message.getFlowStats().get(0).getDurationNsec().intValue());\r
138         Assert.assertEquals("Wrong priority", 12, message.getFlowStats().get(0).getPriority().intValue());\r
139         Assert.assertEquals("Wrong idleTimeOut", 14, message.getFlowStats().get(0).getIdleTimeout().intValue());\r
140         Assert.assertEquals("Wrong hardTimeOut", 15, message.getFlowStats().get(0).getHardTimeout().intValue());\r
141         Assert.assertEquals("Wrong flags", new FlowModFlags(true, false, true, false, true), \r
142                                            message.getFlowStats().get(0).getFlags());\r
143         Assert.assertEquals("Wrong cookie", \r
144                 new BigInteger(new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}), \r
145                 message.getFlowStats().get(0).getCookie());\r
146         Assert.assertEquals("Wrong packetCount", \r
147                 new BigInteger(new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}), \r
148                 message.getFlowStats().get(0).getPacketCount());\r
149         Assert.assertEquals("Wrong byteCount", \r
150                 new BigInteger(new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}), \r
151                 message.getFlowStats().get(0).getByteCount());\r
152     }\r
153     \r
154     /**\r
155      * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO\r
156      */\r
157     @Test\r
158     public void testMultipartReplyAggregateBody(){\r
159         ByteBuf bb = BufferHelper.buildBuffer("00 02 00 01 00 00 00 00 "+\r
160                                               "00 01 01 01 01 01 01 01 "+//packetCount\r
161                                               "00 01 01 01 01 01 01 01 "+//byteCount\r
162                                               "00 00 00 08 "+//flowCount\r
163                                               "00 00 00 00"//pad\r
164                                               );\r
165         \r
166         MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);\r
167         \r
168         BufferHelper.checkHeaderV13(builtByFactory);\r
169         Assert.assertEquals("Wrong type", 0x02, builtByFactory.getType().getIntValue());\r
170         Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());\r
171         MultipartReplyAggregate message = (MultipartReplyAggregate) builtByFactory.getMultipartReplyBody();\r
172         Assert.assertEquals("Wrong packetCount", \r
173                 new BigInteger(new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}), \r
174                 message.getPacketCount());\r
175         Assert.assertEquals("Wrong byteCount", \r
176                 new BigInteger(new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}), \r
177                 message.getByteCount());\r
178         Assert.assertEquals("Wrong flowCount", \r
179                 8, \r
180                 message.getFlowCount().intValue());\r
181     }\r
182     \r
183     /**\r
184      * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO\r
185      */\r
186     @Test\r
187     public void testMultipartReplyTableBody(){\r
188         ByteBuf bb = BufferHelper.buildBuffer("00 03 00 01 00 00 00 00 "+\r
189                                               "08 "+//tableId\r
190                                               "00 00 00 "+//pad\r
191                                               "00 00 00 10 "+//activeCount\r
192                                               "00 01 01 01 01 01 01 01 "+//lookupCount\r
193                                               "00 01 01 01 01 01 01 01"//matchedCount\r
194                                               );\r
195         \r
196         MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);\r
197         \r
198         BufferHelper.checkHeaderV13(builtByFactory);\r
199         Assert.assertEquals("Wrong type", 0x03, builtByFactory.getType().getIntValue());\r
200         Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());\r
201         \r
202         MultipartReplyTable message = (MultipartReplyTable) builtByFactory.getMultipartReplyBody();\r
203         Assert.assertEquals("Wrong tableId", 8, message.getTableStats().get(0).getTableId().intValue());\r
204         Assert.assertEquals("Wrong activeCount", 16, message.getTableStats().get(0).getActiveCount().longValue());\r
205         Assert.assertEquals("Wrong lookupCount", \r
206                 new BigInteger(new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}), \r
207                 message.getTableStats().get(0).getLookupCount());\r
208         Assert.assertEquals("Wrong matchedCount", \r
209                 new BigInteger(new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}), \r
210                 message.getTableStats().get(0).getMatchedCount());\r
211     }\r
212     \r
213     /**\r
214      * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO\r
215      */\r
216     @Test\r
217     public void testMultipartReplyPortStatsBody(){\r
218         ByteBuf bb = BufferHelper.buildBuffer("00 04 00 01 00 00 00 00 "+\r
219                                               "00 00 00 FF "+//portNo\r
220                                               "00 00 00 00 "+//pad\r
221                                               "00 01 01 01 01 01 01 01 "+//rxPackets\r
222                                               "00 02 02 02 02 02 02 02 "+//txPackets\r
223                                               "00 02 03 02 03 02 03 02 "+//rxBytes\r
224                                               "00 02 03 02 03 02 03 02 "+//txBytes\r
225                                               "00 02 03 02 03 02 03 02 "+//rxDropped\r
226                                               "00 02 03 02 03 02 03 02 "+//txDropped\r
227                                               "00 02 03 02 03 02 03 02 "+//rxErrors\r
228                                               "00 02 03 02 03 02 03 02 "+//txErrors\r
229                                               "00 02 03 02 03 02 03 02 "+//rxFrameErr\r
230                                               "00 02 03 02 03 02 03 02 "+//rxOverErr\r
231                                               "00 02 03 02 03 02 03 02 "+//rxCrcErr\r
232                                               "00 02 03 02 03 02 03 02 "+//collisions\r
233                                               "00 00 00 02 "+//durationSec\r
234                                               "00 00 00 04"//durationNsec\r
235                                               );\r
236         \r
237         MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);\r
238         \r
239         BufferHelper.checkHeaderV13(builtByFactory);\r
240         Assert.assertEquals("Wrong type", 0x04, builtByFactory.getType().getIntValue());\r
241         Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());\r
242         \r
243         MultipartReplyPortStats message = (MultipartReplyPortStats) builtByFactory.getMultipartReplyBody();\r
244         \r
245         Assert.assertEquals("Wrong portNo", 255, message.getPortStats().get(0).getPortNo().intValue());\r
246         Assert.assertEquals("Wrong rxPackets", \r
247                 new BigInteger(new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}), \r
248                 message.getPortStats().get(0).getRxPackets());\r
249         Assert.assertEquals("Wrong txPackets", \r
250                 new BigInteger(new byte[]{0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02}), \r
251                 message.getPortStats().get(0).getTxPackets());\r
252         Assert.assertEquals("Wrong rxBytes", \r
253                 new BigInteger(new byte[]{0x00, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02}), \r
254                 message.getPortStats().get(0).getRxBytes());\r
255         Assert.assertEquals("Wrong txBytes", \r
256                 new BigInteger(new byte[]{0x00, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02}), \r
257                 message.getPortStats().get(0).getTxBytes());\r
258         Assert.assertEquals("Wrong rxDropped", \r
259                 new BigInteger(new byte[]{0x00, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02}), \r
260                 message.getPortStats().get(0).getRxDropped());\r
261         Assert.assertEquals("Wrong txDropped", \r
262                 new BigInteger(new byte[]{0x00, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02}), \r
263                 message.getPortStats().get(0).getTxDropped());\r
264         Assert.assertEquals("Wrong rxErrors", \r
265                 new BigInteger(new byte[]{0x00, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02}), \r
266                 message.getPortStats().get(0).getRxErrors());\r
267         Assert.assertEquals("Wrong txErrors", \r
268                 new BigInteger(new byte[]{0x00, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02}), \r
269                 message.getPortStats().get(0).getTxErrors());\r
270         Assert.assertEquals("Wrong rxFrameErr", \r
271                 new BigInteger(new byte[]{0x00, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02}), \r
272                 message.getPortStats().get(0).getRxFrameErr());\r
273         Assert.assertEquals("Wrong rxOverErr", \r
274                 new BigInteger(new byte[]{0x00, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02}), \r
275                 message.getPortStats().get(0).getRxOverErr());\r
276         Assert.assertEquals("Wrong rxCrcErr", \r
277                 new BigInteger(new byte[]{0x00, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02}), \r
278                 message.getPortStats().get(0).getRxCrcErr());\r
279         Assert.assertEquals("Wrong collisions", \r
280                 new BigInteger(new byte[]{0x00, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02}), \r
281                 message.getPortStats().get(0).getCollisions());\r
282         Assert.assertEquals("Wrong durationSec", 2, message.getPortStats().get(0).getDurationSec().intValue());\r
283         Assert.assertEquals("Wrong durationNsec", 4, message.getPortStats().get(0).getDurationNsec().intValue());\r
284     }\r
285     \r
286     /**\r
287      * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO\r
288      */\r
289     @Test\r
290     public void testMultipartReplyQueueBody(){\r
291         ByteBuf bb = BufferHelper.buildBuffer("00 05 00 01 00 00 00 00 "+\r
292                                               "00 00 00 FF "+//portNo\r
293                                               "00 00 00 10 "+//queueId\r
294                                               "00 02 03 02 03 02 03 02 "+//txBytes\r
295                                               "00 02 02 02 02 02 02 02 "+//txPackets\r
296                                               "00 02 03 02 03 02 03 02 "+//txErrors\r
297                                               "00 00 00 02 "+//durationSec\r
298                                               "00 00 00 04"//durationNsec\r
299                                               );\r
300         \r
301         MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);\r
302         \r
303         BufferHelper.checkHeaderV13(builtByFactory);\r
304         Assert.assertEquals("Wrong type", 0x05, builtByFactory.getType().getIntValue());\r
305         Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());\r
306         \r
307         MultipartReplyQueue message = (MultipartReplyQueue) builtByFactory.getMultipartReplyBody();\r
308         \r
309         Assert.assertEquals("Wrong portNo", 255, message.getQueueStats().get(0).getPortNo().intValue());\r
310         Assert.assertEquals("Wrong queueId", 16, message.getQueueStats().get(0).getQueueId().intValue());\r
311         Assert.assertEquals("Wrong txBytes", \r
312                 new BigInteger(new byte[]{0x00, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02}), \r
313                 message.getQueueStats().get(0).getTxBytes());\r
314         Assert.assertEquals("Wrong txPackets", \r
315                 new BigInteger(new byte[]{0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02}), \r
316                 message.getQueueStats().get(0).getTxPackets());\r
317         Assert.assertEquals("Wrong txErrors", \r
318                 new BigInteger(new byte[]{0x00, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02}), \r
319                 message.getQueueStats().get(0).getTxErrors());\r
320         Assert.assertEquals("Wrong durationSec", 2, message.getQueueStats().get(0).getDurationSec().intValue());\r
321         Assert.assertEquals("Wrong durationNsec", 4, message.getQueueStats().get(0).getDurationNsec().intValue());\r
322     }\r
323     \r
324     /**\r
325      * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO\r
326      */\r
327     @Test\r
328     public void testMultipartReplyGroupBody(){\r
329         ByteBuf bb = BufferHelper.buildBuffer("00 06 00 01 00 00 00 00 "+\r
330                                               "00 48 "+//length\r
331                                               "00 00 "+//pad1\r
332                                               "00 00 00 10 "+//groupId\r
333                                               "00 00 00 12 "+//refCount\r
334                                               "00 00 00 00 "+//pad2\r
335                                               "00 01 01 01 01 01 01 01 "+//packetCount\r
336                                               "00 01 01 01 01 01 01 01 "+//byteCount\r
337                                               "00 00 00 08 "+//durationSec\r
338                                               "00 00 00 09 "+//durationNsec\r
339                                               "00 01 01 01 01 01 01 01 "+//packetCountBucket\r
340                                               "00 01 01 01 01 01 01 01 "+//byteCountBucket\r
341                                               "00 02 02 02 02 02 02 02 "+//packetCountBucket_2\r
342                                               "00 02 02 02 02 02 02 02 "+//byteCountBucket_2\r
343                                               "00 48 "+//length_2\r
344                                               "00 00 "+//pad1.2\r
345                                               "00 00 00 10 "+//groupId_2\r
346                                               "00 00 00 12 "+//refCount_2\r
347                                               "00 00 00 00 "+//pad2.2\r
348                                               "00 01 01 01 01 01 01 01 "+//packetCount_2\r
349                                               "00 01 01 01 01 01 01 01 "+//byteCount_2\r
350                                               "00 00 00 08 "+//durationSec_2\r
351                                               "00 00 00 09 "+//durationNsec_2\r
352                                               "00 01 01 01 01 01 01 01 "+//packetCountBucket_1.2\r
353                                               "00 01 01 01 01 01 01 01 "+//byteCountBucket_1.2\r
354                                               "00 02 02 02 02 02 02 02 "+//packetCountBucket_2.2\r
355                                               "00 02 02 02 02 02 02 02"//byteCountBucket_2.2\r
356                                               );\r
357         \r
358         MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);\r
359         \r
360         BufferHelper.checkHeaderV13(builtByFactory);\r
361         Assert.assertEquals("Wrong type", 0x06, builtByFactory.getType().getIntValue());\r
362         Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());\r
363         \r
364         MultipartReplyGroup message = (MultipartReplyGroup) builtByFactory.getMultipartReplyBody();\r
365         \r
366         Assert.assertEquals("Wrong groupId", 16, message.getGroupStats().get(0).getGroupId().intValue());\r
367         Assert.assertEquals("Wrong refCount", 18, message.getGroupStats().get(0).getRefCount().intValue());\r
368         Assert.assertEquals("Wrong packetCount", \r
369                 new BigInteger(new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}), \r
370                 message.getGroupStats().get(0).getPacketCount());\r
371         Assert.assertEquals("Wrong byteCount", \r
372                 new BigInteger(new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}), \r
373                 message.getGroupStats().get(0).getByteCount());\r
374         Assert.assertEquals("Wrong durationSec", 8, message.getGroupStats().get(0).getDurationSec().intValue());\r
375         Assert.assertEquals("Wrong durationNsec", 9, message.getGroupStats().get(0).getDurationNsec().intValue());\r
376         Assert.assertEquals("Wrong packetCountBucket", \r
377                 new BigInteger(new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}), \r
378                 message.getGroupStats().get(0).getBucketStats().get(0).getPacketCount());\r
379         Assert.assertEquals("Wrong byteCountBucket", \r
380                 new BigInteger(new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}), \r
381                 message.getGroupStats().get(0).getBucketStats().get(0).getByteCount());\r
382         Assert.assertEquals("Wrong packetCountBucket_2", \r
383                 new BigInteger(new byte[]{0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02}), \r
384                 message.getGroupStats().get(0).getBucketStats().get(1).getPacketCount());\r
385         Assert.assertEquals("Wrong byteCountBucket_2", \r
386                 new BigInteger(new byte[]{0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02}), \r
387                 message.getGroupStats().get(0).getBucketStats().get(1).getByteCount());\r
388         \r
389         Assert.assertEquals("Wrong groupId_2", 16, message.getGroupStats().get(1).getGroupId().intValue());\r
390         Assert.assertEquals("Wrong refCount_2", 18, message.getGroupStats().get(1).getRefCount().intValue());\r
391         Assert.assertEquals("Wrong packetCount_2", \r
392                 new BigInteger(new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}), \r
393                 message.getGroupStats().get(1).getPacketCount());\r
394         Assert.assertEquals("Wrong byteCount_2", \r
395                 new BigInteger(new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}), \r
396                 message.getGroupStats().get(1).getByteCount());\r
397         Assert.assertEquals("Wrong durationSec_2", 8, message.getGroupStats().get(1).getDurationSec().intValue());\r
398         Assert.assertEquals("Wrong durationNsec_2", 9, message.getGroupStats().get(1).getDurationNsec().intValue());\r
399         Assert.assertEquals("Wrong packetCountBucket_1.2", \r
400                 new BigInteger(new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}), \r
401                 message.getGroupStats().get(1).getBucketStats().get(0).getPacketCount());\r
402         Assert.assertEquals("Wrong byteCountBucket_1.2", \r
403                 new BigInteger(new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}), \r
404                 message.getGroupStats().get(1).getBucketStats().get(0).getByteCount());\r
405         Assert.assertEquals("Wrong packetCountBucket_2.2", \r
406                 new BigInteger(new byte[]{0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02}), \r
407                 message.getGroupStats().get(1).getBucketStats().get(1).getPacketCount());\r
408         Assert.assertEquals("Wrong byteCountBucket_2.2", \r
409                 new BigInteger(new byte[]{0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02}), \r
410                 message.getGroupStats().get(1).getBucketStats().get(1).getByteCount());\r
411     }\r
412     \r
413     /**\r
414      * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO\r
415      */\r
416     @Test\r
417     public void testMultipartReplyMeterFeaturesBody(){\r
418         ByteBuf bb = BufferHelper.buildBuffer("00 0B 00 01 00 00 00 00 "+\r
419                                               "00 00 00 09 "+//maxMeter\r
420                                               "00 00 00 01 "+//bandTypes\r
421                                               "00 00 00 03 "+//capabilities\r
422                                               "03 "+//maxBands\r
423                                               "04 "+//maxColor\r
424                                               "00 00"//pad\r
425                                               );\r
426         \r
427         MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);\r
428         \r
429         BufferHelper.checkHeaderV13(builtByFactory);\r
430         Assert.assertEquals("Wrong type", 11, builtByFactory.getType().getIntValue());\r
431         Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());\r
432         \r
433         MultipartReplyMeterFeatures message = (MultipartReplyMeterFeatures) builtByFactory.getMultipartReplyBody();\r
434         \r
435         Assert.assertEquals("Wrong maxMeter", 9, message.getMaxMeter().intValue());\r
436         Assert.assertEquals("Wrong bandTypes", 1, message.getBandTypes().getIntValue());\r
437         Assert.assertEquals("Wrong capabilities", new MeterFlags(false, true, true, false), \r
438                                                       message.getCapabilities());\r
439         Assert.assertEquals("Wrong maxBands", 3, message.getMaxBands().intValue());\r
440         Assert.assertEquals("Wrong maxColor", 4, message.getMaxColor().intValue());\r
441     }\r
442     \r
443     /**\r
444      * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO\r
445      */\r
446     @Test\r
447     public void testMultipartReplyMeterBody(){\r
448         ByteBuf bb = BufferHelper.buildBuffer("00 09 00 01 00 00 00 00 "+\r
449                                               "00 00 00 09 "+//meterId\r
450                                               "00 58 "+//len\r
451                                               "00 00 00 00 00 00 "+//pad\r
452                                               "00 00 00 07 "+//flowCount\r
453                                               "00 01 01 01 01 01 01 01 "+//packetInCount\r
454                                               "00 01 01 01 01 01 01 01 "+//byteInCount\r
455                                               "00 00 00 05 "+//durationSec\r
456                                               "00 00 00 05 "+//durationNsec\r
457                                               "00 01 01 01 01 01 01 01 "+//packetBandCount_01\r
458                                               "00 01 01 01 01 01 01 01 "+//byteBandCount_01\r
459                                               "00 02 02 02 02 02 02 02 "+//packetBandCount_02\r
460                                               "00 02 02 02 02 02 02 02 "+//byteBandCount_02\r
461                                               "00 03 03 03 03 03 03 03 "+//packetBandCount_03\r
462                                               "00 03 03 03 03 03 03 03"//byteBandCount_03\r
463                                               );\r
464         \r
465         MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);\r
466         \r
467         BufferHelper.checkHeaderV13(builtByFactory);\r
468         Assert.assertEquals("Wrong type", 9, builtByFactory.getType().getIntValue());\r
469         Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());\r
470         \r
471         MultipartReplyMeter message = (MultipartReplyMeter) builtByFactory.getMultipartReplyBody();\r
472         \r
473         Assert.assertEquals("Wrong meterId", 9, \r
474                              message.getMeterStats().get(0).getMeterId().intValue());\r
475         Assert.assertEquals("Wrong flowCount", 7, \r
476                             message.getMeterStats().get(0).getFlowCount().intValue());\r
477         Assert.assertEquals("Wrong packetInCount", \r
478                 new BigInteger(new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}), \r
479                 message.getMeterStats().get(0).getPacketInCount());\r
480         Assert.assertEquals("Wrong byteInCount", \r
481                 new BigInteger(new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}), \r
482                 message.getMeterStats().get(0).getByteInCount());\r
483         Assert.assertEquals("Wrong durationSec", 5, \r
484                 message.getMeterStats().get(0).getDurationSec().intValue());\r
485         Assert.assertEquals("Wrong durationNsec", 5, \r
486                 message.getMeterStats().get(0).getDurationNsec().intValue());\r
487         Assert.assertEquals("Wrong packetBandCount_01", \r
488                 new BigInteger(new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}), \r
489                 message.getMeterStats().get(0).getMeterBandStats().get(0).getPacketBandCount());\r
490         Assert.assertEquals("Wrong byteBandCount_01", \r
491                 new BigInteger(new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}), \r
492                 message.getMeterStats().get(0).getMeterBandStats().get(0).getByteBandCount());\r
493         Assert.assertEquals("Wrong packetBandCount_02", \r
494                 new BigInteger(new byte[]{0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02}), \r
495                 message.getMeterStats().get(0).getMeterBandStats().get(1).getPacketBandCount());\r
496         Assert.assertEquals("Wrong byteBandCount_02", \r
497                 new BigInteger(new byte[]{0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02}), \r
498                 message.getMeterStats().get(0).getMeterBandStats().get(1).getByteBandCount());\r
499         Assert.assertEquals("Wrong packetBandCount_03", \r
500                 new BigInteger(new byte[]{0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03}), \r
501                 message.getMeterStats().get(0).getMeterBandStats().get(2).getPacketBandCount());\r
502         Assert.assertEquals("Wrong byteBandCount_03", \r
503                 new BigInteger(new byte[]{0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03}), \r
504                 message.getMeterStats().get(0).getMeterBandStats().get(2).getByteBandCount());\r
505     }\r
506     \r
507     @Test\r
508     public void testMultipartReplyMeterBodyMulti(){\r
509         ByteBuf bb = BufferHelper.buildBuffer("00 09 00 01 00 00 00 00 "+\r
510                                               "00 00 00 09 "+//meterId_0\r
511                                               "00 58 "+//len_0\r
512                                               "00 00 00 00 00 00 "+//pad_0\r
513                                               "00 00 00 07 "+//flowCount_0\r
514                                               "00 01 01 01 01 01 01 01 "+//packetInCount_0\r
515                                               "00 01 01 01 01 01 01 01 "+//byteInCount_0\r
516                                               "00 00 00 05 "+//durationSec_0\r
517                                               "00 00 00 05 "+//durationNsec_0\r
518                                               "00 01 01 01 01 01 01 01 "+//packetBandCount_01\r
519                                               "00 01 01 01 01 01 01 01 "+//byteBandCount_01\r
520                                               "00 02 02 02 02 02 02 02 "+//packetBandCount_02\r
521                                               "00 02 02 02 02 02 02 02 "+//byteBandCount_02\r
522                                               "00 03 03 03 03 03 03 03 "+//packetBandCount_03\r
523                                               "00 03 03 03 03 03 03 03 "+//byteBandCount_03\r
524                                               "00 00 00 08 "+//meterId_1\r
525                                               "00 58 "+//len_1\r
526                                               "00 00 00 00 00 00 "+//pad_1\r
527                                               "00 00 00 07 "+//flowCount_1\r
528                                               "00 01 01 01 01 01 01 01 "+//packetInCount_1\r
529                                               "00 01 01 01 01 01 01 01 "+//byteInCount_1\r
530                                               "00 00 00 05 "+//durationSec_1\r
531                                               "00 00 00 05 "+//durationNsec_1\r
532                                               "00 01 01 01 01 01 01 01 "+//packetBandCount_11\r
533                                               "00 01 01 01 01 01 01 01 "+//byteBandCount_11\r
534                                               "00 02 02 02 02 02 02 02 "+//packetBandCount_12\r
535                                               "00 02 02 02 02 02 02 02 "+//byteBandCount_12\r
536                                               "00 03 03 03 03 03 03 03 "+//packetBandCount_13\r
537                                               "00 03 03 03 03 03 03 03"//byteBandCount_13\r
538                                               );\r
539         \r
540         MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);\r
541         \r
542         BufferHelper.checkHeaderV13(builtByFactory);\r
543         Assert.assertEquals("Wrong type", 9, builtByFactory.getType().getIntValue());\r
544         Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());\r
545         \r
546         MultipartReplyMeter message = (MultipartReplyMeter) builtByFactory.getMultipartReplyBody();\r
547         \r
548         Assert.assertEquals("Wrong meterId", 9, \r
549                              message.getMeterStats().get(0).getMeterId().intValue());\r
550         Assert.assertEquals("Wrong flowCount", 7, \r
551                             message.getMeterStats().get(0).getFlowCount().intValue());\r
552         Assert.assertEquals("Wrong packetInCount", \r
553                 new BigInteger(new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}), \r
554                 message.getMeterStats().get(0).getPacketInCount());\r
555         Assert.assertEquals("Wrong byteInCount", \r
556                 new BigInteger(new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}), \r
557                 message.getMeterStats().get(0).getByteInCount());\r
558         Assert.assertEquals("Wrong durationSec", 5, \r
559                 message.getMeterStats().get(0).getDurationSec().intValue());\r
560         Assert.assertEquals("Wrong durationNsec", 5, \r
561                 message.getMeterStats().get(0).getDurationNsec().intValue());\r
562         Assert.assertEquals("Wrong packetBandCount_01", \r
563                 new BigInteger(new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}), \r
564                 message.getMeterStats().get(0).getMeterBandStats().get(0).getPacketBandCount());\r
565         Assert.assertEquals("Wrong byteBandCount_01", \r
566                 new BigInteger(new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}), \r
567                 message.getMeterStats().get(0).getMeterBandStats().get(0).getByteBandCount());\r
568         Assert.assertEquals("Wrong packetBandCount_02", \r
569                 new BigInteger(new byte[]{0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02}), \r
570                 message.getMeterStats().get(0).getMeterBandStats().get(1).getPacketBandCount());\r
571         Assert.assertEquals("Wrong byteBandCount_02", \r
572                 new BigInteger(new byte[]{0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02}), \r
573                 message.getMeterStats().get(0).getMeterBandStats().get(1).getByteBandCount());\r
574         Assert.assertEquals("Wrong packetBandCount_03", \r
575                 new BigInteger(new byte[]{0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03}), \r
576                 message.getMeterStats().get(0).getMeterBandStats().get(2).getPacketBandCount());\r
577         Assert.assertEquals("Wrong byteBandCount_03", \r
578                 new BigInteger(new byte[]{0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03}), \r
579                 message.getMeterStats().get(0).getMeterBandStats().get(2).getByteBandCount());\r
580         \r
581         Assert.assertEquals("Wrong meterId", 8, \r
582                 message.getMeterStats().get(1).getMeterId().intValue());\r
583         Assert.assertEquals("Wrong flowCount", 7, \r
584                 message.getMeterStats().get(1).getFlowCount().intValue());\r
585         Assert.assertEquals("Wrong packetInCount", \r
586                 new BigInteger(new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}), \r
587                 message.getMeterStats().get(1).getPacketInCount());\r
588         Assert.assertEquals("Wrong byteInCount", \r
589                 new BigInteger(new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}), \r
590                 message.getMeterStats().get(1).getByteInCount());\r
591         Assert.assertEquals("Wrong durationSec", 5, \r
592                 message.getMeterStats().get(1).getDurationSec().intValue());\r
593         Assert.assertEquals("Wrong durationNsec", 5, \r
594                 message.getMeterStats().get(1).getDurationNsec().intValue());\r
595         Assert.assertEquals("Wrong packetBandCount_01", \r
596                 new BigInteger(new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}), \r
597                 message.getMeterStats().get(1).getMeterBandStats().get(0).getPacketBandCount());\r
598         Assert.assertEquals("Wrong byteBandCount_01", \r
599                 new BigInteger(new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}), \r
600                 message.getMeterStats().get(1).getMeterBandStats().get(0).getByteBandCount());\r
601         Assert.assertEquals("Wrong packetBandCount_02", \r
602                 new BigInteger(new byte[]{0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02}), \r
603                 message.getMeterStats().get(1).getMeterBandStats().get(1).getPacketBandCount());\r
604         Assert.assertEquals("Wrong byteBandCount_02", \r
605                 new BigInteger(new byte[]{0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02}), \r
606                 message.getMeterStats().get(1).getMeterBandStats().get(1).getByteBandCount());\r
607         Assert.assertEquals("Wrong packetBandCount_03", \r
608                 new BigInteger(new byte[]{0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03}), \r
609                 message.getMeterStats().get(1).getMeterBandStats().get(2).getPacketBandCount());\r
610         Assert.assertEquals("Wrong byteBandCount_03", \r
611                 new BigInteger(new byte[]{0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03}), \r
612                 message.getMeterStats().get(1).getMeterBandStats().get(2).getByteBandCount());\r
613     }\r
614     \r
615     /**\r
616      * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO\r
617      */\r
618     @Test\r
619     public void testMultipartReplyMeterConfigBody(){\r
620         ByteBuf bb = BufferHelper.buildBuffer("00 0A 00 01 00 00 00 00 "+\r
621                                               "00 38 "+//len\r
622                                               "00 01 "+//flags\r
623                                               "00 00 00 09 "+//meterId\r
624                                               "00 01 "+//meterBandDrop.type\r
625                                               "00 10 "+//meterBandDrop.len\r
626                                               "00 00 00 11 "+//meterBandDrop.rate\r
627                                               "00 00 00 20 "+//meterBandDrop.burstSize\r
628                                               "00 00 00 00 "+//meterBandDrop.pad\r
629                                               "00 02 "+//meterBandDscp.type\r
630                                               "00 10 "+//meterBandDscp.len\r
631                                               "00 00 00 11 "+//meterBandDscp.rate\r
632                                               "00 00 00 20 "+//meterBandDscp.burstSize\r
633                                               "04 "+//meterBandDscp.precLevel\r
634                                               "00 00 00 "+//meterBandDscp.pad\r
635                                               "FF FF "+//meterBandExperimenter.type\r
636                                               "00 10 "+//meterBandExperimenter.len\r
637                                               "00 00 00 11 "+//meterBandExperimenter.rate\r
638                                               "00 00 00 20 "+//meterBandExperimenter.burstSize\r
639                                               "00 00 00 04"//meterBandExperimenter.experimenter\r
640                                               );\r
641         \r
642         MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);\r
643         \r
644         BufferHelper.checkHeaderV13(builtByFactory);\r
645         Assert.assertEquals("Wrong type", 10, builtByFactory.getType().getIntValue());\r
646         Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());\r
647         \r
648         MultipartReplyMeterConfig message = (MultipartReplyMeterConfig) builtByFactory.getMultipartReplyBody();\r
649         \r
650         Assert.assertEquals("Wrong flags", 1, \r
651                              message.getMeterConfig().get(0).getFlags().getIntValue());\r
652         Assert.assertEquals("Wrong meterId", 9, \r
653                              message.getMeterConfig().get(0).getMeterId().intValue());\r
654         \r
655         MeterBandDrop meterBandDrop = (MeterBandDrop) message.getMeterConfig().get(0).getBands().get(0).getMeterBand(); \r
656         Assert.assertEquals("Wrong meterBandDrop.type", 1, meterBandDrop.getType().getIntValue()); \r
657         Assert.assertEquals("Wrong meterBandDrop.rate", 17, meterBandDrop.getRate().intValue());\r
658         Assert.assertEquals("Wrong meterBandDrop.burstSize", 32, meterBandDrop.getBurstSize().intValue());\r
659         \r
660         MeterBandDscpRemark meterBandDscp = (MeterBandDscpRemark) message.getMeterConfig().get(0).getBands().get(1).getMeterBand(); \r
661         Assert.assertEquals("Wrong meterBandDscp.type", 2, meterBandDscp.getType().getIntValue()); \r
662         Assert.assertEquals("Wrong meterBandDscp.rate", 17, meterBandDscp.getRate().intValue());\r
663         Assert.assertEquals("Wrong meterBandDscp.burstSize", 32, meterBandDscp.getBurstSize().intValue());\r
664         Assert.assertEquals("Wrong meterBandDscp.precLevel", 4, meterBandDscp.getPrecLevel().intValue());\r
665         \r
666         MeterBandExperimenter meterBandExperimenter = (MeterBandExperimenter) message.getMeterConfig().get(0).getBands().get(2).getMeterBand(); \r
667         Assert.assertEquals("Wrong meterBandExperimenter.type", 0xFFFF, meterBandExperimenter.getType().getIntValue()); \r
668         Assert.assertEquals("Wrong meterBandExperimenter.rate", 17, meterBandExperimenter.getRate().intValue());\r
669         Assert.assertEquals("Wrong meterBandExperimenter.burstSize", 32, meterBandExperimenter.getBurstSize().intValue());\r
670         Assert.assertEquals("Wrong meterBandExperimenter.experimenter", 4, meterBandExperimenter.getExperimenter().intValue());\r
671     }\r
672     \r
673     /**\r
674      * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO\r
675      */\r
676     @Test\r
677     public void testMultipartReplyMeterConfigBodyMulti(){\r
678         ByteBuf bb = BufferHelper.buildBuffer("00 0A 00 01 00 00 00 00 "+\r
679                                               "00 38 "+//len\r
680                                               "00 01 "+//flags\r
681                                               "00 00 00 09 "+//meterId\r
682                                               "00 01 "+//meterBandDrop.type\r
683                                               "00 10 "+//meterBandDrop.len\r
684                                               "00 00 00 11 "+//meterBandDrop.rate\r
685                                               "00 00 00 20 "+//meterBandDrop.burstSize\r
686                                               "00 00 00 00 "+//meterBandDrop.pad\r
687                                               "00 02 "+//meterBandDscp.type\r
688                                               "00 10 "+//meterBandDscp.len\r
689                                               "00 00 00 11 "+//meterBandDscp.rate\r
690                                               "00 00 00 20 "+//meterBandDscp.burstSize\r
691                                               "04 "+//meterBandDscp.precLevel\r
692                                               "00 00 00 "+//meterBandDscp.pad\r
693                                               "FF FF "+//meterBandExperimenter.type\r
694                                               "00 10 "+//meterBandExperimenter.len\r
695                                               "00 00 00 11 "+//meterBandExperimenter.rate\r
696                                               "00 00 00 20 "+//meterBandExperimenter.burstSize\r
697                                               "00 00 00 04 "+//meterBandExperimenter.experimenter\r
698                                               \r
699                                               "00 18 "+//len01\r
700                                               "00 00 "+//flags01\r
701                                               "00 00 00 07 "+//meterId01\r
702                                               "00 02 "+//meterBandDscp01.type\r
703                                               "00 10 "+//meterBandDscp01.len\r
704                                               "00 00 00 11 "+//meterBandDscp01.rate\r
705                                               "00 00 00 20 "+//meterBandDscp01.burstSize\r
706                                               "04 "+//meterBandDscp01.precLevel\r
707                                               "00 00 00"//meterBandDscp01.pad\r
708                                               );\r
709         \r
710         MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);\r
711         \r
712         BufferHelper.checkHeaderV13(builtByFactory);\r
713         Assert.assertEquals("Wrong type", 10, builtByFactory.getType().getIntValue());\r
714         Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());\r
715         \r
716         MultipartReplyMeterConfig message = (MultipartReplyMeterConfig) builtByFactory.getMultipartReplyBody();\r
717         \r
718         Assert.assertEquals("Wrong flags", 1, \r
719                              message.getMeterConfig().get(0).getFlags().getIntValue());\r
720         Assert.assertEquals("Wrong meterId", 9, \r
721                              message.getMeterConfig().get(0).getMeterId().intValue());\r
722         \r
723         MeterBandDrop meterBandDrop = (MeterBandDrop) message.getMeterConfig().get(0).getBands().get(0).getMeterBand(); \r
724         Assert.assertEquals("Wrong meterBandDrop.type", 1, meterBandDrop.getType().getIntValue()); \r
725         Assert.assertEquals("Wrong meterBandDrop.rate", 17, meterBandDrop.getRate().intValue());\r
726         Assert.assertEquals("Wrong meterBandDrop.burstSize", 32, meterBandDrop.getBurstSize().intValue());\r
727         \r
728         MeterBandDscpRemark meterBandDscp = (MeterBandDscpRemark) message.getMeterConfig().get(0).getBands().get(1).getMeterBand(); \r
729         Assert.assertEquals("Wrong meterBandDscp.type", 2, meterBandDscp.getType().getIntValue()); \r
730         Assert.assertEquals("Wrong meterBandDscp.rate", 17, meterBandDscp.getRate().intValue());\r
731         Assert.assertEquals("Wrong meterBandDscp.burstSize", 32, meterBandDscp.getBurstSize().intValue());\r
732         Assert.assertEquals("Wrong meterBandDscp.precLevel", 4, meterBandDscp.getPrecLevel().intValue());\r
733         \r
734         MeterBandExperimenter meterBandExperimenter = (MeterBandExperimenter) message.getMeterConfig().get(0).getBands().get(2).getMeterBand(); \r
735         Assert.assertEquals("Wrong meterBandExperimenter.type", 0xFFFF, meterBandExperimenter.getType().getIntValue()); \r
736         Assert.assertEquals("Wrong meterBandExperimenter.rate", 17, meterBandExperimenter.getRate().intValue());\r
737         Assert.assertEquals("Wrong meterBandExperimenter.burstSize", 32, meterBandExperimenter.getBurstSize().intValue());\r
738         Assert.assertEquals("Wrong meterBandExperimenter.experimenter", 4, meterBandExperimenter.getExperimenter().intValue());\r
739         \r
740         Assert.assertEquals("Wrong flags01", 1, \r
741                              message.getMeterConfig().get(0).getFlags().getIntValue());\r
742         Assert.assertEquals("Wrong meterId01", 7, \r
743                              message.getMeterConfig().get(1).getMeterId().intValue());\r
744         \r
745         MeterBandDscpRemark meterBandDscp01 = (MeterBandDscpRemark) message.getMeterConfig().get(1).getBands().get(0).getMeterBand(); \r
746         Assert.assertEquals("Wrong meterBandDscp01.type", 2, meterBandDscp01.getType().getIntValue()); \r
747         Assert.assertEquals("Wrong meterBandDscp01.rate", 17, meterBandDscp01.getRate().intValue());\r
748         Assert.assertEquals("Wrong meterBandDscp01.burstSize", 32, meterBandDscp01.getBurstSize().intValue());\r
749         Assert.assertEquals("Wrong meterBandDscp01.precLevel", 4, meterBandDscp01.getPrecLevel().intValue());\r
750         \r
751     }\r
752     \r
753     /**\r
754      * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO\r
755      */\r
756     @Test\r
757     public void testMultipartReplyExperimenterBody(){\r
758         ByteBuf bb = BufferHelper.buildBuffer("FF FF 00 01 00 00 00 00 "+\r
759                                               "00 00 00 0F "+//experimenterId\r
760                                               "00 00 00 FF "+//expType\r
761                                               "00 00 01 01 00 00 01 01"\r
762                                               );\r
763         \r
764         MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);\r
765         \r
766         BufferHelper.checkHeaderV13(builtByFactory);\r
767         Assert.assertEquals("Wrong type", 0xFFFF, builtByFactory.getType().getIntValue());\r
768         Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());\r
769         \r
770         MultipartReplyExperimenter message = (MultipartReplyExperimenter) builtByFactory.getMultipartReplyBody();\r
771         \r
772         Assert.assertEquals("Wrong experimenterId", 15, message.getExperimenter().intValue());\r
773         Assert.assertEquals("Wrong expType", 255, message.getExpType().intValue());\r
774         Assert.assertArrayEquals("Wrong data", new byte[]{0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01}, \r
775                              message.getData());\r
776     }\r
777     \r
778     /**\r
779      * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO\r
780      */\r
781     @Test\r
782     public void testMultipartReplyPortDescBody(){\r
783         final byte MAX_PORT_NAME_LEN = 16;\r
784         ByteBuf bb = BufferHelper.buildBuffer("00 0D 00 01 00 00 00 00 "+\r
785                                               "00 01 02 03 "+ //portNo\r
786                                               "00 00 00 00 "+ //padding01\r
787                                               "08 00 27 00 B0 EB " + //mac address\r
788                                               "00 00 "); //padding02\r
789         //port name\r
790         String portName = "SampleText";\r
791         byte[] portNameBytes = new byte[MAX_PORT_NAME_LEN];\r
792         portNameBytes = portName.getBytes();\r
793         bb.writeBytes(portNameBytes);\r
794         ByteBufUtils.padBuffer((MAX_PORT_NAME_LEN - portNameBytes.length), bb);\r
795         \r
796         ByteBuf bb2 =  BufferHelper.buildBuffer("00 00 00 41 " + //port config\r
797                                                 "00 00 00 05 " + //port state\r
798                                                 "00 00 00 81 " + //current features\r
799                                                 "00 00 00 81 " + //advertised features\r
800                                                 "00 00 00 81 " + //supported features\r
801                                                 "00 00 00 81 " + //peer features\r
802                                                 "00 00 00 81 " + //curr speed\r
803                                                 "00 00 00 80" //max speed\r
804                                                 );\r
805         bb.writeBytes(bb2.copy(4, bb2.readableBytes()-4));//excluding version and xid\r
806         \r
807         MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);\r
808         \r
809         BufferHelper.checkHeaderV13(builtByFactory);\r
810         Assert.assertEquals("Wrong type", 13, builtByFactory.getType().getIntValue());\r
811         Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());\r
812         \r
813         MultipartReplyPortDesc message = (MultipartReplyPortDesc) builtByFactory.getMultipartReplyBody();\r
814         \r
815         Assert.assertEquals("Wrong portNo", 66051L, message.getPorts().get(0).getPortNo().longValue());\r
816         Assert.assertEquals("Wrong macAddress", new MacAddress("08002700B0EB"), \r
817                                                 message.getPorts().get(0).getHwAddr());\r
818         Assert.assertEquals("Wrong portName", "SampleText", \r
819                                                 message.getPorts().get(0).getName());\r
820         Assert.assertEquals("Wrong portConfig", new PortConfig(false, true, false, true), \r
821                                                 message.getPorts().get(0).getConfig());\r
822         Assert.assertEquals("Wrong portState", new PortState(true, false, true), \r
823                                                message.getPorts().get(0).getState());\r
824         Assert.assertEquals("Wrong currentFeatures", new PortFeatures(true, false, false, false,\r
825                                                                       false, false, false, true, \r
826                                                                       false, false, false, false, \r
827                                                                       false, false, false, false), \r
828                                                   message.getPorts().get(0).getCurrentFeatures());\r
829         Assert.assertEquals("Wrong advertisedFeatures", \r
830                              new PortFeatures(true, false, false, false,\r
831                                               false, false, false, true, \r
832                                               false, false, false, false, \r
833                                               false, false, false, false), \r
834                                               message.getPorts().get(0).getAdvertisedFeatures());\r
835         Assert.assertEquals("Wrong supportedFeatures", \r
836                              new PortFeatures(true, false, false, false,\r
837                                               false, false, false, true, \r
838                                               false, false, false, false, \r
839                                               false, false, false, false), \r
840                                               message.getPorts().get(0).getSupportedFeatures());\r
841         Assert.assertEquals("Wrong peerFeatures", \r
842                              new PortFeatures(true, false, false, false,\r
843                                               false, false, false, true, \r
844                                               false, false, false, false, \r
845                                               false, false, false, false), \r
846                                               message.getPorts().get(0).getPeerFeatures());\r
847         Assert.assertEquals("Wrong currSpeed", 129L, message.getPorts().get(0).getCurrSpeed().longValue());\r
848         Assert.assertEquals("Wrong maxSpeed", 128L, message.getPorts().get(0).getMaxSpeed().longValue());\r
849     }\r
850 }\r