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.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartRequestFlags;
\r
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
\r
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.TableConfig;
\r
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestMessage;
\r
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestMessageBuilder;
\r
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestAggregate;
\r
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestAggregateBuilder;
\r
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestExperimenter;
\r
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestExperimenterBuilder;
\r
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestFlow;
\r
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestFlowBuilder;
\r
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroup;
\r
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroupBuilder;
\r
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeter;
\r
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterBuilder;
\r
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterConfig;
\r
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterConfigBuilder;
\r
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestPortStats;
\r
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestPortStatsBuilder;
\r
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestQueue;
\r
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestQueueBuilder;
\r
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestTableFeatures;
\r
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestTableFeaturesBuilder;
\r
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.table.features.TableFeatures;
\r
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.table.features.TableFeaturesBuilder;
\r
43 * @author timotej.kubas
\r
44 * @author michal.polkorab
\r
46 public class MultipartRequestMessageFactoryTest {
\r
47 private static final byte PADDING_IN_MULTIPART_REQUEST_MESSAGE = 4;
\r
51 * Testing of {@link MultipartRequestMessageFactory} for correct translation from POJO
\r
54 public void testMultipartRequestMessageFactory() throws Exception {
\r
55 MultipartRequestMessageBuilder builder = new MultipartRequestMessageBuilder();
\r
56 BufferHelper.setupHeader(builder);
\r
57 builder.setType(MultipartType.forValue(1));
\r
58 builder.setFlags(new MultipartRequestFlags(true));
\r
59 builder.setMultipartRequestBody(createRequestFlow());
\r
60 MultipartRequestMessage message = builder.build();
\r
62 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
\r
63 MultipartRequestMessageFactory factory = MultipartRequestMessageFactory.getInstance();
\r
64 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
\r
66 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
\r
67 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
\r
68 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
\r
69 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
\r
70 Assert.assertEquals("Wrong flow", message.getMultipartRequestBody(), decodeRequestFlow(out));
\r
73 private static MultipartRequestFlow createRequestFlow() {
\r
74 MultipartRequestFlowBuilder builder = new MultipartRequestFlowBuilder();
\r
75 builder.setTableId((short) 8);
\r
76 builder.setOutPort(85L);
\r
77 builder.setOutGroup(95L);
\r
78 byte[] cookie = new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};
\r
79 builder.setCookie(new BigInteger(cookie));
\r
80 byte[] cookieMask = new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};
\r
81 builder.setCookieMask(new BigInteger(cookieMask));
\r
82 MultipartRequestFlow flow = builder.build();
\r
87 private static MultipartRequestFlow decodeRequestFlow(ByteBuf output) {
\r
88 final byte PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_01 = 3;
\r
89 final byte PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_02 = 4;
\r
90 MultipartRequestFlowBuilder builder = new MultipartRequestFlowBuilder();
\r
91 builder.setTableId(output.readUnsignedByte());
\r
92 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_01);
\r
93 builder.setOutPort(output.readUnsignedInt());
\r
94 builder.setOutGroup(output.readUnsignedInt());
\r
95 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_02);
\r
96 byte[] cookie = new byte[Long.SIZE/Byte.SIZE];
\r
97 output.readBytes(cookie);
\r
98 builder.setCookie(new BigInteger(cookie));
\r
99 byte[] cookieMask = new byte[Long.SIZE/Byte.SIZE];
\r
100 output.readBytes(cookieMask);
\r
101 builder.setCookieMask(new BigInteger(cookieMask));
\r
102 MultipartRequestFlow flow = builder.build();
\r
107 * @throws Exception
\r
108 * Testing of {@link MultipartRequestMessageFactory} for correct translation from POJO
\r
111 public void testMultipartRequestMessageAggregateBodyFactory() throws Exception {
\r
112 MultipartRequestMessageBuilder builder = new MultipartRequestMessageBuilder();
\r
113 BufferHelper.setupHeader(builder);
\r
114 builder.setType(MultipartType.forValue(2));
\r
115 builder.setFlags(new MultipartRequestFlags(true));
\r
116 builder.setMultipartRequestBody(createRequestAggregate());
\r
117 MultipartRequestMessage message = builder.build();
\r
119 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
\r
120 MultipartRequestMessageFactory factory = MultipartRequestMessageFactory.getInstance();
\r
121 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
\r
123 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
\r
124 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
\r
125 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
\r
126 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
\r
127 Assert.assertEquals("Wrong aggregate", message.getMultipartRequestBody(), decodeRequestAggregate(out));
\r
130 private static MultipartRequestFlags decodeMultipartRequestFlags(short input){
\r
131 final Boolean _oFPMPFREQMORE = (input & (1 << 0)) > 0;
\r
132 return new MultipartRequestFlags(_oFPMPFREQMORE);
\r
136 private static MultipartRequestAggregate createRequestAggregate() {
\r
137 MultipartRequestAggregateBuilder builder = new MultipartRequestAggregateBuilder();
\r
138 builder.setTableId((short) 8);
\r
139 builder.setOutPort(85L);
\r
140 builder.setOutGroup(95L);
\r
141 byte[] cookie = new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};
\r
142 builder.setCookie(new BigInteger(cookie));
\r
143 byte[] cookieMask = new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};
\r
144 builder.setCookieMask(new BigInteger(cookieMask));
\r
145 MultipartRequestAggregate aggregate = builder.build();
\r
150 private static MultipartRequestAggregate decodeRequestAggregate(ByteBuf output) {
\r
151 final byte PADDING_IN_MULTIPART_REQUEST_AGGREGATE_BODY_01 = 3;
\r
152 final byte PADDING_IN_MULTIPART_REQUEST_AGGREGATE_BODY_02 = 4;
\r
153 MultipartRequestAggregateBuilder builder = new MultipartRequestAggregateBuilder();
\r
154 builder.setTableId(output.readUnsignedByte());
\r
155 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_AGGREGATE_BODY_01);
\r
156 builder.setOutPort(output.readUnsignedInt());
\r
157 builder.setOutGroup(output.readUnsignedInt());
\r
158 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_AGGREGATE_BODY_02);
\r
159 byte[] cookie = new byte[Long.SIZE/Byte.SIZE];
\r
160 output.readBytes(cookie);
\r
161 builder.setCookie(new BigInteger(cookie));
\r
162 byte[] cookieMask = new byte[Long.SIZE/Byte.SIZE];
\r
163 output.readBytes(cookieMask);
\r
164 builder.setCookieMask(new BigInteger(cookieMask));
\r
165 MultipartRequestAggregate flow = builder.build();
\r
170 * @throws Exception
\r
171 * Testing of {@link MultipartRequestMessageFactory} for correct translation from POJO
\r
174 public void testMultipartRequestMessageTableFactory() throws Exception {
\r
175 MultipartRequestMessageBuilder builder = new MultipartRequestMessageBuilder();
\r
176 BufferHelper.setupHeader(builder);
\r
177 builder.setType(MultipartType.forValue(3));
\r
178 builder.setFlags(new MultipartRequestFlags(true));
\r
179 //multipart request for table does not have body
\r
180 MultipartRequestMessage message = builder.build();
\r
182 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
\r
183 MultipartRequestMessageFactory factory = MultipartRequestMessageFactory.getInstance();
\r
184 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
\r
186 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
\r
187 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
\r
188 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
\r
189 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
\r
193 * @throws Exception
\r
194 * Testing of {@link MultipartRequestMessageFactory} for correct translation from POJO
\r
197 public void testMultipartRequestPortStatsMessageFactory() throws Exception {
\r
198 MultipartRequestMessageBuilder builder = new MultipartRequestMessageBuilder();
\r
199 BufferHelper.setupHeader(builder);
\r
200 builder.setType(MultipartType.forValue(4));
\r
201 builder.setFlags(new MultipartRequestFlags(true));
\r
202 builder.setMultipartRequestBody(createRequestPortStats());
\r
203 MultipartRequestMessage message = builder.build();
\r
205 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
\r
206 MultipartRequestMessageFactory factory = MultipartRequestMessageFactory.getInstance();
\r
207 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
\r
209 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
\r
210 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
\r
211 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
\r
212 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
\r
213 Assert.assertEquals("Wrong portStatsBody", message.getMultipartRequestBody(), decodeRequestPortStats(out));
\r
216 private static MultipartRequestPortStats createRequestPortStats() {
\r
217 MultipartRequestPortStatsBuilder builder = new MultipartRequestPortStatsBuilder();
\r
218 builder.setPortNo(2251L);
\r
219 MultipartRequestPortStats portStats = builder.build();
\r
223 private static MultipartRequestPortStats decodeRequestPortStats(ByteBuf output) {
\r
224 final byte PADDING_IN_MULTIPART_REQUEST_PORTSTATS_BODY = 4;
\r
225 MultipartRequestPortStatsBuilder builder = new MultipartRequestPortStatsBuilder();
\r
226 builder.setPortNo(output.readUnsignedInt());
\r
227 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_PORTSTATS_BODY);
\r
228 MultipartRequestPortStats portRequest = builder.build();
\r
229 return portRequest;
\r
233 * @throws Exception
\r
234 * Testing of {@link MultipartRequestMessageFactory} for correct translation from POJO
\r
237 public void testMultipartRequestQueueMessageFactory() throws Exception {
\r
238 MultipartRequestMessageBuilder builder = new MultipartRequestMessageBuilder();
\r
239 BufferHelper.setupHeader(builder);
\r
240 builder.setType(MultipartType.forValue(5));
\r
241 builder.setFlags(new MultipartRequestFlags(true));
\r
242 builder.setMultipartRequestBody(createRequestQueue());
\r
243 MultipartRequestMessage message = builder.build();
\r
245 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
\r
246 MultipartRequestMessageFactory factory = MultipartRequestMessageFactory.getInstance();
\r
247 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
\r
249 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
\r
250 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
\r
251 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
\r
252 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
\r
253 Assert.assertEquals("Wrong queueBody", message.getMultipartRequestBody(), decodeRequestQueue(out));
\r
256 private static MultipartRequestQueue createRequestQueue() {
\r
257 MultipartRequestQueueBuilder builder = new MultipartRequestQueueBuilder();
\r
258 builder.setPortNo(2256L);
\r
259 builder.setQueueId(2211L);
\r
260 MultipartRequestQueue queue = builder.build();
\r
264 private static MultipartRequestQueue decodeRequestQueue(ByteBuf output) {
\r
265 MultipartRequestQueueBuilder builder = new MultipartRequestQueueBuilder();
\r
266 builder.setPortNo(output.readUnsignedInt());
\r
267 builder.setQueueId(output.readUnsignedInt());
\r
268 MultipartRequestQueue queue = builder.build();
\r
273 * @throws Exception
\r
274 * Testing of {@link MultipartRequestMessageFactory} for correct translation from POJO
\r
277 public void testMultipartRequestGroupMessageFactory() throws Exception {
\r
278 MultipartRequestMessageBuilder builder = new MultipartRequestMessageBuilder();
\r
279 BufferHelper.setupHeader(builder);
\r
280 builder.setType(MultipartType.forValue(6));
\r
281 builder.setFlags(new MultipartRequestFlags(true));
\r
282 builder.setMultipartRequestBody(createRequestGroup());
\r
283 MultipartRequestMessage message = builder.build();
\r
285 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
\r
286 MultipartRequestMessageFactory factory = MultipartRequestMessageFactory.getInstance();
\r
287 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
\r
289 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
\r
290 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
\r
291 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
\r
292 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
\r
293 Assert.assertEquals("Wrong groupBody", message.getMultipartRequestBody(), decodeRequestGroup(out));
\r
296 private static MultipartRequestGroup createRequestGroup() {
\r
297 MultipartRequestGroupBuilder builder = new MultipartRequestGroupBuilder();
\r
298 builder.setGroupId(2258L);
\r
299 MultipartRequestGroup group = builder.build();
\r
303 private static MultipartRequestGroup decodeRequestGroup(ByteBuf output) {
\r
304 final byte PADDING_IN_MULTIPART_REQUEST_GROUP_BODY = 4;
\r
305 MultipartRequestGroupBuilder builder = new MultipartRequestGroupBuilder();
\r
306 builder.setGroupId(output.readUnsignedInt());
\r
307 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_GROUP_BODY);
\r
308 MultipartRequestGroup group = builder.build();
\r
313 * @throws Exception
\r
314 * Testing of {@link MultipartRequestMessageFactory} for correct translation from POJO
\r
317 public void testMultipartRequestMeterMessageFactory() throws Exception {
\r
318 MultipartRequestMessageBuilder builder = new MultipartRequestMessageBuilder();
\r
319 BufferHelper.setupHeader(builder);
\r
320 builder.setType(MultipartType.forValue(9));
\r
321 builder.setFlags(new MultipartRequestFlags(true));
\r
322 builder.setMultipartRequestBody(createRequestMeter());
\r
323 MultipartRequestMessage message = builder.build();
\r
325 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
\r
326 MultipartRequestMessageFactory factory = MultipartRequestMessageFactory.getInstance();
\r
327 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
\r
329 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
\r
330 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
\r
331 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
\r
332 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
\r
333 Assert.assertEquals("Wrong meterBody", message.getMultipartRequestBody(), decodeRequestMeter(out));
\r
336 private static MultipartRequestMeter createRequestMeter() {
\r
337 MultipartRequestMeterBuilder builder = new MultipartRequestMeterBuilder();
\r
338 builder.setMeterId(1121L);
\r
339 MultipartRequestMeter meter = builder.build();
\r
343 private static MultipartRequestMeter decodeRequestMeter(ByteBuf output) {
\r
344 final byte PADDING_IN_MULTIPART_REQUEST_METER_BODY = 4;
\r
345 MultipartRequestMeterBuilder builder = new MultipartRequestMeterBuilder();
\r
346 builder.setMeterId(output.readUnsignedInt());
\r
347 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_METER_BODY);
\r
348 MultipartRequestMeter meter = builder.build();
\r
353 * @throws Exception
\r
354 * Testing of {@link MultipartRequestMessageFactory} for correct translation from POJO
\r
357 public void testMultipartRequestMeterConfigMessageFactory() throws Exception {
\r
358 MultipartRequestMessageBuilder builder = new MultipartRequestMessageBuilder();
\r
359 BufferHelper.setupHeader(builder);
\r
360 builder.setType(MultipartType.forValue(10));
\r
361 builder.setFlags(new MultipartRequestFlags(true));
\r
362 builder.setMultipartRequestBody(createRequestMeterConfig());
\r
363 MultipartRequestMessage message = builder.build();
\r
365 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
\r
366 MultipartRequestMessageFactory factory = MultipartRequestMessageFactory.getInstance();
\r
367 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
\r
369 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
\r
370 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
\r
371 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
\r
372 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
\r
373 Assert.assertEquals("Wrong meterConfigBody", message.getMultipartRequestBody(), decodeRequestMeterConfig(out));
\r
376 private static MultipartRequestMeterConfig createRequestMeterConfig() {
\r
377 MultipartRequestMeterConfigBuilder builder = new MultipartRequestMeterConfigBuilder();
\r
378 builder.setMeterId(1133L);
\r
379 MultipartRequestMeterConfig meterConfig = builder.build();
\r
380 return meterConfig;
\r
383 private static MultipartRequestMeterConfig decodeRequestMeterConfig(ByteBuf output) {
\r
384 final byte PADDING_IN_MULTIPART_REQUEST_METER_CONFIG_BODY = 4;
\r
385 MultipartRequestMeterConfigBuilder builder = new MultipartRequestMeterConfigBuilder();
\r
386 builder.setMeterId(output.readUnsignedInt());
\r
387 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_METER_CONFIG_BODY);
\r
388 MultipartRequestMeterConfig meterConfig = builder.build();
\r
389 return meterConfig;
\r
393 * @throws Exception
\r
394 * Testing of {@link MultipartRequestMessageFactory} for correct translation from POJO
\r
398 public void testMultipartRequestExperimenterMessageFactory() throws Exception {
\r
399 MultipartRequestMessageBuilder builder = new MultipartRequestMessageBuilder();
\r
400 BufferHelper.setupHeader(builder);
\r
401 builder.setType(MultipartType.forValue(0xffff));
\r
402 builder.setFlags(new MultipartRequestFlags(true));
\r
403 builder.setMultipartRequestBody(createRequestExperimenter());
\r
404 MultipartRequestMessage message = builder.build();
\r
406 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
\r
407 MultipartRequestMessageFactory factory = MultipartRequestMessageFactory.getInstance();
\r
408 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
\r
410 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
\r
411 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readUnsignedShort());
\r
412 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
\r
413 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
\r
414 Assert.assertEquals("Wrong experimenterBody", message.getMultipartRequestBody(), decodeRequestExperimenter(out));
\r
417 private static MultipartRequestExperimenter createRequestExperimenter() {
\r
418 MultipartRequestExperimenterBuilder builder = new MultipartRequestExperimenterBuilder();
\r
419 builder.setExperimenter(1133L);
\r
420 builder.setExpType(1135L);
\r
421 MultipartRequestExperimenter experimenter = builder.build();
\r
422 return experimenter;
\r
425 private static MultipartRequestExperimenter decodeRequestExperimenter(ByteBuf output) {
\r
426 MultipartRequestExperimenterBuilder builder = new MultipartRequestExperimenterBuilder();
\r
427 builder.setExperimenter(output.readUnsignedInt());
\r
428 builder.setExpType(output.readUnsignedInt());
\r
429 MultipartRequestExperimenter experimenter = builder.build();
\r
430 return experimenter;
\r
434 * @throws Exception
\r
435 * Testing of {@link MultipartRequestMessageFactory} for correct translation from POJO
\r
438 public void testMultipartRequestTableFeaturesMessageFactory() throws Exception {
\r
439 MultipartRequestMessageBuilder builder = new MultipartRequestMessageBuilder();
\r
440 BufferHelper.setupHeader(builder);
\r
441 builder.setType(MultipartType.forValue(0xffff));
\r
442 builder.setFlags(new MultipartRequestFlags(true));
\r
443 builder.setMultipartRequestBody(createRequestTableFeatures());
\r
444 MultipartRequestMessage message = builder.build();
\r
446 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
\r
447 MultipartRequestMessageFactory factory = MultipartRequestMessageFactory.getInstance();
\r
448 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
\r
450 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
\r
451 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readUnsignedShort());
\r
452 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
\r
453 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
\r
455 MultipartRequestTableFeatures messageTableFeatures = (MultipartRequestTableFeatures) message.getMultipartRequestBody();
\r
456 Assert.assertEquals("Wrong tableFeaturesBody", messageTableFeatures.getTableFeatures(), decodeRequestTableFeatures(out).getTableFeatures());
\r
459 private static MultipartRequestTableFeatures createRequestTableFeatures() {
\r
460 MultipartRequestTableFeaturesBuilder builder = new MultipartRequestTableFeaturesBuilder();
\r
461 List<TableFeatures> tableFeaturesList = new ArrayList<>();
\r
462 TableFeaturesBuilder tableFeaturesBuilder = new TableFeaturesBuilder();
\r
463 tableFeaturesBuilder.setTableId((short) 8);
\r
464 tableFeaturesBuilder.setName("AAAABBBBCCCCDDDDEEEEFFFFGGGG");
\r
465 tableFeaturesBuilder.setMetadataMatch(new BigInteger(new byte[] {0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}));
\r
466 tableFeaturesBuilder.setMetadataWrite(new BigInteger(new byte[] {0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}));
\r
467 tableFeaturesBuilder.setConfig(new TableConfig(true));
\r
468 tableFeaturesBuilder.setMaxEntries(65L);
\r
469 TableFeatures tableFeature = tableFeaturesBuilder.build();
\r
470 tableFeaturesList.add(tableFeature);
\r
471 builder.setTableFeatures(tableFeaturesList);
\r
472 MultipartRequestTableFeatures tableFeaturesRequest = builder.build();
\r
473 return tableFeaturesRequest;
\r
476 private static MultipartRequestTableFeatures decodeRequestTableFeatures(ByteBuf output) {
\r
477 final byte PADDING_IN_MULTIPART_REQUEST_TABLE_FEATURES_BODY = 5;
\r
478 final byte OFP_MAX_TABLE_NAME_LEN = 32;
\r
479 MultipartRequestTableFeaturesBuilder builder = new MultipartRequestTableFeaturesBuilder();
\r
480 List<TableFeatures> tableFeaturesList = new ArrayList<>();
\r
481 TableFeaturesBuilder tableFeaturesBuilder = new TableFeaturesBuilder();
\r
482 tableFeaturesBuilder.setTableId(output.readUnsignedByte());
\r
483 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_TABLE_FEATURES_BODY);
\r
484 byte[] tableNameBytes = new byte[OFP_MAX_TABLE_NAME_LEN];
\r
485 output.readBytes(tableNameBytes);
\r
486 String tableName = new String(tableNameBytes);
\r
487 tableFeaturesBuilder.setName(tableName.trim());
\r
488 byte[] metadataMatch = new byte[Long.SIZE/Byte.SIZE];
\r
489 output.readBytes(metadataMatch);
\r
490 tableFeaturesBuilder.setMetadataMatch(new BigInteger(metadataMatch));
\r
491 byte[] metadataWrite = new byte[Long.SIZE/Byte.SIZE];
\r
492 output.readBytes(metadataWrite);
\r
493 tableFeaturesBuilder.setMetadataWrite(new BigInteger(metadataWrite));
\r
494 tableFeaturesBuilder.setConfig(decodeTableConfig(output.readInt()));
\r
495 tableFeaturesBuilder.setMaxEntries(output.readUnsignedInt());
\r
496 TableFeatures tableFeature = tableFeaturesBuilder.build();
\r
497 tableFeaturesList.add(tableFeature);
\r
498 builder.setTableFeatures(tableFeaturesList);
\r
499 MultipartRequestTableFeatures tableFeaturesRequest = builder.build();
\r
500 return tableFeaturesRequest;
\r
503 private static TableConfig decodeTableConfig(int input) {
\r
504 final Boolean _oFPTCDEPRECATEDMASK = (input & (1 << 3)) > 0;
\r
505 return new TableConfig(_oFPTCDEPRECATEDMASK);
\r