1 /* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */
\r
2 package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
\r
4 import io.netty.buffer.ByteBuf;
\r
5 import io.netty.buffer.UnpooledByteBufAllocator;
\r
7 import java.math.BigInteger;
\r
8 import java.util.ArrayList;
\r
9 import java.util.List;
\r
11 import junit.framework.Assert;
\r
13 import org.junit.Test;
\r
14 import org.opendaylight.openflowjava.protocol.impl.deserialization.factories.HelloMessageFactoryTest;
\r
15 import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper;
\r
16 import org.opendaylight.openflowjava.protocol.impl.util.EncodeConstants;
\r
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupId;
\r
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterId;
\r
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartRequestFlags;
\r
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
\r
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.TableConfig;
\r
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInput;
\r
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInputBuilder;
\r
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.MultipartRequestBody;
\r
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestAggregate;
\r
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestAggregateBuilder;
\r
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestDescBuilder;
\r
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestExperimenter;
\r
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestExperimenterBuilder;
\r
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestFlow;
\r
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestFlowBuilder;
\r
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroup;
\r
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroupBuilder;
\r
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeter;
\r
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterBuilder;
\r
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterConfig;
\r
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterConfigBuilder;
\r
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestPortStats;
\r
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestPortStatsBuilder;
\r
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestQueue;
\r
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestQueueBuilder;
\r
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestTableFeatures;
\r
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestTableFeaturesBuilder;
\r
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.table.features.TableFeatures;
\r
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.table.features.TableFeaturesBuilder;
\r
48 * @author timotej.kubas
\r
49 * @author michal.polkorab
\r
51 public class MultipartRequestInputFactoryTest {
\r
52 private static final byte PADDING_IN_MULTIPART_REQUEST_MESSAGE = 4;
\r
56 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
\r
59 public void testMultipartRequestInputFactory() throws Exception {
\r
60 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
\r
61 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
\r
62 builder.setType(MultipartType.forValue(1));
\r
63 builder.setFlags(new MultipartRequestFlags(true));
\r
64 builder.setMultipartRequestBody(createRequestFlow());
\r
65 MultipartRequestInput message = builder.build();
\r
67 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
\r
68 MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();
\r
69 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
\r
71 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
\r
72 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
\r
73 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
\r
74 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
\r
75 Assert.assertEquals("Wrong flow", message.getMultipartRequestBody(), decodeRequestFlow(out));
\r
78 private static MultipartRequestFlow createRequestFlow() {
\r
79 MultipartRequestFlowBuilder builder = new MultipartRequestFlowBuilder();
\r
80 builder.setTableId((short) 8);
\r
81 builder.setOutPort(85L);
\r
82 builder.setOutGroup(95L);
\r
83 byte[] cookie = new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};
\r
84 builder.setCookie(new BigInteger(cookie));
\r
85 byte[] cookieMask = new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};
\r
86 builder.setCookieMask(new BigInteger(cookieMask));
\r
87 MultipartRequestFlow flow = builder.build();
\r
92 private static MultipartRequestFlow decodeRequestFlow(ByteBuf output) {
\r
93 final byte PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_01 = 3;
\r
94 final byte PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_02 = 4;
\r
95 MultipartRequestFlowBuilder builder = new MultipartRequestFlowBuilder();
\r
96 builder.setTableId(output.readUnsignedByte());
\r
97 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_01);
\r
98 builder.setOutPort(output.readUnsignedInt());
\r
99 builder.setOutGroup(output.readUnsignedInt());
\r
100 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_02);
\r
101 byte[] cookie = new byte[Long.SIZE/Byte.SIZE];
\r
102 output.readBytes(cookie);
\r
103 builder.setCookie(new BigInteger(cookie));
\r
104 byte[] cookieMask = new byte[Long.SIZE/Byte.SIZE];
\r
105 output.readBytes(cookieMask);
\r
106 builder.setCookieMask(new BigInteger(cookieMask));
\r
107 MultipartRequestFlow flow = builder.build();
\r
112 * @throws Exception
\r
113 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
\r
116 public void testMultipartRequestInputAggregateBodyFactory() throws Exception {
\r
117 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
\r
118 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
\r
119 builder.setType(MultipartType.forValue(2));
\r
120 builder.setFlags(new MultipartRequestFlags(true));
\r
121 builder.setMultipartRequestBody(createRequestAggregate());
\r
122 MultipartRequestInput message = builder.build();
\r
124 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
\r
125 MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();
\r
126 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
\r
128 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
\r
129 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
\r
130 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
\r
131 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
\r
132 Assert.assertEquals("Wrong aggregate", message.getMultipartRequestBody(), decodeRequestAggregate(out));
\r
135 private static MultipartRequestFlags decodeMultipartRequestFlags(short input){
\r
136 final Boolean _oFPMPFREQMORE = (input & (1 << 0)) > 0;
\r
137 return new MultipartRequestFlags(_oFPMPFREQMORE);
\r
141 private static MultipartRequestAggregate createRequestAggregate() {
\r
142 MultipartRequestAggregateBuilder builder = new MultipartRequestAggregateBuilder();
\r
143 builder.setTableId((short) 8);
\r
144 builder.setOutPort(85L);
\r
145 builder.setOutGroup(95L);
\r
146 byte[] cookie = new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};
\r
147 builder.setCookie(new BigInteger(cookie));
\r
148 byte[] cookieMask = new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};
\r
149 builder.setCookieMask(new BigInteger(cookieMask));
\r
150 MultipartRequestAggregate aggregate = builder.build();
\r
155 private static MultipartRequestAggregate decodeRequestAggregate(ByteBuf output) {
\r
156 final byte PADDING_IN_MULTIPART_REQUEST_AGGREGATE_BODY_01 = 3;
\r
157 final byte PADDING_IN_MULTIPART_REQUEST_AGGREGATE_BODY_02 = 4;
\r
158 MultipartRequestAggregateBuilder builder = new MultipartRequestAggregateBuilder();
\r
159 builder.setTableId(output.readUnsignedByte());
\r
160 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_AGGREGATE_BODY_01);
\r
161 builder.setOutPort(output.readUnsignedInt());
\r
162 builder.setOutGroup(output.readUnsignedInt());
\r
163 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_AGGREGATE_BODY_02);
\r
164 byte[] cookie = new byte[Long.SIZE/Byte.SIZE];
\r
165 output.readBytes(cookie);
\r
166 builder.setCookie(new BigInteger(cookie));
\r
167 byte[] cookieMask = new byte[Long.SIZE/Byte.SIZE];
\r
168 output.readBytes(cookieMask);
\r
169 builder.setCookieMask(new BigInteger(cookieMask));
\r
170 MultipartRequestAggregate flow = builder.build();
\r
175 * @throws Exception
\r
176 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
\r
179 public void testMultipartRequestInputTableFactory() throws Exception {
\r
180 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
\r
181 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
\r
182 builder.setType(MultipartType.forValue(3));
\r
183 builder.setFlags(new MultipartRequestFlags(true));
\r
184 //multipart request for table does not have body
\r
185 MultipartRequestInput message = builder.build();
\r
187 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
\r
188 MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();
\r
189 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
\r
191 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
\r
192 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
\r
193 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
\r
194 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
\r
198 * @throws Exception
\r
199 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
\r
202 public void testMultipartRequestPortStatsMessageFactory() throws Exception {
\r
203 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
\r
204 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
\r
205 builder.setType(MultipartType.forValue(4));
\r
206 builder.setFlags(new MultipartRequestFlags(true));
\r
207 builder.setMultipartRequestBody(createRequestPortStats());
\r
208 MultipartRequestInput message = builder.build();
\r
210 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
\r
211 MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();
\r
212 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
\r
214 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
\r
215 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
\r
216 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
\r
217 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
\r
218 Assert.assertEquals("Wrong portStatsBody", message.getMultipartRequestBody(), decodeRequestPortStats(out));
\r
221 private static MultipartRequestPortStats createRequestPortStats() {
\r
222 MultipartRequestPortStatsBuilder builder = new MultipartRequestPortStatsBuilder();
\r
223 builder.setPortNo(2251L);
\r
224 MultipartRequestPortStats portStats = builder.build();
\r
228 private static MultipartRequestPortStats decodeRequestPortStats(ByteBuf output) {
\r
229 final byte PADDING_IN_MULTIPART_REQUEST_PORTSTATS_BODY = 4;
\r
230 MultipartRequestPortStatsBuilder builder = new MultipartRequestPortStatsBuilder();
\r
231 builder.setPortNo(output.readUnsignedInt());
\r
232 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_PORTSTATS_BODY);
\r
233 MultipartRequestPortStats portRequest = builder.build();
\r
234 return portRequest;
\r
238 * @throws Exception
\r
239 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
\r
242 public void testMultipartRequestQueueMessageFactory() throws Exception {
\r
243 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
\r
244 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
\r
245 builder.setType(MultipartType.forValue(5));
\r
246 builder.setFlags(new MultipartRequestFlags(true));
\r
247 builder.setMultipartRequestBody(createRequestQueue());
\r
248 MultipartRequestInput message = builder.build();
\r
250 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
\r
251 MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();
\r
252 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
\r
254 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
\r
255 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
\r
256 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
\r
257 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
\r
258 Assert.assertEquals("Wrong queueBody", message.getMultipartRequestBody(), decodeRequestQueue(out));
\r
261 private static MultipartRequestQueue createRequestQueue() {
\r
262 MultipartRequestQueueBuilder builder = new MultipartRequestQueueBuilder();
\r
263 builder.setPortNo(2256L);
\r
264 builder.setQueueId(2211L);
\r
265 MultipartRequestQueue queue = builder.build();
\r
269 private static MultipartRequestQueue decodeRequestQueue(ByteBuf output) {
\r
270 MultipartRequestQueueBuilder builder = new MultipartRequestQueueBuilder();
\r
271 builder.setPortNo(output.readUnsignedInt());
\r
272 builder.setQueueId(output.readUnsignedInt());
\r
273 MultipartRequestQueue queue = builder.build();
\r
278 * @throws Exception
\r
279 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
\r
282 public void testMultipartRequestGroupMessageFactory() throws Exception {
\r
283 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
\r
284 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
\r
285 builder.setType(MultipartType.forValue(6));
\r
286 builder.setFlags(new MultipartRequestFlags(true));
\r
287 builder.setMultipartRequestBody(createRequestGroup());
\r
288 MultipartRequestInput message = builder.build();
\r
290 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
\r
291 MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();
\r
292 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
\r
294 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
\r
295 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
\r
296 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
\r
297 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
\r
298 Assert.assertEquals("Wrong groupBody", message.getMultipartRequestBody(), decodeRequestGroup(out));
\r
301 private static MultipartRequestGroup createRequestGroup() {
\r
302 MultipartRequestGroupBuilder builder = new MultipartRequestGroupBuilder();
\r
303 builder.setGroupId(new GroupId(2258L));
\r
304 MultipartRequestGroup group = builder.build();
\r
308 private static MultipartRequestGroup decodeRequestGroup(ByteBuf output) {
\r
309 final byte PADDING_IN_MULTIPART_REQUEST_GROUP_BODY = 4;
\r
310 MultipartRequestGroupBuilder builder = new MultipartRequestGroupBuilder();
\r
311 builder.setGroupId(new GroupId(output.readUnsignedInt()));
\r
312 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_GROUP_BODY);
\r
313 MultipartRequestGroup group = builder.build();
\r
318 * @throws Exception
\r
319 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
\r
322 public void testMultipartRequestMeterMessageFactory() throws Exception {
\r
323 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
\r
324 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
\r
325 builder.setType(MultipartType.forValue(9));
\r
326 builder.setFlags(new MultipartRequestFlags(true));
\r
327 builder.setMultipartRequestBody(createRequestMeter());
\r
328 MultipartRequestInput message = builder.build();
\r
330 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
\r
331 MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();
\r
332 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
\r
334 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
\r
335 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
\r
336 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
\r
337 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
\r
338 Assert.assertEquals("Wrong meterBody", message.getMultipartRequestBody(), decodeRequestMeter(out));
\r
341 private static MultipartRequestMeter createRequestMeter() {
\r
342 MultipartRequestMeterBuilder builder = new MultipartRequestMeterBuilder();
\r
343 builder.setMeterId(new MeterId(1121L));
\r
344 MultipartRequestMeter meter = builder.build();
\r
348 private static MultipartRequestMeter decodeRequestMeter(ByteBuf output) {
\r
349 final byte PADDING_IN_MULTIPART_REQUEST_METER_BODY = 4;
\r
350 MultipartRequestMeterBuilder builder = new MultipartRequestMeterBuilder();
\r
351 builder.setMeterId(new MeterId(output.readUnsignedInt()));
\r
352 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_METER_BODY);
\r
353 MultipartRequestMeter meter = builder.build();
\r
358 * @throws Exception
\r
359 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
\r
362 public void testMultipartRequestMeterConfigMessageFactory() throws Exception {
\r
363 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
\r
364 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
\r
365 builder.setType(MultipartType.forValue(10));
\r
366 builder.setFlags(new MultipartRequestFlags(true));
\r
367 builder.setMultipartRequestBody(createRequestMeterConfig());
\r
368 MultipartRequestInput message = builder.build();
\r
370 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
\r
371 MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();
\r
372 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
\r
374 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
\r
375 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
\r
376 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
\r
377 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
\r
378 Assert.assertEquals("Wrong meterConfigBody", message.getMultipartRequestBody(), decodeRequestMeterConfig(out));
\r
381 private static MultipartRequestMeterConfig createRequestMeterConfig() {
\r
382 MultipartRequestMeterConfigBuilder builder = new MultipartRequestMeterConfigBuilder();
\r
383 builder.setMeterId(new MeterId(1133L));
\r
384 MultipartRequestMeterConfig meterConfig = builder.build();
\r
385 return meterConfig;
\r
388 private static MultipartRequestMeterConfig decodeRequestMeterConfig(ByteBuf output) {
\r
389 final byte PADDING_IN_MULTIPART_REQUEST_METER_CONFIG_BODY = 4;
\r
390 MultipartRequestMeterConfigBuilder builder = new MultipartRequestMeterConfigBuilder();
\r
391 builder.setMeterId(new MeterId(output.readUnsignedInt()));
\r
392 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_METER_CONFIG_BODY);
\r
393 MultipartRequestMeterConfig meterConfig = builder.build();
\r
394 return meterConfig;
\r
398 * @throws Exception
\r
399 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
\r
402 public void testMultipartRequestExperimenterMessageFactory() throws Exception {
\r
403 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
\r
404 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
\r
405 builder.setType(MultipartType.forValue(0xffff));
\r
406 builder.setFlags(new MultipartRequestFlags(true));
\r
407 builder.setMultipartRequestBody(createRequestExperimenter());
\r
408 MultipartRequestInput message = builder.build();
\r
410 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
\r
411 MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();
\r
412 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
\r
414 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
\r
415 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readUnsignedShort());
\r
416 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
\r
417 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
\r
418 Assert.assertEquals("Wrong experimenterBody", message.getMultipartRequestBody(), decodeRequestExperimenter(out));
\r
421 private static MultipartRequestExperimenter createRequestExperimenter() {
\r
422 MultipartRequestExperimenterBuilder builder = new MultipartRequestExperimenterBuilder();
\r
423 builder.setExperimenter(1133L);
\r
424 builder.setExpType(1135L);
\r
425 MultipartRequestExperimenter experimenter = builder.build();
\r
426 return experimenter;
\r
429 private static MultipartRequestExperimenter decodeRequestExperimenter(ByteBuf output) {
\r
430 MultipartRequestExperimenterBuilder builder = new MultipartRequestExperimenterBuilder();
\r
431 builder.setExperimenter(output.readUnsignedInt());
\r
432 builder.setExpType(output.readUnsignedInt());
\r
433 MultipartRequestExperimenter experimenter = builder.build();
\r
434 return experimenter;
\r
438 * @throws Exception
\r
439 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
\r
442 public void testMultipartRequestDescMessageFactory() throws Exception {
\r
443 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
\r
444 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
\r
445 builder.setType(MultipartType.forValue(0));
\r
446 builder.setFlags(new MultipartRequestFlags(true));
\r
447 builder.setMultipartRequestBody(createRequestDesc());
\r
448 MultipartRequestInput message = builder.build();
\r
450 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
\r
451 MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();
\r
452 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
\r
454 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
\r
455 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readUnsignedShort());
\r
456 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
\r
459 private static MultipartRequestBody createRequestDesc() {
\r
460 MultipartRequestDescBuilder builder = new MultipartRequestDescBuilder();
\r
461 return builder.build();
\r
465 * @throws Exception
\r
466 * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
\r
469 public void testMultipartRequestTableFeaturesMessageFactory() throws Exception {
\r
470 MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
\r
471 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
\r
472 builder.setType(MultipartType.forValue(12));
\r
473 builder.setFlags(new MultipartRequestFlags(true));
\r
474 builder.setMultipartRequestBody(createRequestTableFeatures());
\r
475 MultipartRequestInput message = builder.build();
\r
477 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
\r
478 MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();
\r
479 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
\r
481 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
\r
482 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readUnsignedShort());
\r
483 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
\r
484 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
\r
486 MultipartRequestTableFeatures messageTableFeatures = (MultipartRequestTableFeatures) message.getMultipartRequestBody();
\r
487 Assert.assertEquals("Wrong tableFeaturesBody", messageTableFeatures.getTableFeatures(), decodeRequestTableFeatures(out).getTableFeatures());
\r
490 private static MultipartRequestTableFeatures createRequestTableFeatures() {
\r
491 MultipartRequestTableFeaturesBuilder builder = new MultipartRequestTableFeaturesBuilder();
\r
492 List<TableFeatures> tableFeaturesList = new ArrayList<>();
\r
493 TableFeaturesBuilder tableFeaturesBuilder = new TableFeaturesBuilder();
\r
494 tableFeaturesBuilder.setTableId((short) 8);
\r
495 tableFeaturesBuilder.setName("AAAABBBBCCCCDDDDEEEEFFFFGGGG");
\r
496 tableFeaturesBuilder.setMetadataMatch(new BigInteger(new byte[] {0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}));
\r
497 tableFeaturesBuilder.setMetadataWrite(new BigInteger(new byte[] {0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}));
\r
498 tableFeaturesBuilder.setConfig(new TableConfig(true));
\r
499 tableFeaturesBuilder.setMaxEntries(65L);
\r
500 TableFeatures tableFeature = tableFeaturesBuilder.build();
\r
501 tableFeaturesList.add(tableFeature);
\r
502 builder.setTableFeatures(tableFeaturesList);
\r
503 MultipartRequestTableFeatures tableFeaturesRequest = builder.build();
\r
504 return tableFeaturesRequest;
\r
507 private static MultipartRequestTableFeatures decodeRequestTableFeatures(ByteBuf output) {
\r
508 final byte PADDING_IN_MULTIPART_REQUEST_TABLE_FEATURES_BODY = 5;
\r
509 final byte OFP_MAX_TABLE_NAME_LEN = 32;
\r
510 MultipartRequestTableFeaturesBuilder builder = new MultipartRequestTableFeaturesBuilder();
\r
511 List<TableFeatures> tableFeaturesList = new ArrayList<>();
\r
512 TableFeaturesBuilder tableFeaturesBuilder = new TableFeaturesBuilder();
\r
513 tableFeaturesBuilder.setTableId(output.readUnsignedByte());
\r
514 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_TABLE_FEATURES_BODY);
\r
515 byte[] tableNameBytes = new byte[OFP_MAX_TABLE_NAME_LEN];
\r
516 output.readBytes(tableNameBytes);
\r
517 String tableName = new String(tableNameBytes);
\r
518 tableFeaturesBuilder.setName(tableName.trim());
\r
519 byte[] metadataMatch = new byte[Long.SIZE/Byte.SIZE];
\r
520 output.readBytes(metadataMatch);
\r
521 tableFeaturesBuilder.setMetadataMatch(new BigInteger(metadataMatch));
\r
522 byte[] metadataWrite = new byte[Long.SIZE/Byte.SIZE];
\r
523 output.readBytes(metadataWrite);
\r
524 tableFeaturesBuilder.setMetadataWrite(new BigInteger(metadataWrite));
\r
525 tableFeaturesBuilder.setConfig(decodeTableConfig(output.readInt()));
\r
526 tableFeaturesBuilder.setMaxEntries(output.readUnsignedInt());
\r
527 TableFeatures tableFeature = tableFeaturesBuilder.build();
\r
528 tableFeaturesList.add(tableFeature);
\r
529 builder.setTableFeatures(tableFeaturesList);
\r
530 MultipartRequestTableFeatures tableFeaturesRequest = builder.build();
\r
531 return tableFeaturesRequest;
\r
534 private static TableConfig decodeTableConfig(int input) {
\r
535 final Boolean _oFPTCDEPRECATEDMASK = (input & (1 << 3)) > 0;
\r
536 return new TableConfig(_oFPTCDEPRECATEDMASK);
\r