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
8 package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
10 import io.netty.buffer.ByteBuf;
11 import io.netty.buffer.UnpooledByteBufAllocator;
12 import org.junit.Assert;
13 import org.junit.Before;
14 import org.junit.Test;
15 import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
16 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
17 import org.opendaylight.openflowjava.protocol.api.keys.MessageTypeKey;
18 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
19 import org.opendaylight.openflowjava.protocol.impl.serialization.SerializerRegistryImpl;
20 import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupId;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterId;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartRequestFlags;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInput;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInputBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.MultipartRequestBody;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestAggregateCase;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestAggregateCaseBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestDescCaseBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestFlowCase;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestFlowCaseBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroupCase;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroupCaseBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterCase;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterCaseBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterConfigCase;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterConfigCaseBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestPortStatsCase;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestPortStatsCaseBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestQueueCase;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestQueueCaseBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.aggregate._case.MultipartRequestAggregateBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.desc._case.MultipartRequestDescBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.flow._case.MultipartRequestFlowBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.group._case.MultipartRequestGroupBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.meter._case.MultipartRequestMeterBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.meter.config._case.MultipartRequestMeterConfigBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.port.stats._case.MultipartRequestPortStatsBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.queue._case.MultipartRequestQueueBuilder;
51 import org.opendaylight.yangtools.yang.common.Uint32;
52 import org.opendaylight.yangtools.yang.common.Uint64;
53 import org.opendaylight.yangtools.yang.common.Uint8;
56 * Unit tests for MultipartRequestInputFactory.
58 * @author timotej.kubas
59 * @author michal.polkorab
61 public class MultipartRequestInputFactoryTest {
62 static final byte PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_01 = 3;
63 static final byte PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_02 = 4;
64 static final byte PADDING_IN_MULTIPART_REQUEST_METER_CONFIG_BODY = 4;
65 static final byte PADDING_IN_MULTIPART_REQUEST_AGGREGATE_BODY_01 = 3;
66 static final byte PADDING_IN_MULTIPART_REQUEST_AGGREGATE_BODY_02 = 4;
67 static final byte PADDING_IN_MULTIPART_REQUEST_PORTSTATS_BODY = 4;
68 static final byte PADDING_IN_MULTIPART_REQUEST_GROUP_BODY = 4;
69 static final byte PADDING_IN_MULTIPART_REQUEST_METER_BODY = 4;
71 /** padding in MultipartRequest message. */
72 public static final byte PADDING_IN_MULTIPART_REQUEST_MESSAGE = 4;
73 private SerializerRegistry registry;
74 private OFSerializer<MultipartRequestInput> multipartFactory;
77 * Initializes serializer registry and stores correct factory in field.
80 public void startUp() {
81 registry = new SerializerRegistryImpl();
83 multipartFactory = registry.getSerializer(
84 new MessageTypeKey<>(EncodeConstants.OF_VERSION_1_3, MultipartRequestInput.class));
88 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO.
91 public void testMultipartRequestFlowInputFactory() throws Exception {
92 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
93 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
94 builder.setType(MultipartType.forValue(1));
95 builder.setFlags(new MultipartRequestFlags(true));
96 builder.setMultipartRequestBody(createRequestFlow());
97 MultipartRequestInput message = builder.build();
99 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
100 multipartFactory.serialize(message, out);
102 BufferHelper.checkHeaderV13(out, (byte) 18, 48);
103 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
104 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
105 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
106 Assert.assertEquals("Wrong flow", message.getMultipartRequestBody(), decodeRequestFlow(out));
109 private static MultipartRequestFlowCase createRequestFlow() {
110 final MultipartRequestFlowCaseBuilder caseBuilder = new MultipartRequestFlowCaseBuilder();
111 MultipartRequestFlowBuilder builder = new MultipartRequestFlowBuilder();
112 builder.setTableId(Uint8.valueOf(8));
113 builder.setOutPort(Uint32.valueOf(85));
114 builder.setOutGroup(Uint32.valueOf(95));
115 builder.setCookie(Uint64.valueOf("0001010101010101", 16));
116 builder.setCookieMask(Uint64.valueOf("0001010101010101", 16));
117 caseBuilder.setMultipartRequestFlow(builder.build());
119 return caseBuilder.build();
122 private static MultipartRequestFlowCase decodeRequestFlow(final ByteBuf output) {
123 final MultipartRequestFlowCaseBuilder caseBuilder = new MultipartRequestFlowCaseBuilder();
124 MultipartRequestFlowBuilder builder = new MultipartRequestFlowBuilder();
125 builder.setTableId(Uint8.fromByteBits(output.readByte()));
126 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_01);
127 builder.setOutPort(Uint32.fromIntBits(output.readInt()));
128 builder.setOutGroup(Uint32.fromIntBits(output.readInt()));
129 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_02);
130 builder.setCookie(Uint64.fromLongBits(output.readLong()));
131 builder.setCookieMask(Uint64.fromLongBits(output.readLong()));
132 caseBuilder.setMultipartRequestFlow(builder.build());
133 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 @SuppressWarnings("checkstyle:AbbreviationAsWordInName")
159 private static MultipartRequestFlags decodeMultipartRequestFlags(final short input) {
160 final Boolean _oFPMPFREQMORE = (input & 1 << 0) > 0;
161 return new MultipartRequestFlags(_oFPMPFREQMORE);
165 private static MultipartRequestAggregateCase createRequestAggregate() {
166 final MultipartRequestAggregateCaseBuilder caseBuilder = new MultipartRequestAggregateCaseBuilder();
167 MultipartRequestAggregateBuilder builder = new MultipartRequestAggregateBuilder();
168 builder.setTableId(Uint8.valueOf(8));
169 builder.setOutPort(Uint32.valueOf(85));
170 builder.setOutGroup(Uint32.valueOf(95));
171 builder.setCookie(Uint64.valueOf("0001010101010101", 16));
172 builder.setCookieMask(Uint64.valueOf("0001010101010101", 16));
173 caseBuilder.setMultipartRequestAggregate(builder.build());
175 return caseBuilder.build();
178 private static MultipartRequestAggregateCase decodeRequestAggregate(final ByteBuf output) {
179 final MultipartRequestAggregateCaseBuilder caseBuilder = new MultipartRequestAggregateCaseBuilder();
180 MultipartRequestAggregateBuilder builder = new MultipartRequestAggregateBuilder();
181 builder.setTableId(Uint8.fromByteBits(output.readByte()));
182 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_AGGREGATE_BODY_01);
183 builder.setOutPort(Uint32.fromIntBits(output.readInt()));
184 builder.setOutGroup(Uint32.fromIntBits(output.readInt()));
185 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_AGGREGATE_BODY_02);
186 builder.setCookie(Uint64.fromLongBits(output.readLong()));
187 builder.setCookieMask(Uint64.fromLongBits(output.readLong()));
188 caseBuilder.setMultipartRequestAggregate(builder.build());
189 return caseBuilder.build();
193 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO.
196 public void testMultipartRequestInputTableFactory() throws Exception {
197 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
198 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
199 builder.setType(MultipartType.forValue(3));
200 builder.setFlags(new MultipartRequestFlags(true));
201 //multipart request for registry does not have body
202 MultipartRequestInput message = builder.build();
204 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
205 multipartFactory.serialize(message, out);
207 BufferHelper.checkHeaderV13(out, (byte) 18, 16);
208 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
209 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
210 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
214 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO.
217 public void testMultipartRequestPortStatsMessageFactory() throws Exception {
218 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
219 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
220 builder.setType(MultipartType.forValue(4));
221 builder.setFlags(new MultipartRequestFlags(true));
222 builder.setMultipartRequestBody(createRequestPortStats());
223 MultipartRequestInput message = builder.build();
225 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
226 multipartFactory.serialize(message, out);
228 BufferHelper.checkHeaderV13(out, (byte) 18, 24);
229 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
230 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
231 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
232 Assert.assertEquals("Wrong portStatsBody", message.getMultipartRequestBody(), decodeRequestPortStats(out));
235 private static MultipartRequestPortStatsCase createRequestPortStats() {
236 MultipartRequestPortStatsCaseBuilder caseBuilder = new MultipartRequestPortStatsCaseBuilder();
237 MultipartRequestPortStatsBuilder builder = new MultipartRequestPortStatsBuilder();
238 builder.setPortNo(Uint32.valueOf(2251));
239 caseBuilder.setMultipartRequestPortStats(builder.build());
240 return caseBuilder.build();
243 private static MultipartRequestPortStatsCase decodeRequestPortStats(final ByteBuf output) {
244 MultipartRequestPortStatsCaseBuilder caseBuilder = new MultipartRequestPortStatsCaseBuilder();
245 MultipartRequestPortStatsBuilder builder = new MultipartRequestPortStatsBuilder();
246 builder.setPortNo(Uint32.fromIntBits(output.readInt()));
247 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_PORTSTATS_BODY);
248 caseBuilder.setMultipartRequestPortStats(builder.build());
249 return caseBuilder.build();
253 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO.
256 public void testMultipartRequestQueueMessageFactory() throws Exception {
257 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
258 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
259 builder.setType(MultipartType.forValue(5));
260 builder.setFlags(new MultipartRequestFlags(true));
261 builder.setMultipartRequestBody(createRequestQueue());
262 MultipartRequestInput message = builder.build();
264 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
265 multipartFactory.serialize(message, out);
267 BufferHelper.checkHeaderV13(out, (byte) 18, 24);
268 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
269 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
270 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
271 Assert.assertEquals("Wrong queueBody", message.getMultipartRequestBody(), decodeRequestQueue(out));
274 private static MultipartRequestQueueCase createRequestQueue() {
275 MultipartRequestQueueCaseBuilder caseBuilder = new MultipartRequestQueueCaseBuilder();
276 MultipartRequestQueueBuilder builder = new MultipartRequestQueueBuilder();
277 builder.setPortNo(Uint32.valueOf(2256));
278 builder.setQueueId(Uint32.valueOf(2211));
279 caseBuilder.setMultipartRequestQueue(builder.build());
280 return caseBuilder.build();
283 private static MultipartRequestQueueCase decodeRequestQueue(final ByteBuf output) {
284 MultipartRequestQueueCaseBuilder caseBuilder = new MultipartRequestQueueCaseBuilder();
285 MultipartRequestQueueBuilder builder = new MultipartRequestQueueBuilder();
286 builder.setPortNo(Uint32.fromIntBits(output.readInt()));
287 builder.setQueueId(Uint32.fromIntBits(output.readInt()));
288 caseBuilder.setMultipartRequestQueue(builder.build());
289 return caseBuilder.build();
293 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO.
296 public void testMultipartRequestGroupMessageFactory() throws Exception {
297 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
298 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
299 builder.setType(MultipartType.forValue(6));
300 builder.setFlags(new MultipartRequestFlags(true));
301 builder.setMultipartRequestBody(createRequestGroup());
302 MultipartRequestInput message = builder.build();
304 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
305 multipartFactory.serialize(message, out);
307 BufferHelper.checkHeaderV13(out, (byte) 18, 24);
308 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
309 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
310 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
311 Assert.assertEquals("Wrong groupBody", message.getMultipartRequestBody(), decodeRequestGroup(out));
314 private static MultipartRequestGroupCase createRequestGroup() {
315 MultipartRequestGroupCaseBuilder caseBuilder = new MultipartRequestGroupCaseBuilder();
316 MultipartRequestGroupBuilder builder = new MultipartRequestGroupBuilder();
317 builder.setGroupId(new GroupId(Uint32.valueOf(2258)));
318 caseBuilder.setMultipartRequestGroup(builder.build());
319 return caseBuilder.build();
322 private static MultipartRequestGroupCase decodeRequestGroup(final ByteBuf output) {
323 MultipartRequestGroupCaseBuilder caseBuilder = new MultipartRequestGroupCaseBuilder();
324 MultipartRequestGroupBuilder builder = new MultipartRequestGroupBuilder();
325 builder.setGroupId(new GroupId(Uint32.fromIntBits(output.readInt())));
326 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_GROUP_BODY);
327 caseBuilder.setMultipartRequestGroup(builder.build());
328 return caseBuilder.build();
332 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO.
335 public void testMultipartRequestMeterMessageFactory() throws Exception {
336 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
337 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
338 builder.setType(MultipartType.forValue(9));
339 builder.setFlags(new MultipartRequestFlags(true));
340 builder.setMultipartRequestBody(createRequestMeter());
341 MultipartRequestInput message = builder.build();
343 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
344 multipartFactory.serialize(message, out);
346 BufferHelper.checkHeaderV13(out, (byte) 18, 24);
347 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
348 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
349 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
350 Assert.assertEquals("Wrong meterBody", message.getMultipartRequestBody(), decodeRequestMeter(out));
353 private static MultipartRequestMeterCase createRequestMeter() {
354 MultipartRequestMeterCaseBuilder caseBuilder = new MultipartRequestMeterCaseBuilder();
355 MultipartRequestMeterBuilder builder = new MultipartRequestMeterBuilder();
356 builder.setMeterId(new MeterId(Uint32.valueOf(1121)));
357 caseBuilder.setMultipartRequestMeter(builder.build());
358 return caseBuilder.build();
361 private static MultipartRequestMeterCase decodeRequestMeter(final ByteBuf output) {
362 MultipartRequestMeterCaseBuilder caseBuilder = new MultipartRequestMeterCaseBuilder();
363 MultipartRequestMeterBuilder builder = new MultipartRequestMeterBuilder();
364 builder.setMeterId(new MeterId(Uint32.fromIntBits(output.readInt())));
365 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_METER_BODY);
366 caseBuilder.setMultipartRequestMeter(builder.build());
367 return caseBuilder.build();
371 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO.
374 public void testMultipartRequestMeterConfigMessageFactory() throws Exception {
375 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
376 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
377 builder.setType(MultipartType.forValue(10));
378 builder.setFlags(new MultipartRequestFlags(true));
379 builder.setMultipartRequestBody(createRequestMeterConfig());
380 MultipartRequestInput message = builder.build();
382 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
383 multipartFactory.serialize(message, out);
385 BufferHelper.checkHeaderV13(out, (byte) 18, 24);
386 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
387 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
388 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
389 Assert.assertEquals("Wrong meterConfigBody", message.getMultipartRequestBody(), decodeRequestMeterConfig(out));
392 private static MultipartRequestMeterConfigCase createRequestMeterConfig() {
393 MultipartRequestMeterConfigCaseBuilder caseBuilder = new MultipartRequestMeterConfigCaseBuilder();
394 MultipartRequestMeterConfigBuilder builder = new MultipartRequestMeterConfigBuilder();
395 builder.setMeterId(new MeterId(Uint32.valueOf(1133)));
396 caseBuilder.setMultipartRequestMeterConfig(builder.build());
397 return caseBuilder.build();
400 private static MultipartRequestMeterConfigCase decodeRequestMeterConfig(final ByteBuf output) {
401 MultipartRequestMeterConfigCaseBuilder caseBuilder = new MultipartRequestMeterConfigCaseBuilder();
402 MultipartRequestMeterConfigBuilder builder = new MultipartRequestMeterConfigBuilder();
403 builder.setMeterId(new MeterId(Uint32.fromIntBits(output.readInt())));
404 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_METER_CONFIG_BODY);
405 caseBuilder.setMultipartRequestMeterConfig(builder.build());
406 return caseBuilder.build();
410 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO.
413 public void testMultipartRequestDescMessageFactory() throws Exception {
414 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
415 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
416 builder.setType(MultipartType.forValue(0));
417 builder.setFlags(new MultipartRequestFlags(true));
418 builder.setMultipartRequestBody(createRequestDesc());
419 MultipartRequestInput message = builder.build();
421 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
422 multipartFactory.serialize(message, out);
424 BufferHelper.checkHeaderV13(out, (byte) 18, 16);
425 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readUnsignedShort());
426 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
429 private static MultipartRequestBody createRequestDesc() {
430 MultipartRequestDescCaseBuilder caseBuilder = new MultipartRequestDescCaseBuilder();
431 MultipartRequestDescBuilder builder = new MultipartRequestDescBuilder();
432 caseBuilder.setMultipartRequestDesc(builder.build());
433 return caseBuilder.build();