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.MultipartRequestBody;
\r
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestAggregate;
\r
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestAggregateBuilder;
\r
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestDescBuilder;
\r
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestExperimenter;
\r
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestExperimenterBuilder;
\r
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestFlow;
\r
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestFlowBuilder;
\r
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroup;
\r
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroupBuilder;
\r
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeter;
\r
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterBuilder;
\r
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterConfig;
\r
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterConfigBuilder;
\r
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestPortStats;
\r
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestPortStatsBuilder;
\r
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestQueue;
\r
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestQueueBuilder;
\r
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestTableFeatures;
\r
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestTableFeaturesBuilder;
\r
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.table.features.TableFeatures;
\r
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.table.features.TableFeaturesBuilder;
\r
45 * @author timotej.kubas
\r
46 * @author michal.polkorab
\r
48 public class MultipartRequestMessageFactoryTest {
\r
49 private static final byte PADDING_IN_MULTIPART_REQUEST_MESSAGE = 4;
\r
53 * Testing of {@link MultipartRequestMessageFactory} for correct translation from POJO
\r
56 public void testMultipartRequestMessageFactory() throws Exception {
\r
57 MultipartRequestMessageBuilder builder = new MultipartRequestMessageBuilder();
\r
58 BufferHelper.setupHeader(builder);
\r
59 builder.setType(MultipartType.forValue(1));
\r
60 builder.setFlags(new MultipartRequestFlags(true));
\r
61 builder.setMultipartRequestBody(createRequestFlow());
\r
62 MultipartRequestMessage message = builder.build();
\r
64 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
\r
65 MultipartRequestMessageFactory factory = MultipartRequestMessageFactory.getInstance();
\r
66 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
\r
68 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
\r
69 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
\r
70 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
\r
71 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
\r
72 Assert.assertEquals("Wrong flow", message.getMultipartRequestBody(), decodeRequestFlow(out));
\r
75 private static MultipartRequestFlow createRequestFlow() {
\r
76 MultipartRequestFlowBuilder builder = new MultipartRequestFlowBuilder();
\r
77 builder.setTableId((short) 8);
\r
78 builder.setOutPort(85L);
\r
79 builder.setOutGroup(95L);
\r
80 byte[] cookie = new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};
\r
81 builder.setCookie(new BigInteger(cookie));
\r
82 byte[] cookieMask = new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};
\r
83 builder.setCookieMask(new BigInteger(cookieMask));
\r
84 MultipartRequestFlow flow = builder.build();
\r
89 private static MultipartRequestFlow decodeRequestFlow(ByteBuf output) {
\r
90 final byte PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_01 = 3;
\r
91 final byte PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_02 = 4;
\r
92 MultipartRequestFlowBuilder builder = new MultipartRequestFlowBuilder();
\r
93 builder.setTableId(output.readUnsignedByte());
\r
94 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_01);
\r
95 builder.setOutPort(output.readUnsignedInt());
\r
96 builder.setOutGroup(output.readUnsignedInt());
\r
97 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_02);
\r
98 byte[] cookie = new byte[Long.SIZE/Byte.SIZE];
\r
99 output.readBytes(cookie);
\r
100 builder.setCookie(new BigInteger(cookie));
\r
101 byte[] cookieMask = new byte[Long.SIZE/Byte.SIZE];
\r
102 output.readBytes(cookieMask);
\r
103 builder.setCookieMask(new BigInteger(cookieMask));
\r
104 MultipartRequestFlow flow = builder.build();
\r
109 * @throws Exception
\r
110 * Testing of {@link MultipartRequestMessageFactory} for correct translation from POJO
\r
113 public void testMultipartRequestMessageAggregateBodyFactory() throws Exception {
\r
114 MultipartRequestMessageBuilder builder = new MultipartRequestMessageBuilder();
\r
115 BufferHelper.setupHeader(builder);
\r
116 builder.setType(MultipartType.forValue(2));
\r
117 builder.setFlags(new MultipartRequestFlags(true));
\r
118 builder.setMultipartRequestBody(createRequestAggregate());
\r
119 MultipartRequestMessage message = builder.build();
\r
121 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
\r
122 MultipartRequestMessageFactory factory = MultipartRequestMessageFactory.getInstance();
\r
123 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
\r
125 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
\r
126 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
\r
127 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
\r
128 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
\r
129 Assert.assertEquals("Wrong aggregate", message.getMultipartRequestBody(), decodeRequestAggregate(out));
\r
132 private static MultipartRequestFlags decodeMultipartRequestFlags(short input){
\r
133 final Boolean _oFPMPFREQMORE = (input & (1 << 0)) > 0;
\r
134 return new MultipartRequestFlags(_oFPMPFREQMORE);
\r
138 private static MultipartRequestAggregate createRequestAggregate() {
\r
139 MultipartRequestAggregateBuilder builder = new MultipartRequestAggregateBuilder();
\r
140 builder.setTableId((short) 8);
\r
141 builder.setOutPort(85L);
\r
142 builder.setOutGroup(95L);
\r
143 byte[] cookie = new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};
\r
144 builder.setCookie(new BigInteger(cookie));
\r
145 byte[] cookieMask = new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};
\r
146 builder.setCookieMask(new BigInteger(cookieMask));
\r
147 MultipartRequestAggregate aggregate = builder.build();
\r
152 private static MultipartRequestAggregate decodeRequestAggregate(ByteBuf output) {
\r
153 final byte PADDING_IN_MULTIPART_REQUEST_AGGREGATE_BODY_01 = 3;
\r
154 final byte PADDING_IN_MULTIPART_REQUEST_AGGREGATE_BODY_02 = 4;
\r
155 MultipartRequestAggregateBuilder builder = new MultipartRequestAggregateBuilder();
\r
156 builder.setTableId(output.readUnsignedByte());
\r
157 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_AGGREGATE_BODY_01);
\r
158 builder.setOutPort(output.readUnsignedInt());
\r
159 builder.setOutGroup(output.readUnsignedInt());
\r
160 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_AGGREGATE_BODY_02);
\r
161 byte[] cookie = new byte[Long.SIZE/Byte.SIZE];
\r
162 output.readBytes(cookie);
\r
163 builder.setCookie(new BigInteger(cookie));
\r
164 byte[] cookieMask = new byte[Long.SIZE/Byte.SIZE];
\r
165 output.readBytes(cookieMask);
\r
166 builder.setCookieMask(new BigInteger(cookieMask));
\r
167 MultipartRequestAggregate flow = builder.build();
\r
172 * @throws Exception
\r
173 * Testing of {@link MultipartRequestMessageFactory} for correct translation from POJO
\r
176 public void testMultipartRequestMessageTableFactory() throws Exception {
\r
177 MultipartRequestMessageBuilder builder = new MultipartRequestMessageBuilder();
\r
178 BufferHelper.setupHeader(builder);
\r
179 builder.setType(MultipartType.forValue(3));
\r
180 builder.setFlags(new MultipartRequestFlags(true));
\r
181 //multipart request for table does not have body
\r
182 MultipartRequestMessage message = builder.build();
\r
184 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
\r
185 MultipartRequestMessageFactory factory = MultipartRequestMessageFactory.getInstance();
\r
186 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
\r
188 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
\r
189 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
\r
190 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
\r
191 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
\r
195 * @throws Exception
\r
196 * Testing of {@link MultipartRequestMessageFactory} for correct translation from POJO
\r
199 public void testMultipartRequestPortStatsMessageFactory() throws Exception {
\r
200 MultipartRequestMessageBuilder builder = new MultipartRequestMessageBuilder();
\r
201 BufferHelper.setupHeader(builder);
\r
202 builder.setType(MultipartType.forValue(4));
\r
203 builder.setFlags(new MultipartRequestFlags(true));
\r
204 builder.setMultipartRequestBody(createRequestPortStats());
\r
205 MultipartRequestMessage message = builder.build();
\r
207 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
\r
208 MultipartRequestMessageFactory factory = MultipartRequestMessageFactory.getInstance();
\r
209 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
\r
211 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
\r
212 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
\r
213 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
\r
214 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
\r
215 Assert.assertEquals("Wrong portStatsBody", message.getMultipartRequestBody(), decodeRequestPortStats(out));
\r
218 private static MultipartRequestPortStats createRequestPortStats() {
\r
219 MultipartRequestPortStatsBuilder builder = new MultipartRequestPortStatsBuilder();
\r
220 builder.setPortNo(2251L);
\r
221 MultipartRequestPortStats portStats = builder.build();
\r
225 private static MultipartRequestPortStats decodeRequestPortStats(ByteBuf output) {
\r
226 final byte PADDING_IN_MULTIPART_REQUEST_PORTSTATS_BODY = 4;
\r
227 MultipartRequestPortStatsBuilder builder = new MultipartRequestPortStatsBuilder();
\r
228 builder.setPortNo(output.readUnsignedInt());
\r
229 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_PORTSTATS_BODY);
\r
230 MultipartRequestPortStats portRequest = builder.build();
\r
231 return portRequest;
\r
235 * @throws Exception
\r
236 * Testing of {@link MultipartRequestMessageFactory} for correct translation from POJO
\r
239 public void testMultipartRequestQueueMessageFactory() throws Exception {
\r
240 MultipartRequestMessageBuilder builder = new MultipartRequestMessageBuilder();
\r
241 BufferHelper.setupHeader(builder);
\r
242 builder.setType(MultipartType.forValue(5));
\r
243 builder.setFlags(new MultipartRequestFlags(true));
\r
244 builder.setMultipartRequestBody(createRequestQueue());
\r
245 MultipartRequestMessage message = builder.build();
\r
247 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
\r
248 MultipartRequestMessageFactory factory = MultipartRequestMessageFactory.getInstance();
\r
249 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
\r
251 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
\r
252 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
\r
253 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
\r
254 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
\r
255 Assert.assertEquals("Wrong queueBody", message.getMultipartRequestBody(), decodeRequestQueue(out));
\r
258 private static MultipartRequestQueue createRequestQueue() {
\r
259 MultipartRequestQueueBuilder builder = new MultipartRequestQueueBuilder();
\r
260 builder.setPortNo(2256L);
\r
261 builder.setQueueId(2211L);
\r
262 MultipartRequestQueue queue = builder.build();
\r
266 private static MultipartRequestQueue decodeRequestQueue(ByteBuf output) {
\r
267 MultipartRequestQueueBuilder builder = new MultipartRequestQueueBuilder();
\r
268 builder.setPortNo(output.readUnsignedInt());
\r
269 builder.setQueueId(output.readUnsignedInt());
\r
270 MultipartRequestQueue queue = builder.build();
\r
275 * @throws Exception
\r
276 * Testing of {@link MultipartRequestMessageFactory} for correct translation from POJO
\r
279 public void testMultipartRequestGroupMessageFactory() throws Exception {
\r
280 MultipartRequestMessageBuilder builder = new MultipartRequestMessageBuilder();
\r
281 BufferHelper.setupHeader(builder);
\r
282 builder.setType(MultipartType.forValue(6));
\r
283 builder.setFlags(new MultipartRequestFlags(true));
\r
284 builder.setMultipartRequestBody(createRequestGroup());
\r
285 MultipartRequestMessage message = builder.build();
\r
287 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
\r
288 MultipartRequestMessageFactory factory = MultipartRequestMessageFactory.getInstance();
\r
289 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
\r
291 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
\r
292 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
\r
293 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
\r
294 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
\r
295 Assert.assertEquals("Wrong groupBody", message.getMultipartRequestBody(), decodeRequestGroup(out));
\r
298 private static MultipartRequestGroup createRequestGroup() {
\r
299 MultipartRequestGroupBuilder builder = new MultipartRequestGroupBuilder();
\r
300 builder.setGroupId(2258L);
\r
301 MultipartRequestGroup group = builder.build();
\r
305 private static MultipartRequestGroup decodeRequestGroup(ByteBuf output) {
\r
306 final byte PADDING_IN_MULTIPART_REQUEST_GROUP_BODY = 4;
\r
307 MultipartRequestGroupBuilder builder = new MultipartRequestGroupBuilder();
\r
308 builder.setGroupId(output.readUnsignedInt());
\r
309 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_GROUP_BODY);
\r
310 MultipartRequestGroup group = builder.build();
\r
315 * @throws Exception
\r
316 * Testing of {@link MultipartRequestMessageFactory} for correct translation from POJO
\r
319 public void testMultipartRequestMeterMessageFactory() throws Exception {
\r
320 MultipartRequestMessageBuilder builder = new MultipartRequestMessageBuilder();
\r
321 BufferHelper.setupHeader(builder);
\r
322 builder.setType(MultipartType.forValue(9));
\r
323 builder.setFlags(new MultipartRequestFlags(true));
\r
324 builder.setMultipartRequestBody(createRequestMeter());
\r
325 MultipartRequestMessage message = builder.build();
\r
327 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
\r
328 MultipartRequestMessageFactory factory = MultipartRequestMessageFactory.getInstance();
\r
329 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
\r
331 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
\r
332 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
\r
333 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
\r
334 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
\r
335 Assert.assertEquals("Wrong meterBody", message.getMultipartRequestBody(), decodeRequestMeter(out));
\r
338 private static MultipartRequestMeter createRequestMeter() {
\r
339 MultipartRequestMeterBuilder builder = new MultipartRequestMeterBuilder();
\r
340 builder.setMeterId(1121L);
\r
341 MultipartRequestMeter meter = builder.build();
\r
345 private static MultipartRequestMeter decodeRequestMeter(ByteBuf output) {
\r
346 final byte PADDING_IN_MULTIPART_REQUEST_METER_BODY = 4;
\r
347 MultipartRequestMeterBuilder builder = new MultipartRequestMeterBuilder();
\r
348 builder.setMeterId(output.readUnsignedInt());
\r
349 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_METER_BODY);
\r
350 MultipartRequestMeter meter = builder.build();
\r
355 * @throws Exception
\r
356 * Testing of {@link MultipartRequestMessageFactory} for correct translation from POJO
\r
359 public void testMultipartRequestMeterConfigMessageFactory() throws Exception {
\r
360 MultipartRequestMessageBuilder builder = new MultipartRequestMessageBuilder();
\r
361 BufferHelper.setupHeader(builder);
\r
362 builder.setType(MultipartType.forValue(10));
\r
363 builder.setFlags(new MultipartRequestFlags(true));
\r
364 builder.setMultipartRequestBody(createRequestMeterConfig());
\r
365 MultipartRequestMessage message = builder.build();
\r
367 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
\r
368 MultipartRequestMessageFactory factory = MultipartRequestMessageFactory.getInstance();
\r
369 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
\r
371 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
\r
372 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
\r
373 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
\r
374 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
\r
375 Assert.assertEquals("Wrong meterConfigBody", message.getMultipartRequestBody(), decodeRequestMeterConfig(out));
\r
378 private static MultipartRequestMeterConfig createRequestMeterConfig() {
\r
379 MultipartRequestMeterConfigBuilder builder = new MultipartRequestMeterConfigBuilder();
\r
380 builder.setMeterId(1133L);
\r
381 MultipartRequestMeterConfig meterConfig = builder.build();
\r
382 return meterConfig;
\r
385 private static MultipartRequestMeterConfig decodeRequestMeterConfig(ByteBuf output) {
\r
386 final byte PADDING_IN_MULTIPART_REQUEST_METER_CONFIG_BODY = 4;
\r
387 MultipartRequestMeterConfigBuilder builder = new MultipartRequestMeterConfigBuilder();
\r
388 builder.setMeterId(output.readUnsignedInt());
\r
389 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_METER_CONFIG_BODY);
\r
390 MultipartRequestMeterConfig meterConfig = builder.build();
\r
391 return meterConfig;
\r
395 * @throws Exception
\r
396 * Testing of {@link MultipartRequestMessageFactory} for correct translation from POJO
\r
399 public void testMultipartRequestExperimenterMessageFactory() throws Exception {
\r
400 MultipartRequestMessageBuilder builder = new MultipartRequestMessageBuilder();
\r
401 BufferHelper.setupHeader(builder);
\r
402 builder.setType(MultipartType.forValue(0xffff));
\r
403 builder.setFlags(new MultipartRequestFlags(true));
\r
404 builder.setMultipartRequestBody(createRequestExperimenter());
\r
405 MultipartRequestMessage message = builder.build();
\r
407 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
\r
408 MultipartRequestMessageFactory factory = MultipartRequestMessageFactory.getInstance();
\r
409 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
\r
411 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
\r
412 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readUnsignedShort());
\r
413 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
\r
414 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
\r
415 Assert.assertEquals("Wrong experimenterBody", message.getMultipartRequestBody(), decodeRequestExperimenter(out));
\r
418 private static MultipartRequestExperimenter createRequestExperimenter() {
\r
419 MultipartRequestExperimenterBuilder builder = new MultipartRequestExperimenterBuilder();
\r
420 builder.setExperimenter(1133L);
\r
421 builder.setExpType(1135L);
\r
422 MultipartRequestExperimenter experimenter = builder.build();
\r
423 return experimenter;
\r
426 private static MultipartRequestExperimenter decodeRequestExperimenter(ByteBuf output) {
\r
427 MultipartRequestExperimenterBuilder builder = new MultipartRequestExperimenterBuilder();
\r
428 builder.setExperimenter(output.readUnsignedInt());
\r
429 builder.setExpType(output.readUnsignedInt());
\r
430 MultipartRequestExperimenter experimenter = builder.build();
\r
431 return experimenter;
\r
435 * @throws Exception
\r
436 * Testing of {@link MultipartRequestMessageFactory} for correct translation from POJO
\r
439 public void testMultipartRequestDescMessageFactory() throws Exception {
\r
440 MultipartRequestMessageBuilder builder = new MultipartRequestMessageBuilder();
\r
441 BufferHelper.setupHeader(builder);
\r
442 builder.setType(MultipartType.forValue(0));
\r
443 builder.setFlags(new MultipartRequestFlags(true));
\r
444 builder.setMultipartRequestBody(createRequestDesc());
\r
445 MultipartRequestMessage message = builder.build();
\r
447 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
\r
448 MultipartRequestMessageFactory factory = MultipartRequestMessageFactory.getInstance();
\r
449 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
\r
451 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
\r
452 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readUnsignedShort());
\r
453 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
\r
456 private MultipartRequestBody createRequestDesc() {
\r
457 MultipartRequestDescBuilder builder = new MultipartRequestDescBuilder();
\r
458 return builder.build();
\r
462 * @throws Exception
\r
463 * Testing of {@link MultipartRequestMessageFactory} for correct translation from POJO
\r
466 public void testMultipartRequestTableFeaturesMessageFactory() throws Exception {
\r
467 MultipartRequestMessageBuilder builder = new MultipartRequestMessageBuilder();
\r
468 BufferHelper.setupHeader(builder);
\r
469 builder.setType(MultipartType.forValue(12));
\r
470 builder.setFlags(new MultipartRequestFlags(true));
\r
471 builder.setMultipartRequestBody(createRequestTableFeatures());
\r
472 MultipartRequestMessage message = builder.build();
\r
474 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
\r
475 MultipartRequestMessageFactory factory = MultipartRequestMessageFactory.getInstance();
\r
476 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
\r
478 BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
\r
479 Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readUnsignedShort());
\r
480 Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
\r
481 out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
\r
483 MultipartRequestTableFeatures messageTableFeatures = (MultipartRequestTableFeatures) message.getMultipartRequestBody();
\r
484 Assert.assertEquals("Wrong tableFeaturesBody", messageTableFeatures.getTableFeatures(), decodeRequestTableFeatures(out).getTableFeatures());
\r
487 private static MultipartRequestTableFeatures createRequestTableFeatures() {
\r
488 MultipartRequestTableFeaturesBuilder builder = new MultipartRequestTableFeaturesBuilder();
\r
489 List<TableFeatures> tableFeaturesList = new ArrayList<>();
\r
490 TableFeaturesBuilder tableFeaturesBuilder = new TableFeaturesBuilder();
\r
491 tableFeaturesBuilder.setTableId((short) 8);
\r
492 tableFeaturesBuilder.setName("AAAABBBBCCCCDDDDEEEEFFFFGGGG");
\r
493 tableFeaturesBuilder.setMetadataMatch(new BigInteger(new byte[] {0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}));
\r
494 tableFeaturesBuilder.setMetadataWrite(new BigInteger(new byte[] {0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}));
\r
495 tableFeaturesBuilder.setConfig(new TableConfig(true));
\r
496 tableFeaturesBuilder.setMaxEntries(65L);
\r
497 TableFeatures tableFeature = tableFeaturesBuilder.build();
\r
498 tableFeaturesList.add(tableFeature);
\r
499 builder.setTableFeatures(tableFeaturesList);
\r
500 MultipartRequestTableFeatures tableFeaturesRequest = builder.build();
\r
501 return tableFeaturesRequest;
\r
504 private static MultipartRequestTableFeatures decodeRequestTableFeatures(ByteBuf output) {
\r
505 final byte PADDING_IN_MULTIPART_REQUEST_TABLE_FEATURES_BODY = 5;
\r
506 final byte OFP_MAX_TABLE_NAME_LEN = 32;
\r
507 MultipartRequestTableFeaturesBuilder builder = new MultipartRequestTableFeaturesBuilder();
\r
508 List<TableFeatures> tableFeaturesList = new ArrayList<>();
\r
509 TableFeaturesBuilder tableFeaturesBuilder = new TableFeaturesBuilder();
\r
510 tableFeaturesBuilder.setTableId(output.readUnsignedByte());
\r
511 output.skipBytes(PADDING_IN_MULTIPART_REQUEST_TABLE_FEATURES_BODY);
\r
512 byte[] tableNameBytes = new byte[OFP_MAX_TABLE_NAME_LEN];
\r
513 output.readBytes(tableNameBytes);
\r
514 String tableName = new String(tableNameBytes);
\r
515 tableFeaturesBuilder.setName(tableName.trim());
\r
516 byte[] metadataMatch = new byte[Long.SIZE/Byte.SIZE];
\r
517 output.readBytes(metadataMatch);
\r
518 tableFeaturesBuilder.setMetadataMatch(new BigInteger(metadataMatch));
\r
519 byte[] metadataWrite = new byte[Long.SIZE/Byte.SIZE];
\r
520 output.readBytes(metadataWrite);
\r
521 tableFeaturesBuilder.setMetadataWrite(new BigInteger(metadataWrite));
\r
522 tableFeaturesBuilder.setConfig(decodeTableConfig(output.readInt()));
\r
523 tableFeaturesBuilder.setMaxEntries(output.readUnsignedInt());
\r
524 TableFeatures tableFeature = tableFeaturesBuilder.build();
\r
525 tableFeaturesList.add(tableFeature);
\r
526 builder.setTableFeatures(tableFeaturesList);
\r
527 MultipartRequestTableFeatures tableFeaturesRequest = builder.build();
\r
528 return tableFeaturesRequest;
\r
531 private static TableConfig decodeTableConfig(int input) {
\r
532 final Boolean _oFPTCDEPRECATEDMASK = (input & (1 << 3)) > 0;
\r
533 return new TableConfig(_oFPTCDEPRECATEDMASK);
\r