Update MRI upstreams for Phosphorus
[openflowplugin.git] / openflowjava / openflow-protocol-impl / src / test / java / org / opendaylight / openflowjava / protocol / impl / serialization / factories / MultipartRequestInputFactoryTest.java
1 /*
2  * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.
3  *
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
7  */
8 package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
9
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;
54
55 /**
56  * Unit tests for MultipartRequestInputFactory.
57  *
58  * @author timotej.kubas
59  * @author michal.polkorab
60  */
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;
70
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;
75
76     /**
77      * Initializes serializer registry and stores correct factory in field.
78      */
79     @Before
80     public void startUp() {
81         registry = new SerializerRegistryImpl();
82         registry.init();
83         multipartFactory = registry.getSerializer(
84                 new MessageTypeKey<>(EncodeConstants.OF_VERSION_1_3, MultipartRequestInput.class));
85     }
86
87     /**
88      * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO.
89      */
90     @Test
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();
98
99         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
100         multipartFactory.serialize(message, out);
101
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));
107     }
108
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());
118         //TODO match field
119         return caseBuilder.build();
120     }
121
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();
134     }
135
136     /**
137      * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO.
138      */
139     @Test
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();
147
148         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
149         multipartFactory.serialize(message, out);
150
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));
156     }
157
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);
162     }
163
164
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());
174         // TODO match field
175         return caseBuilder.build();
176     }
177
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();
190     }
191
192     /**
193      * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO.
194      */
195     @Test
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();
203
204         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
205         multipartFactory.serialize(message, out);
206
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);
211     }
212
213     /**
214      * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO.
215      */
216     @Test
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();
224
225         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
226         multipartFactory.serialize(message, out);
227
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));
233     }
234
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();
241     }
242
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();
250     }
251
252     /**
253      * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO.
254      */
255     @Test
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();
263
264         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
265         multipartFactory.serialize(message, out);
266
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));
272     }
273
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();
281     }
282
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();
290     }
291
292     /**
293      * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO.
294      */
295     @Test
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();
303
304         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
305         multipartFactory.serialize(message, out);
306
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));
312     }
313
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();
320     }
321
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();
329     }
330
331     /**
332      * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO.
333      */
334     @Test
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();
342
343         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
344         multipartFactory.serialize(message, out);
345
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));
351     }
352
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();
359     }
360
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();
368     }
369
370     /**
371      * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO.
372      */
373     @Test
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();
381
382         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
383         multipartFactory.serialize(message, out);
384
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));
390     }
391
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();
398     }
399
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();
407     }
408
409     /**
410      * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO.
411      */
412     @Test
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();
420
421         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
422         multipartFactory.serialize(message, out);
423
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()));
427     }
428
429     private static MultipartRequestBody createRequestDesc() {
430         MultipartRequestDescCaseBuilder caseBuilder = new MultipartRequestDescCaseBuilder();
431         MultipartRequestDescBuilder builder = new MultipartRequestDescBuilder();
432         caseBuilder.setMultipartRequestDesc(builder.build());
433         return caseBuilder.build();
434     }
435 }