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.Test;
18 import org.opendaylight.openflowjava.protocol.impl.deserialization.factories.HelloMessageFactoryTest;
19 import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper;
20 import org.opendaylight.openflowjava.protocol.impl.util.EncodeConstants;
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.MultipartRequestExperimenterCase;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestExperimenterCaseBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestFlowCase;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestFlowCaseBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroupCase;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroupCaseBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterCase;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterCaseBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterConfigCase;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterConfigCaseBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestPortStatsCase;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestPortStatsCaseBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestQueueCase;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestQueueCaseBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.aggregate._case.MultipartRequestAggregateBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.desc._case.MultipartRequestDescBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.experimenter._case.MultipartRequestExperimenterBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.flow._case.MultipartRequestFlowBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.group._case.MultipartRequestGroupBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.meter._case.MultipartRequestMeterBuilder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.meter.config._case.MultipartRequestMeterConfigBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.port.stats._case.MultipartRequestPortStatsBuilder;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.queue._case.MultipartRequestQueueBuilder;
56 * @author timotej.kubas
57 * @author michal.polkorab
59 public class MultipartRequestInputFactoryTest {
60 /** padding in MultipartRequest message */
61 public static final byte PADDING_IN_MULTIPART_REQUEST_MESSAGE = 4;
65 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
68 public void testMultipartRequestInputFactory() throws Exception {
69 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
70 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
71 builder.setType(MultipartType.forValue(1));
72 builder.setFlags(new MultipartRequestFlags(true));
73 builder.setMultipartRequestBody(createRequestFlow());
74 MultipartRequestInput message = builder.build();
76 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
77 MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();
78 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
80 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
81 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
82 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
83 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
84 Assert.assertEquals("Wrong flow", message.getMultipartRequestBody(), decodeRequestFlow(out));
87 private static MultipartRequestFlowCase createRequestFlow() {
88 MultipartRequestFlowCaseBuilder caseBuilder = new MultipartRequestFlowCaseBuilder();
89 MultipartRequestFlowBuilder builder = new MultipartRequestFlowBuilder();
90 builder.setTableId((short) 8);
91 builder.setOutPort(85L);
92 builder.setOutGroup(95L);
93 byte[] cookie = new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};
94 builder.setCookie(new BigInteger(1, cookie));
95 byte[] cookieMask = new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};
96 builder.setCookieMask(new BigInteger(1, cookieMask));
97 caseBuilder.setMultipartRequestFlow(builder.build());
99 return caseBuilder.build();
102 private static MultipartRequestFlowCase decodeRequestFlow(ByteBuf output) {
103 final byte PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_01 = 3;
104 final byte PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_02 = 4;
105 MultipartRequestFlowCaseBuilder caseBuilder = new MultipartRequestFlowCaseBuilder();
106 MultipartRequestFlowBuilder builder = new MultipartRequestFlowBuilder();
107 builder.setTableId(output.readUnsignedByte());
108 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_01);
109 builder.setOutPort(output.readUnsignedInt());
110 builder.setOutGroup(output.readUnsignedInt());
111 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_02);
112 byte[] cookie = new byte[EncodeConstants.SIZE_OF_LONG_IN_BYTES];
113 output.readBytes(cookie);
114 builder.setCookie(new BigInteger(1, cookie));
115 byte[] cookieMask = new byte[EncodeConstants.SIZE_OF_LONG_IN_BYTES];
116 output.readBytes(cookieMask);
117 builder.setCookieMask(new BigInteger(1, cookieMask));
118 caseBuilder.setMultipartRequestFlow(builder.build());
119 return caseBuilder.build();
124 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
127 public void testMultipartRequestInputAggregateBodyFactory() throws Exception {
128 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
129 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
130 builder.setType(MultipartType.forValue(2));
131 builder.setFlags(new MultipartRequestFlags(true));
132 builder.setMultipartRequestBody(createRequestAggregate());
133 MultipartRequestInput message = builder.build();
135 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
136 MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();
137 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
139 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
140 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
141 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
142 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
143 Assert.assertEquals("Wrong aggregate", message.getMultipartRequestBody(), decodeRequestAggregate(out));
146 private static MultipartRequestFlags decodeMultipartRequestFlags(short input){
147 final Boolean _oFPMPFREQMORE = (input & (1 << 0)) > 0;
148 return new MultipartRequestFlags(_oFPMPFREQMORE);
152 private static MultipartRequestAggregateCase createRequestAggregate() {
153 MultipartRequestAggregateCaseBuilder caseBuilder = new MultipartRequestAggregateCaseBuilder();
154 MultipartRequestAggregateBuilder builder = new MultipartRequestAggregateBuilder();
155 builder.setTableId((short) 8);
156 builder.setOutPort(85L);
157 builder.setOutGroup(95L);
158 byte[] cookie = new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};
159 builder.setCookie(new BigInteger(1, cookie));
160 byte[] cookieMask = new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};
161 builder.setCookieMask(new BigInteger(1, cookieMask));
162 caseBuilder.setMultipartRequestAggregate(builder.build());
164 return caseBuilder.build();
167 private static MultipartRequestAggregateCase decodeRequestAggregate(ByteBuf output) {
168 final byte PADDING_IN_MULTIPART_REQUEST_AGGREGATE_BODY_01 = 3;
169 final byte PADDING_IN_MULTIPART_REQUEST_AGGREGATE_BODY_02 = 4;
170 MultipartRequestAggregateCaseBuilder caseBuilder = new MultipartRequestAggregateCaseBuilder();
171 MultipartRequestAggregateBuilder builder = new MultipartRequestAggregateBuilder();
172 builder.setTableId(output.readUnsignedByte());
173 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_AGGREGATE_BODY_01);
174 builder.setOutPort(output.readUnsignedInt());
175 builder.setOutGroup(output.readUnsignedInt());
176 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_AGGREGATE_BODY_02);
177 byte[] cookie = new byte[EncodeConstants.SIZE_OF_LONG_IN_BYTES];
178 output.readBytes(cookie);
179 builder.setCookie(new BigInteger(1, cookie));
180 byte[] cookieMask = new byte[EncodeConstants.SIZE_OF_LONG_IN_BYTES];
181 output.readBytes(cookieMask);
182 builder.setCookieMask(new BigInteger(1, cookieMask));
183 caseBuilder.setMultipartRequestAggregate(builder.build());
184 return caseBuilder.build();
189 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
192 public void testMultipartRequestInputTableFactory() throws Exception {
193 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
194 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
195 builder.setType(MultipartType.forValue(3));
196 builder.setFlags(new MultipartRequestFlags(true));
197 //multipart request for table does not have body
198 MultipartRequestInput message = builder.build();
200 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
201 MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();
202 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
204 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
205 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
206 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
207 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
212 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
215 public void testMultipartRequestPortStatsMessageFactory() throws Exception {
216 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
217 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
218 builder.setType(MultipartType.forValue(4));
219 builder.setFlags(new MultipartRequestFlags(true));
220 builder.setMultipartRequestBody(createRequestPortStats());
221 MultipartRequestInput message = builder.build();
223 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
224 MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();
225 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
227 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
228 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
229 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
230 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
231 Assert.assertEquals("Wrong portStatsBody", message.getMultipartRequestBody(), decodeRequestPortStats(out));
234 private static MultipartRequestPortStatsCase createRequestPortStats() {
235 MultipartRequestPortStatsCaseBuilder caseBuilder = new MultipartRequestPortStatsCaseBuilder();
236 MultipartRequestPortStatsBuilder builder = new MultipartRequestPortStatsBuilder();
237 builder.setPortNo(2251L);
238 caseBuilder.setMultipartRequestPortStats(builder.build());
239 return caseBuilder.build();
242 private static MultipartRequestPortStatsCase decodeRequestPortStats(ByteBuf output) {
243 final byte PADDING_IN_MULTIPART_REQUEST_PORTSTATS_BODY = 4;
244 MultipartRequestPortStatsCaseBuilder caseBuilder = new MultipartRequestPortStatsCaseBuilder();
245 MultipartRequestPortStatsBuilder builder = new MultipartRequestPortStatsBuilder();
246 builder.setPortNo(output.readUnsignedInt());
247 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_PORTSTATS_BODY);
248 caseBuilder.setMultipartRequestPortStats(builder.build());
249 return caseBuilder.build();
254 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
257 public void testMultipartRequestQueueMessageFactory() throws Exception {
258 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
259 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
260 builder.setType(MultipartType.forValue(5));
261 builder.setFlags(new MultipartRequestFlags(true));
262 builder.setMultipartRequestBody(createRequestQueue());
263 MultipartRequestInput message = builder.build();
265 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
266 MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();
267 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
269 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
270 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
271 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
272 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
273 Assert.assertEquals("Wrong queueBody", message.getMultipartRequestBody(), decodeRequestQueue(out));
276 private static MultipartRequestQueueCase createRequestQueue() {
277 MultipartRequestQueueCaseBuilder caseBuilder = new MultipartRequestQueueCaseBuilder();
278 MultipartRequestQueueBuilder builder = new MultipartRequestQueueBuilder();
279 builder.setPortNo(2256L);
280 builder.setQueueId(2211L);
281 caseBuilder.setMultipartRequestQueue(builder.build());
282 return caseBuilder.build();
285 private static MultipartRequestQueueCase decodeRequestQueue(ByteBuf output) {
286 MultipartRequestQueueCaseBuilder caseBuilder = new MultipartRequestQueueCaseBuilder();
287 MultipartRequestQueueBuilder builder = new MultipartRequestQueueBuilder();
288 builder.setPortNo(output.readUnsignedInt());
289 builder.setQueueId(output.readUnsignedInt());
290 caseBuilder.setMultipartRequestQueue(builder.build());
291 return caseBuilder.build();
296 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
299 public void testMultipartRequestGroupMessageFactory() throws Exception {
300 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
301 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
302 builder.setType(MultipartType.forValue(6));
303 builder.setFlags(new MultipartRequestFlags(true));
304 builder.setMultipartRequestBody(createRequestGroup());
305 MultipartRequestInput message = builder.build();
307 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
308 MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();
309 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
311 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
312 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
313 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
314 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
315 Assert.assertEquals("Wrong groupBody", message.getMultipartRequestBody(), decodeRequestGroup(out));
318 private static MultipartRequestGroupCase createRequestGroup() {
319 MultipartRequestGroupCaseBuilder caseBuilder = new MultipartRequestGroupCaseBuilder();
320 MultipartRequestGroupBuilder builder = new MultipartRequestGroupBuilder();
321 builder.setGroupId(new GroupId(2258L));
322 caseBuilder.setMultipartRequestGroup(builder.build());
323 return caseBuilder.build();
326 private static MultipartRequestGroupCase decodeRequestGroup(ByteBuf output) {
327 final byte PADDING_IN_MULTIPART_REQUEST_GROUP_BODY = 4;
328 MultipartRequestGroupCaseBuilder caseBuilder = new MultipartRequestGroupCaseBuilder();
329 MultipartRequestGroupBuilder builder = new MultipartRequestGroupBuilder();
330 builder.setGroupId(new GroupId(output.readUnsignedInt()));
331 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_GROUP_BODY);
332 caseBuilder.setMultipartRequestGroup(builder.build());
333 return caseBuilder.build();
338 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
341 public void testMultipartRequestMeterMessageFactory() throws Exception {
342 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
343 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
344 builder.setType(MultipartType.forValue(9));
345 builder.setFlags(new MultipartRequestFlags(true));
346 builder.setMultipartRequestBody(createRequestMeter());
347 MultipartRequestInput message = builder.build();
349 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
350 MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();
351 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
353 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
354 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
355 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
356 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
357 Assert.assertEquals("Wrong meterBody", message.getMultipartRequestBody(), decodeRequestMeter(out));
360 private static MultipartRequestMeterCase createRequestMeter() {
361 MultipartRequestMeterCaseBuilder caseBuilder = new MultipartRequestMeterCaseBuilder();
362 MultipartRequestMeterBuilder builder = new MultipartRequestMeterBuilder();
363 builder.setMeterId(new MeterId(1121L));
364 caseBuilder.setMultipartRequestMeter(builder.build());
365 return caseBuilder.build();
368 private static MultipartRequestMeterCase decodeRequestMeter(ByteBuf output) {
369 final byte PADDING_IN_MULTIPART_REQUEST_METER_BODY = 4;
370 MultipartRequestMeterCaseBuilder caseBuilder = new MultipartRequestMeterCaseBuilder();
371 MultipartRequestMeterBuilder builder = new MultipartRequestMeterBuilder();
372 builder.setMeterId(new MeterId(output.readUnsignedInt()));
373 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_METER_BODY);
374 caseBuilder.setMultipartRequestMeter(builder.build());
375 return caseBuilder.build();
380 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
383 public void testMultipartRequestMeterConfigMessageFactory() throws Exception {
384 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
385 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
386 builder.setType(MultipartType.forValue(10));
387 builder.setFlags(new MultipartRequestFlags(true));
388 builder.setMultipartRequestBody(createRequestMeterConfig());
389 MultipartRequestInput message = builder.build();
391 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
392 MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();
393 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
395 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
396 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
397 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
398 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
399 Assert.assertEquals("Wrong meterConfigBody", message.getMultipartRequestBody(), decodeRequestMeterConfig(out));
402 private static MultipartRequestMeterConfigCase createRequestMeterConfig() {
403 MultipartRequestMeterConfigCaseBuilder caseBuilder = new MultipartRequestMeterConfigCaseBuilder();
404 MultipartRequestMeterConfigBuilder builder = new MultipartRequestMeterConfigBuilder();
405 builder.setMeterId(new MeterId(1133L));
406 caseBuilder.setMultipartRequestMeterConfig(builder.build());
407 return caseBuilder.build();
410 private static MultipartRequestMeterConfigCase decodeRequestMeterConfig(ByteBuf output) {
411 final byte PADDING_IN_MULTIPART_REQUEST_METER_CONFIG_BODY = 4;
412 MultipartRequestMeterConfigCaseBuilder caseBuilder = new MultipartRequestMeterConfigCaseBuilder();
413 MultipartRequestMeterConfigBuilder builder = new MultipartRequestMeterConfigBuilder();
414 builder.setMeterId(new MeterId(output.readUnsignedInt()));
415 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_METER_CONFIG_BODY);
416 caseBuilder.setMultipartRequestMeterConfig(builder.build());
417 return caseBuilder.build();
422 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
425 public void testMultipartRequestExperimenterMessageFactory() throws Exception {
426 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
427 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
428 builder.setType(MultipartType.forValue(0xffff));
429 builder.setFlags(new MultipartRequestFlags(true));
430 builder.setMultipartRequestBody(createRequestExperimenter());
431 MultipartRequestInput message = builder.build();
433 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
434 MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();
435 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
437 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
438 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readUnsignedShort());
439 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
440 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
441 Assert.assertEquals("Wrong experimenterBody", message.getMultipartRequestBody(), decodeRequestExperimenter(out));
444 private static MultipartRequestExperimenterCase createRequestExperimenter() {
445 MultipartRequestExperimenterCaseBuilder caseBuilder = new MultipartRequestExperimenterCaseBuilder();
446 MultipartRequestExperimenterBuilder builder = new MultipartRequestExperimenterBuilder();
447 builder.setExperimenter(1133L);
448 builder.setExpType(1135L);
449 caseBuilder.setMultipartRequestExperimenter(builder.build());
450 return caseBuilder.build();
453 private static MultipartRequestExperimenterCase decodeRequestExperimenter(ByteBuf output) {
454 MultipartRequestExperimenterCaseBuilder caseBuilder = new MultipartRequestExperimenterCaseBuilder();
455 MultipartRequestExperimenterBuilder builder = new MultipartRequestExperimenterBuilder();
456 builder.setExperimenter(output.readUnsignedInt());
457 builder.setExpType(output.readUnsignedInt());
458 caseBuilder.setMultipartRequestExperimenter(builder.build());
459 return caseBuilder.build();
464 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
467 public void testMultipartRequestDescMessageFactory() throws Exception {
468 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
469 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
470 builder.setType(MultipartType.forValue(0));
471 builder.setFlags(new MultipartRequestFlags(true));
472 builder.setMultipartRequestBody(createRequestDesc());
473 MultipartRequestInput message = builder.build();
475 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
476 MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();
477 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
479 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
480 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readUnsignedShort());
481 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
484 private static MultipartRequestBody createRequestDesc() {
485 MultipartRequestDescCaseBuilder caseBuilder = new MultipartRequestDescCaseBuilder();
486 MultipartRequestDescBuilder builder = new MultipartRequestDescBuilder();
487 caseBuilder.setMultipartRequestDesc(builder.build());
488 return caseBuilder.build();