2 * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
11 import io.netty.buffer.ByteBuf;
12 import io.netty.buffer.UnpooledByteBufAllocator;
14 import java.math.BigInteger;
16 import org.junit.Assert;
17 import org.junit.Before;
18 import org.junit.Test;
19 import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
20 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
21 import org.opendaylight.openflowjava.protocol.api.keys.MessageTypeKey;
22 import org.opendaylight.openflowjava.protocol.impl.serialization.SerializerRegistryImpl;
23 import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper;
24 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupId;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterId;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartRequestFlags;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInput;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInputBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.MultipartRequestBody;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestAggregateCase;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestAggregateCaseBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestDescCaseBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestFlowCase;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestFlowCaseBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroupCase;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroupCaseBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterCase;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterCaseBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterConfigCase;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterConfigCaseBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestPortStatsCase;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestPortStatsCaseBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestQueueCase;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestQueueCaseBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.aggregate._case.MultipartRequestAggregateBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.desc._case.MultipartRequestDescBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.flow._case.MultipartRequestFlowBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.group._case.MultipartRequestGroupBuilder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.meter._case.MultipartRequestMeterBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.meter.config._case.MultipartRequestMeterConfigBuilder;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.port.stats._case.MultipartRequestPortStatsBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.queue._case.MultipartRequestQueueBuilder;
57 * @author timotej.kubas
58 * @author michal.polkorab
60 public class MultipartRequestInputFactoryTest {
61 /** padding in MultipartRequest message */
62 public static final byte PADDING_IN_MULTIPART_REQUEST_MESSAGE = 4;
63 private SerializerRegistry registry;
64 private OFSerializer<MultipartRequestInput> multipartFactory;
67 * Initializes serializer registry and stores correct factory in field
70 public void startUp() {
71 registry = new SerializerRegistryImpl();
73 multipartFactory = registry.getSerializer(
74 new MessageTypeKey<>(EncodeConstants.OF13_VERSION_ID, MultipartRequestInput.class));
79 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
82 public void testMultipartRequestFlowInputFactory() throws Exception {
83 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
84 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
85 builder.setType(MultipartType.forValue(1));
86 builder.setFlags(new MultipartRequestFlags(true));
87 builder.setMultipartRequestBody(createRequestFlow());
88 MultipartRequestInput message = builder.build();
90 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
91 multipartFactory.serialize(message, out);
93 BufferHelper.checkHeaderV13(out, (byte) 18, 48);
94 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
95 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
96 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
97 Assert.assertEquals("Wrong flow", message.getMultipartRequestBody(), decodeRequestFlow(out));
100 private static MultipartRequestFlowCase createRequestFlow() {
101 MultipartRequestFlowCaseBuilder caseBuilder = new MultipartRequestFlowCaseBuilder();
102 MultipartRequestFlowBuilder builder = new MultipartRequestFlowBuilder();
103 builder.setTableId((short) 8);
104 builder.setOutPort(85L);
105 builder.setOutGroup(95L);
106 byte[] cookie = new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};
107 builder.setCookie(new BigInteger(1, cookie));
108 byte[] cookieMask = new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};
109 builder.setCookieMask(new BigInteger(1, cookieMask));
110 caseBuilder.setMultipartRequestFlow(builder.build());
112 return caseBuilder.build();
115 private static MultipartRequestFlowCase decodeRequestFlow(ByteBuf output) {
116 final byte PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_01 = 3;
117 final byte PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_02 = 4;
118 MultipartRequestFlowCaseBuilder caseBuilder = new MultipartRequestFlowCaseBuilder();
119 MultipartRequestFlowBuilder builder = new MultipartRequestFlowBuilder();
120 builder.setTableId(output.readUnsignedByte());
121 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_01);
122 builder.setOutPort(output.readUnsignedInt());
123 builder.setOutGroup(output.readUnsignedInt());
124 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_02);
125 byte[] cookie = new byte[EncodeConstants.SIZE_OF_LONG_IN_BYTES];
126 output.readBytes(cookie);
127 builder.setCookie(new BigInteger(1, cookie));
128 byte[] cookieMask = new byte[EncodeConstants.SIZE_OF_LONG_IN_BYTES];
129 output.readBytes(cookieMask);
130 builder.setCookieMask(new BigInteger(1, cookieMask));
131 caseBuilder.setMultipartRequestFlow(builder.build());
132 return caseBuilder.build();
137 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
140 public void testMultipartRequestInputAggregateBodyFactory() throws Exception {
141 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
142 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
143 builder.setType(MultipartType.forValue(2));
144 builder.setFlags(new MultipartRequestFlags(true));
145 builder.setMultipartRequestBody(createRequestAggregate());
146 MultipartRequestInput message = builder.build();
148 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
149 multipartFactory.serialize(message, out);
151 BufferHelper.checkHeaderV13(out, (byte) 18, 48);
152 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
153 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
154 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
155 Assert.assertEquals("Wrong aggregate", message.getMultipartRequestBody(), decodeRequestAggregate(out));
158 private static MultipartRequestFlags decodeMultipartRequestFlags(short input){
159 final Boolean _oFPMPFREQMORE = (input & (1 << 0)) > 0;
160 return new MultipartRequestFlags(_oFPMPFREQMORE);
164 private static MultipartRequestAggregateCase createRequestAggregate() {
165 MultipartRequestAggregateCaseBuilder caseBuilder = new MultipartRequestAggregateCaseBuilder();
166 MultipartRequestAggregateBuilder builder = new MultipartRequestAggregateBuilder();
167 builder.setTableId((short) 8);
168 builder.setOutPort(85L);
169 builder.setOutGroup(95L);
170 byte[] cookie = new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};
171 builder.setCookie(new BigInteger(1, cookie));
172 byte[] cookieMask = new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};
173 builder.setCookieMask(new BigInteger(1, cookieMask));
174 caseBuilder.setMultipartRequestAggregate(builder.build());
176 return caseBuilder.build();
179 private static MultipartRequestAggregateCase decodeRequestAggregate(ByteBuf output) {
180 final byte PADDING_IN_MULTIPART_REQUEST_AGGREGATE_BODY_01 = 3;
181 final byte PADDING_IN_MULTIPART_REQUEST_AGGREGATE_BODY_02 = 4;
182 MultipartRequestAggregateCaseBuilder caseBuilder = new MultipartRequestAggregateCaseBuilder();
183 MultipartRequestAggregateBuilder builder = new MultipartRequestAggregateBuilder();
184 builder.setTableId(output.readUnsignedByte());
185 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_AGGREGATE_BODY_01);
186 builder.setOutPort(output.readUnsignedInt());
187 builder.setOutGroup(output.readUnsignedInt());
188 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_AGGREGATE_BODY_02);
189 byte[] cookie = new byte[EncodeConstants.SIZE_OF_LONG_IN_BYTES];
190 output.readBytes(cookie);
191 builder.setCookie(new BigInteger(1, cookie));
192 byte[] cookieMask = new byte[EncodeConstants.SIZE_OF_LONG_IN_BYTES];
193 output.readBytes(cookieMask);
194 builder.setCookieMask(new BigInteger(1, cookieMask));
195 caseBuilder.setMultipartRequestAggregate(builder.build());
196 return caseBuilder.build();
201 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
204 public void testMultipartRequestInputTableFactory() throws Exception {
205 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
206 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
207 builder.setType(MultipartType.forValue(3));
208 builder.setFlags(new MultipartRequestFlags(true));
209 //multipart request for registry does not have body
210 MultipartRequestInput message = builder.build();
212 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
213 multipartFactory.serialize(message, out);
215 BufferHelper.checkHeaderV13(out, (byte) 18, 16);
216 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
217 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
218 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
223 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
226 public void testMultipartRequestPortStatsMessageFactory() throws Exception {
227 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
228 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
229 builder.setType(MultipartType.forValue(4));
230 builder.setFlags(new MultipartRequestFlags(true));
231 builder.setMultipartRequestBody(createRequestPortStats());
232 MultipartRequestInput message = builder.build();
234 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
235 multipartFactory.serialize(message, out);
237 BufferHelper.checkHeaderV13(out, (byte) 18, 24);
238 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
239 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
240 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
241 Assert.assertEquals("Wrong portStatsBody", message.getMultipartRequestBody(), decodeRequestPortStats(out));
244 private static MultipartRequestPortStatsCase createRequestPortStats() {
245 MultipartRequestPortStatsCaseBuilder caseBuilder = new MultipartRequestPortStatsCaseBuilder();
246 MultipartRequestPortStatsBuilder builder = new MultipartRequestPortStatsBuilder();
247 builder.setPortNo(2251L);
248 caseBuilder.setMultipartRequestPortStats(builder.build());
249 return caseBuilder.build();
252 private static MultipartRequestPortStatsCase decodeRequestPortStats(ByteBuf output) {
253 final byte PADDING_IN_MULTIPART_REQUEST_PORTSTATS_BODY = 4;
254 MultipartRequestPortStatsCaseBuilder caseBuilder = new MultipartRequestPortStatsCaseBuilder();
255 MultipartRequestPortStatsBuilder builder = new MultipartRequestPortStatsBuilder();
256 builder.setPortNo(output.readUnsignedInt());
257 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_PORTSTATS_BODY);
258 caseBuilder.setMultipartRequestPortStats(builder.build());
259 return caseBuilder.build();
264 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
267 public void testMultipartRequestQueueMessageFactory() throws Exception {
268 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
269 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
270 builder.setType(MultipartType.forValue(5));
271 builder.setFlags(new MultipartRequestFlags(true));
272 builder.setMultipartRequestBody(createRequestQueue());
273 MultipartRequestInput message = builder.build();
275 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
276 multipartFactory.serialize(message, out);
278 BufferHelper.checkHeaderV13(out, (byte) 18, 24);
279 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
280 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
281 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
282 Assert.assertEquals("Wrong queueBody", message.getMultipartRequestBody(), decodeRequestQueue(out));
285 private static MultipartRequestQueueCase createRequestQueue() {
286 MultipartRequestQueueCaseBuilder caseBuilder = new MultipartRequestQueueCaseBuilder();
287 MultipartRequestQueueBuilder builder = new MultipartRequestQueueBuilder();
288 builder.setPortNo(2256L);
289 builder.setQueueId(2211L);
290 caseBuilder.setMultipartRequestQueue(builder.build());
291 return caseBuilder.build();
294 private static MultipartRequestQueueCase decodeRequestQueue(ByteBuf output) {
295 MultipartRequestQueueCaseBuilder caseBuilder = new MultipartRequestQueueCaseBuilder();
296 MultipartRequestQueueBuilder builder = new MultipartRequestQueueBuilder();
297 builder.setPortNo(output.readUnsignedInt());
298 builder.setQueueId(output.readUnsignedInt());
299 caseBuilder.setMultipartRequestQueue(builder.build());
300 return caseBuilder.build();
305 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
308 public void testMultipartRequestGroupMessageFactory() throws Exception {
309 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
310 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
311 builder.setType(MultipartType.forValue(6));
312 builder.setFlags(new MultipartRequestFlags(true));
313 builder.setMultipartRequestBody(createRequestGroup());
314 MultipartRequestInput message = builder.build();
316 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
317 multipartFactory.serialize(message, out);
319 BufferHelper.checkHeaderV13(out, (byte) 18, 24);
320 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
321 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
322 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
323 Assert.assertEquals("Wrong groupBody", message.getMultipartRequestBody(), decodeRequestGroup(out));
326 private static MultipartRequestGroupCase createRequestGroup() {
327 MultipartRequestGroupCaseBuilder caseBuilder = new MultipartRequestGroupCaseBuilder();
328 MultipartRequestGroupBuilder builder = new MultipartRequestGroupBuilder();
329 builder.setGroupId(new GroupId(2258L));
330 caseBuilder.setMultipartRequestGroup(builder.build());
331 return caseBuilder.build();
334 private static MultipartRequestGroupCase decodeRequestGroup(ByteBuf output) {
335 final byte PADDING_IN_MULTIPART_REQUEST_GROUP_BODY = 4;
336 MultipartRequestGroupCaseBuilder caseBuilder = new MultipartRequestGroupCaseBuilder();
337 MultipartRequestGroupBuilder builder = new MultipartRequestGroupBuilder();
338 builder.setGroupId(new GroupId(output.readUnsignedInt()));
339 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_GROUP_BODY);
340 caseBuilder.setMultipartRequestGroup(builder.build());
341 return caseBuilder.build();
346 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
349 public void testMultipartRequestMeterMessageFactory() throws Exception {
350 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
351 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
352 builder.setType(MultipartType.forValue(9));
353 builder.setFlags(new MultipartRequestFlags(true));
354 builder.setMultipartRequestBody(createRequestMeter());
355 MultipartRequestInput message = builder.build();
357 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
358 multipartFactory.serialize(message, out);
360 BufferHelper.checkHeaderV13(out, (byte) 18, 24);
361 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
362 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
363 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
364 Assert.assertEquals("Wrong meterBody", message.getMultipartRequestBody(), decodeRequestMeter(out));
367 private static MultipartRequestMeterCase createRequestMeter() {
368 MultipartRequestMeterCaseBuilder caseBuilder = new MultipartRequestMeterCaseBuilder();
369 MultipartRequestMeterBuilder builder = new MultipartRequestMeterBuilder();
370 builder.setMeterId(new MeterId(1121L));
371 caseBuilder.setMultipartRequestMeter(builder.build());
372 return caseBuilder.build();
375 private static MultipartRequestMeterCase decodeRequestMeter(ByteBuf output) {
376 final byte PADDING_IN_MULTIPART_REQUEST_METER_BODY = 4;
377 MultipartRequestMeterCaseBuilder caseBuilder = new MultipartRequestMeterCaseBuilder();
378 MultipartRequestMeterBuilder builder = new MultipartRequestMeterBuilder();
379 builder.setMeterId(new MeterId(output.readUnsignedInt()));
380 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_METER_BODY);
381 caseBuilder.setMultipartRequestMeter(builder.build());
382 return caseBuilder.build();
387 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
390 public void testMultipartRequestMeterConfigMessageFactory() throws Exception {
391 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
392 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
393 builder.setType(MultipartType.forValue(10));
394 builder.setFlags(new MultipartRequestFlags(true));
395 builder.setMultipartRequestBody(createRequestMeterConfig());
396 MultipartRequestInput message = builder.build();
398 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
399 multipartFactory.serialize(message, out);
401 BufferHelper.checkHeaderV13(out, (byte) 18, 24);
402 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
403 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
404 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
405 Assert.assertEquals("Wrong meterConfigBody", message.getMultipartRequestBody(), decodeRequestMeterConfig(out));
408 private static MultipartRequestMeterConfigCase createRequestMeterConfig() {
409 MultipartRequestMeterConfigCaseBuilder caseBuilder = new MultipartRequestMeterConfigCaseBuilder();
410 MultipartRequestMeterConfigBuilder builder = new MultipartRequestMeterConfigBuilder();
411 builder.setMeterId(new MeterId(1133L));
412 caseBuilder.setMultipartRequestMeterConfig(builder.build());
413 return caseBuilder.build();
416 private static MultipartRequestMeterConfigCase decodeRequestMeterConfig(ByteBuf output) {
417 final byte PADDING_IN_MULTIPART_REQUEST_METER_CONFIG_BODY = 4;
418 MultipartRequestMeterConfigCaseBuilder caseBuilder = new MultipartRequestMeterConfigCaseBuilder();
419 MultipartRequestMeterConfigBuilder builder = new MultipartRequestMeterConfigBuilder();
420 builder.setMeterId(new MeterId(output.readUnsignedInt()));
421 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_METER_CONFIG_BODY);
422 caseBuilder.setMultipartRequestMeterConfig(builder.build());
423 return caseBuilder.build();
428 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
431 public void testMultipartRequestDescMessageFactory() throws Exception {
432 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
433 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
434 builder.setType(MultipartType.forValue(0));
435 builder.setFlags(new MultipartRequestFlags(true));
436 builder.setMultipartRequestBody(createRequestDesc());
437 MultipartRequestInput message = builder.build();
439 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
440 multipartFactory.serialize(message, out);
442 BufferHelper.checkHeaderV13(out, (byte) 18, 16);
443 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readUnsignedShort());
444 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
447 private static MultipartRequestBody createRequestDesc() {
448 MultipartRequestDescCaseBuilder caseBuilder = new MultipartRequestDescCaseBuilder();
449 MultipartRequestDescBuilder builder = new MultipartRequestDescBuilder();
450 caseBuilder.setMultipartRequestDesc(builder.build());
451 return caseBuilder.build();