-/* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */\r
-package org.opendaylight.openflowjava.protocol.impl.serialization.factories;\r
-\r
-import io.netty.buffer.ByteBuf;\r
-import io.netty.buffer.UnpooledByteBufAllocator;\r
-\r
-import java.math.BigInteger;\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
-import junit.framework.Assert;\r
-\r
-import org.junit.Test;\r
-import org.opendaylight.openflowjava.protocol.impl.deserialization.factories.HelloMessageFactoryTest;\r
-import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper;\r
-import org.opendaylight.openflowjava.protocol.impl.util.EncodeConstants;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupId;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterId;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartRequestFlags;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.TableConfig;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInput;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInputBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.MultipartRequestBody;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestAggregate;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestAggregateBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestDescBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestExperimenter;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestExperimenterBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestFlow;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestFlowBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroup;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroupBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeter;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterConfig;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterConfigBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestPortStats;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestPortStatsBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestQueue;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestQueueBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestTableFeatures;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestTableFeaturesBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.table.features.TableFeatures;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.table.features.TableFeaturesBuilder;\r
-\r
-/**\r
- * @author timotej.kubas\r
- * @author michal.polkorab\r
- */\r
-public class MultipartRequestInputFactoryTest {\r
- private static final byte PADDING_IN_MULTIPART_REQUEST_MESSAGE = 4;\r
-\r
- /**\r
- * @throws Exception\r
- * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO\r
- */\r
- @Test\r
- public void testMultipartRequestInputFactory() throws Exception {\r
- MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();\r
- BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);\r
- builder.setType(MultipartType.forValue(1));\r
- builder.setFlags(new MultipartRequestFlags(true));\r
- builder.setMultipartRequestBody(createRequestFlow());\r
- MultipartRequestInput message = builder.build();\r
-\r
- ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
- MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();\r
- factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
-\r
- BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));\r
- Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());\r
- Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));\r
- out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);\r
- Assert.assertEquals("Wrong flow", message.getMultipartRequestBody(), decodeRequestFlow(out));\r
- }\r
-\r
- private static MultipartRequestFlow createRequestFlow() {\r
- MultipartRequestFlowBuilder builder = new MultipartRequestFlowBuilder();\r
- builder.setTableId((short) 8);\r
- builder.setOutPort(85L);\r
- builder.setOutGroup(95L);\r
- byte[] cookie = new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};\r
- builder.setCookie(new BigInteger(cookie));\r
- byte[] cookieMask = new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};\r
- builder.setCookieMask(new BigInteger(cookieMask));\r
- MultipartRequestFlow flow = builder.build();\r
- //TODO match field\r
- return flow;\r
- }\r
-\r
- private static MultipartRequestFlow decodeRequestFlow(ByteBuf output) {\r
- final byte PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_01 = 3;\r
- final byte PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_02 = 4;\r
- MultipartRequestFlowBuilder builder = new MultipartRequestFlowBuilder();\r
- builder.setTableId(output.readUnsignedByte());\r
- output.skipBytes(PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_01);\r
- builder.setOutPort(output.readUnsignedInt());\r
- builder.setOutGroup(output.readUnsignedInt());\r
- output.skipBytes(PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_02);\r
- byte[] cookie = new byte[Long.SIZE/Byte.SIZE];\r
- output.readBytes(cookie);\r
- builder.setCookie(new BigInteger(cookie));\r
- byte[] cookieMask = new byte[Long.SIZE/Byte.SIZE];\r
- output.readBytes(cookieMask);\r
- builder.setCookieMask(new BigInteger(cookieMask));\r
- MultipartRequestFlow flow = builder.build();\r
- return flow;\r
- }\r
-\r
- /**\r
- * @throws Exception\r
- * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO\r
- */\r
- @Test\r
- public void testMultipartRequestInputAggregateBodyFactory() throws Exception {\r
- MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();\r
- BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);\r
- builder.setType(MultipartType.forValue(2));\r
- builder.setFlags(new MultipartRequestFlags(true));\r
- builder.setMultipartRequestBody(createRequestAggregate());\r
- MultipartRequestInput message = builder.build();\r
-\r
- ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
- MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();\r
- factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
-\r
- BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));\r
- Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());\r
- Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));\r
- out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);\r
- Assert.assertEquals("Wrong aggregate", message.getMultipartRequestBody(), decodeRequestAggregate(out));\r
- }\r
-\r
- private static MultipartRequestFlags decodeMultipartRequestFlags(short input){\r
- final Boolean _oFPMPFREQMORE = (input & (1 << 0)) > 0;\r
- return new MultipartRequestFlags(_oFPMPFREQMORE);\r
- }\r
-\r
-\r
- private static MultipartRequestAggregate createRequestAggregate() {\r
- MultipartRequestAggregateBuilder builder = new MultipartRequestAggregateBuilder();\r
- builder.setTableId((short) 8);\r
- builder.setOutPort(85L);\r
- builder.setOutGroup(95L);\r
- byte[] cookie = new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};\r
- builder.setCookie(new BigInteger(cookie));\r
- byte[] cookieMask = new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};\r
- builder.setCookieMask(new BigInteger(cookieMask));\r
- MultipartRequestAggregate aggregate = builder.build();\r
- //TODO match field\r
- return aggregate;\r
- }\r
-\r
- private static MultipartRequestAggregate decodeRequestAggregate(ByteBuf output) {\r
- final byte PADDING_IN_MULTIPART_REQUEST_AGGREGATE_BODY_01 = 3;\r
- final byte PADDING_IN_MULTIPART_REQUEST_AGGREGATE_BODY_02 = 4;\r
- MultipartRequestAggregateBuilder builder = new MultipartRequestAggregateBuilder();\r
- builder.setTableId(output.readUnsignedByte());\r
- output.skipBytes(PADDING_IN_MULTIPART_REQUEST_AGGREGATE_BODY_01);\r
- builder.setOutPort(output.readUnsignedInt());\r
- builder.setOutGroup(output.readUnsignedInt());\r
- output.skipBytes(PADDING_IN_MULTIPART_REQUEST_AGGREGATE_BODY_02);\r
- byte[] cookie = new byte[Long.SIZE/Byte.SIZE];\r
- output.readBytes(cookie);\r
- builder.setCookie(new BigInteger(cookie));\r
- byte[] cookieMask = new byte[Long.SIZE/Byte.SIZE];\r
- output.readBytes(cookieMask);\r
- builder.setCookieMask(new BigInteger(cookieMask));\r
- MultipartRequestAggregate flow = builder.build();\r
- return flow;\r
- }\r
-\r
- /**\r
- * @throws Exception\r
- * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO\r
- */\r
- @Test\r
- public void testMultipartRequestInputTableFactory() throws Exception {\r
- MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();\r
- BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);\r
- builder.setType(MultipartType.forValue(3));\r
- builder.setFlags(new MultipartRequestFlags(true));\r
- //multipart request for table does not have body\r
- MultipartRequestInput message = builder.build();\r
-\r
- ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
- MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();\r
- factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
-\r
- BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));\r
- Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());\r
- Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));\r
- out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);\r
- }\r
-\r
- /**\r
- * @throws Exception\r
- * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO\r
- */\r
- @Test\r
- public void testMultipartRequestPortStatsMessageFactory() throws Exception {\r
- MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();\r
- BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);\r
- builder.setType(MultipartType.forValue(4));\r
- builder.setFlags(new MultipartRequestFlags(true));\r
- builder.setMultipartRequestBody(createRequestPortStats());\r
- MultipartRequestInput message = builder.build();\r
-\r
- ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
- MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();\r
- factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
-\r
- BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));\r
- Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());\r
- Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));\r
- out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);\r
- Assert.assertEquals("Wrong portStatsBody", message.getMultipartRequestBody(), decodeRequestPortStats(out));\r
- }\r
-\r
- private static MultipartRequestPortStats createRequestPortStats() {\r
- MultipartRequestPortStatsBuilder builder = new MultipartRequestPortStatsBuilder();\r
- builder.setPortNo(2251L);\r
- MultipartRequestPortStats portStats = builder.build();\r
- return portStats;\r
- }\r
-\r
- private static MultipartRequestPortStats decodeRequestPortStats(ByteBuf output) {\r
- final byte PADDING_IN_MULTIPART_REQUEST_PORTSTATS_BODY = 4;\r
- MultipartRequestPortStatsBuilder builder = new MultipartRequestPortStatsBuilder();\r
- builder.setPortNo(output.readUnsignedInt());\r
- output.skipBytes(PADDING_IN_MULTIPART_REQUEST_PORTSTATS_BODY);\r
- MultipartRequestPortStats portRequest = builder.build();\r
- return portRequest;\r
- }\r
-\r
- /**\r
- * @throws Exception\r
- * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO\r
- */\r
- @Test\r
- public void testMultipartRequestQueueMessageFactory() throws Exception {\r
- MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();\r
- BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);\r
- builder.setType(MultipartType.forValue(5));\r
- builder.setFlags(new MultipartRequestFlags(true));\r
- builder.setMultipartRequestBody(createRequestQueue());\r
- MultipartRequestInput message = builder.build();\r
-\r
- ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
- MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();\r
- factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
-\r
- BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));\r
- Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());\r
- Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));\r
- out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);\r
- Assert.assertEquals("Wrong queueBody", message.getMultipartRequestBody(), decodeRequestQueue(out));\r
- }\r
-\r
- private static MultipartRequestQueue createRequestQueue() {\r
- MultipartRequestQueueBuilder builder = new MultipartRequestQueueBuilder();\r
- builder.setPortNo(2256L);\r
- builder.setQueueId(2211L);\r
- MultipartRequestQueue queue = builder.build();\r
- return queue;\r
- }\r
-\r
- private static MultipartRequestQueue decodeRequestQueue(ByteBuf output) {\r
- MultipartRequestQueueBuilder builder = new MultipartRequestQueueBuilder();\r
- builder.setPortNo(output.readUnsignedInt());\r
- builder.setQueueId(output.readUnsignedInt());\r
- MultipartRequestQueue queue = builder.build();\r
- return queue;\r
- }\r
-\r
- /**\r
- * @throws Exception\r
- * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO\r
- */\r
- @Test\r
- public void testMultipartRequestGroupMessageFactory() throws Exception {\r
- MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();\r
- BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);\r
- builder.setType(MultipartType.forValue(6));\r
- builder.setFlags(new MultipartRequestFlags(true));\r
- builder.setMultipartRequestBody(createRequestGroup());\r
- MultipartRequestInput message = builder.build();\r
-\r
- ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
- MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();\r
- factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
-\r
- BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));\r
- Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());\r
- Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));\r
- out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);\r
- Assert.assertEquals("Wrong groupBody", message.getMultipartRequestBody(), decodeRequestGroup(out));\r
- }\r
-\r
- private static MultipartRequestGroup createRequestGroup() {\r
- MultipartRequestGroupBuilder builder = new MultipartRequestGroupBuilder();\r
- builder.setGroupId(new GroupId(2258L));\r
- MultipartRequestGroup group = builder.build();\r
- return group;\r
- }\r
-\r
- private static MultipartRequestGroup decodeRequestGroup(ByteBuf output) {\r
- final byte PADDING_IN_MULTIPART_REQUEST_GROUP_BODY = 4;\r
- MultipartRequestGroupBuilder builder = new MultipartRequestGroupBuilder();\r
- builder.setGroupId(new GroupId(output.readUnsignedInt()));\r
- output.skipBytes(PADDING_IN_MULTIPART_REQUEST_GROUP_BODY);\r
- MultipartRequestGroup group = builder.build();\r
- return group;\r
- }\r
-\r
- /**\r
- * @throws Exception\r
- * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO\r
- */\r
- @Test\r
- public void testMultipartRequestMeterMessageFactory() throws Exception {\r
- MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();\r
- BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);\r
- builder.setType(MultipartType.forValue(9));\r
- builder.setFlags(new MultipartRequestFlags(true));\r
- builder.setMultipartRequestBody(createRequestMeter());\r
- MultipartRequestInput message = builder.build();\r
-\r
- ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
- MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();\r
- factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
-\r
- BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));\r
- Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());\r
- Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));\r
- out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);\r
- Assert.assertEquals("Wrong meterBody", message.getMultipartRequestBody(), decodeRequestMeter(out));\r
- }\r
-\r
- private static MultipartRequestMeter createRequestMeter() {\r
- MultipartRequestMeterBuilder builder = new MultipartRequestMeterBuilder();\r
- builder.setMeterId(new MeterId(1121L));\r
- MultipartRequestMeter meter = builder.build();\r
- return meter;\r
- }\r
-\r
- private static MultipartRequestMeter decodeRequestMeter(ByteBuf output) {\r
- final byte PADDING_IN_MULTIPART_REQUEST_METER_BODY = 4;\r
- MultipartRequestMeterBuilder builder = new MultipartRequestMeterBuilder();\r
- builder.setMeterId(new MeterId(output.readUnsignedInt()));\r
- output.skipBytes(PADDING_IN_MULTIPART_REQUEST_METER_BODY);\r
- MultipartRequestMeter meter = builder.build();\r
- return meter;\r
- }\r
-\r
- /**\r
- * @throws Exception\r
- * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO\r
- */\r
- @Test\r
- public void testMultipartRequestMeterConfigMessageFactory() throws Exception {\r
- MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();\r
- BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);\r
- builder.setType(MultipartType.forValue(10));\r
- builder.setFlags(new MultipartRequestFlags(true));\r
- builder.setMultipartRequestBody(createRequestMeterConfig());\r
- MultipartRequestInput message = builder.build();\r
-\r
- ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
- MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();\r
- factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
-\r
- BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));\r
- Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());\r
- Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));\r
- out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);\r
- Assert.assertEquals("Wrong meterConfigBody", message.getMultipartRequestBody(), decodeRequestMeterConfig(out));\r
- }\r
-\r
- private static MultipartRequestMeterConfig createRequestMeterConfig() {\r
- MultipartRequestMeterConfigBuilder builder = new MultipartRequestMeterConfigBuilder();\r
- builder.setMeterId(new MeterId(1133L));\r
- MultipartRequestMeterConfig meterConfig = builder.build();\r
- return meterConfig;\r
- }\r
-\r
- private static MultipartRequestMeterConfig decodeRequestMeterConfig(ByteBuf output) {\r
- final byte PADDING_IN_MULTIPART_REQUEST_METER_CONFIG_BODY = 4;\r
- MultipartRequestMeterConfigBuilder builder = new MultipartRequestMeterConfigBuilder();\r
- builder.setMeterId(new MeterId(output.readUnsignedInt()));\r
- output.skipBytes(PADDING_IN_MULTIPART_REQUEST_METER_CONFIG_BODY);\r
- MultipartRequestMeterConfig meterConfig = builder.build();\r
- return meterConfig;\r
- }\r
-\r
- /**\r
- * @throws Exception\r
- * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO\r
- */\r
- @Test\r
- public void testMultipartRequestExperimenterMessageFactory() throws Exception {\r
- MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();\r
- BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);\r
- builder.setType(MultipartType.forValue(0xffff));\r
- builder.setFlags(new MultipartRequestFlags(true));\r
- builder.setMultipartRequestBody(createRequestExperimenter());\r
- MultipartRequestInput message = builder.build();\r
-\r
- ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
- MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();\r
- factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
-\r
- BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));\r
- Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readUnsignedShort());\r
- Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));\r
- out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);\r
- Assert.assertEquals("Wrong experimenterBody", message.getMultipartRequestBody(), decodeRequestExperimenter(out));\r
- }\r
-\r
- private static MultipartRequestExperimenter createRequestExperimenter() {\r
- MultipartRequestExperimenterBuilder builder = new MultipartRequestExperimenterBuilder();\r
- builder.setExperimenter(1133L);\r
- builder.setExpType(1135L);\r
- MultipartRequestExperimenter experimenter = builder.build();\r
- return experimenter;\r
- }\r
-\r
- private static MultipartRequestExperimenter decodeRequestExperimenter(ByteBuf output) {\r
- MultipartRequestExperimenterBuilder builder = new MultipartRequestExperimenterBuilder();\r
- builder.setExperimenter(output.readUnsignedInt());\r
- builder.setExpType(output.readUnsignedInt());\r
- MultipartRequestExperimenter experimenter = builder.build();\r
- return experimenter;\r
- }\r
-\r
- /**\r
- * @throws Exception\r
- * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO\r
- */\r
- @Test\r
- public void testMultipartRequestDescMessageFactory() throws Exception {\r
- MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();\r
- BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);\r
- builder.setType(MultipartType.forValue(0));\r
- builder.setFlags(new MultipartRequestFlags(true));\r
- builder.setMultipartRequestBody(createRequestDesc());\r
- MultipartRequestInput message = builder.build();\r
-\r
- ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
- MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();\r
- factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
-\r
- BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));\r
- Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readUnsignedShort());\r
- Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));\r
- }\r
-\r
- private static MultipartRequestBody createRequestDesc() {\r
- MultipartRequestDescBuilder builder = new MultipartRequestDescBuilder();\r
- return builder.build();\r
- }\r
-\r
- /**\r
- * @throws Exception\r
- * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO\r
- */\r
- @Test\r
- public void testMultipartRequestTableFeaturesMessageFactory() throws Exception {\r
- MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();\r
- BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);\r
- builder.setType(MultipartType.forValue(12));\r
- builder.setFlags(new MultipartRequestFlags(true));\r
- builder.setMultipartRequestBody(createRequestTableFeatures());\r
- MultipartRequestInput message = builder.build();\r
-\r
- ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
- MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();\r
- factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
-\r
- BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));\r
- Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readUnsignedShort());\r
- Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));\r
- out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);\r
-\r
- MultipartRequestTableFeatures messageTableFeatures = (MultipartRequestTableFeatures) message.getMultipartRequestBody();\r
- Assert.assertEquals("Wrong tableFeaturesBody", messageTableFeatures.getTableFeatures(), decodeRequestTableFeatures(out).getTableFeatures());\r
- }\r
-\r
- private static MultipartRequestTableFeatures createRequestTableFeatures() {\r
- MultipartRequestTableFeaturesBuilder builder = new MultipartRequestTableFeaturesBuilder();\r
- List<TableFeatures> tableFeaturesList = new ArrayList<>();\r
- TableFeaturesBuilder tableFeaturesBuilder = new TableFeaturesBuilder();\r
- tableFeaturesBuilder.setTableId((short) 8);\r
- tableFeaturesBuilder.setName("AAAABBBBCCCCDDDDEEEEFFFFGGGG");\r
- tableFeaturesBuilder.setMetadataMatch(new BigInteger(new byte[] {0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}));\r
- tableFeaturesBuilder.setMetadataWrite(new BigInteger(new byte[] {0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}));\r
- tableFeaturesBuilder.setConfig(new TableConfig(true));\r
- tableFeaturesBuilder.setMaxEntries(65L);\r
- TableFeatures tableFeature = tableFeaturesBuilder.build();\r
- tableFeaturesList.add(tableFeature);\r
- builder.setTableFeatures(tableFeaturesList);\r
- MultipartRequestTableFeatures tableFeaturesRequest = builder.build();\r
- return tableFeaturesRequest;\r
- }\r
-\r
- private static MultipartRequestTableFeatures decodeRequestTableFeatures(ByteBuf output) {\r
- final byte PADDING_IN_MULTIPART_REQUEST_TABLE_FEATURES_BODY = 5;\r
- final byte OFP_MAX_TABLE_NAME_LEN = 32;\r
- MultipartRequestTableFeaturesBuilder builder = new MultipartRequestTableFeaturesBuilder();\r
- List<TableFeatures> tableFeaturesList = new ArrayList<>();\r
- TableFeaturesBuilder tableFeaturesBuilder = new TableFeaturesBuilder();\r
- tableFeaturesBuilder.setTableId(output.readUnsignedByte());\r
- output.skipBytes(PADDING_IN_MULTIPART_REQUEST_TABLE_FEATURES_BODY);\r
- byte[] tableNameBytes = new byte[OFP_MAX_TABLE_NAME_LEN];\r
- output.readBytes(tableNameBytes);\r
- String tableName = new String(tableNameBytes);\r
- tableFeaturesBuilder.setName(tableName.trim());\r
- byte[] metadataMatch = new byte[Long.SIZE/Byte.SIZE];\r
- output.readBytes(metadataMatch);\r
- tableFeaturesBuilder.setMetadataMatch(new BigInteger(metadataMatch));\r
- byte[] metadataWrite = new byte[Long.SIZE/Byte.SIZE];\r
- output.readBytes(metadataWrite);\r
- tableFeaturesBuilder.setMetadataWrite(new BigInteger(metadataWrite));\r
- tableFeaturesBuilder.setConfig(decodeTableConfig(output.readInt()));\r
- tableFeaturesBuilder.setMaxEntries(output.readUnsignedInt());\r
- TableFeatures tableFeature = tableFeaturesBuilder.build();\r
- tableFeaturesList.add(tableFeature);\r
- builder.setTableFeatures(tableFeaturesList);\r
- MultipartRequestTableFeatures tableFeaturesRequest = builder.build();\r
- return tableFeaturesRequest;\r
- }\r
-\r
- private static TableConfig decodeTableConfig(int input) {\r
- final Boolean _oFPTCDEPRECATEDMASK = (input & (1 << 3)) > 0;\r
- return new TableConfig(_oFPTCDEPRECATEDMASK);\r
- }\r
-\r
-}\r
+/*
+ * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
+
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.UnpooledByteBufAllocator;
+
+import java.math.BigInteger;
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.Assert;
+
+import org.junit.Test;
+import org.opendaylight.openflowjava.protocol.impl.deserialization.factories.HelloMessageFactoryTest;
+import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper;
+import org.opendaylight.openflowjava.protocol.impl.util.EncodeConstants;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartRequestFlags;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.TableConfig;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.MultipartRequestBody;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestAggregate;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestAggregateBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestDescBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestExperimenter;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestExperimenterBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestFlow;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestFlowBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroup;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroupBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeter;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterConfig;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterConfigBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestPortStats;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestPortStatsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestQueue;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestQueueBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestTableFeatures;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestTableFeaturesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.table.features.TableFeatures;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.table.features.TableFeaturesBuilder;
+
+/**
+ * @author timotej.kubas
+ * @author michal.polkorab
+ */
+public class MultipartRequestInputFactoryTest {
+ private static final byte PADDING_IN_MULTIPART_REQUEST_MESSAGE = 4;
+
+ /**
+ * @throws Exception
+ * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
+ */
+ @Test
+ public void testMultipartRequestInputFactory() throws Exception {
+ MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
+ BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
+ builder.setType(MultipartType.forValue(1));
+ builder.setFlags(new MultipartRequestFlags(true));
+ builder.setMultipartRequestBody(createRequestFlow());
+ MultipartRequestInput message = builder.build();
+
+ ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
+ MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();
+ factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
+
+ BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
+ Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
+ Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
+ out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
+ Assert.assertEquals("Wrong flow", message.getMultipartRequestBody(), decodeRequestFlow(out));
+ }
+
+ private static MultipartRequestFlow createRequestFlow() {
+ MultipartRequestFlowBuilder builder = new MultipartRequestFlowBuilder();
+ builder.setTableId((short) 8);
+ builder.setOutPort(85L);
+ builder.setOutGroup(95L);
+ byte[] cookie = new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};
+ builder.setCookie(new BigInteger(cookie));
+ byte[] cookieMask = new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};
+ builder.setCookieMask(new BigInteger(cookieMask));
+ MultipartRequestFlow flow = builder.build();
+ //TODO match field
+ return flow;
+ }
+
+ private static MultipartRequestFlow decodeRequestFlow(ByteBuf output) {
+ final byte PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_01 = 3;
+ final byte PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_02 = 4;
+ MultipartRequestFlowBuilder builder = new MultipartRequestFlowBuilder();
+ builder.setTableId(output.readUnsignedByte());
+ output.skipBytes(PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_01);
+ builder.setOutPort(output.readUnsignedInt());
+ builder.setOutGroup(output.readUnsignedInt());
+ output.skipBytes(PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_02);
+ byte[] cookie = new byte[Long.SIZE/Byte.SIZE];
+ output.readBytes(cookie);
+ builder.setCookie(new BigInteger(cookie));
+ byte[] cookieMask = new byte[Long.SIZE/Byte.SIZE];
+ output.readBytes(cookieMask);
+ builder.setCookieMask(new BigInteger(cookieMask));
+ MultipartRequestFlow flow = builder.build();
+ return flow;
+ }
+
+ /**
+ * @throws Exception
+ * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
+ */
+ @Test
+ public void testMultipartRequestInputAggregateBodyFactory() throws Exception {
+ MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
+ BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
+ builder.setType(MultipartType.forValue(2));
+ builder.setFlags(new MultipartRequestFlags(true));
+ builder.setMultipartRequestBody(createRequestAggregate());
+ MultipartRequestInput message = builder.build();
+
+ ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
+ MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();
+ factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
+
+ BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
+ Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
+ Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
+ out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
+ Assert.assertEquals("Wrong aggregate", message.getMultipartRequestBody(), decodeRequestAggregate(out));
+ }
+
+ private static MultipartRequestFlags decodeMultipartRequestFlags(short input){
+ final Boolean _oFPMPFREQMORE = (input & (1 << 0)) > 0;
+ return new MultipartRequestFlags(_oFPMPFREQMORE);
+ }
+
+
+ private static MultipartRequestAggregate createRequestAggregate() {
+ MultipartRequestAggregateBuilder builder = new MultipartRequestAggregateBuilder();
+ builder.setTableId((short) 8);
+ builder.setOutPort(85L);
+ builder.setOutGroup(95L);
+ byte[] cookie = new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};
+ builder.setCookie(new BigInteger(cookie));
+ byte[] cookieMask = new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01};
+ builder.setCookieMask(new BigInteger(cookieMask));
+ MultipartRequestAggregate aggregate = builder.build();
+ //TODO match field
+ return aggregate;
+ }
+
+ private static MultipartRequestAggregate decodeRequestAggregate(ByteBuf output) {
+ final byte PADDING_IN_MULTIPART_REQUEST_AGGREGATE_BODY_01 = 3;
+ final byte PADDING_IN_MULTIPART_REQUEST_AGGREGATE_BODY_02 = 4;
+ MultipartRequestAggregateBuilder builder = new MultipartRequestAggregateBuilder();
+ builder.setTableId(output.readUnsignedByte());
+ output.skipBytes(PADDING_IN_MULTIPART_REQUEST_AGGREGATE_BODY_01);
+ builder.setOutPort(output.readUnsignedInt());
+ builder.setOutGroup(output.readUnsignedInt());
+ output.skipBytes(PADDING_IN_MULTIPART_REQUEST_AGGREGATE_BODY_02);
+ byte[] cookie = new byte[Long.SIZE/Byte.SIZE];
+ output.readBytes(cookie);
+ builder.setCookie(new BigInteger(cookie));
+ byte[] cookieMask = new byte[Long.SIZE/Byte.SIZE];
+ output.readBytes(cookieMask);
+ builder.setCookieMask(new BigInteger(cookieMask));
+ MultipartRequestAggregate flow = builder.build();
+ return flow;
+ }
+
+ /**
+ * @throws Exception
+ * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
+ */
+ @Test
+ public void testMultipartRequestInputTableFactory() throws Exception {
+ MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
+ BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
+ builder.setType(MultipartType.forValue(3));
+ builder.setFlags(new MultipartRequestFlags(true));
+ //multipart request for table does not have body
+ MultipartRequestInput message = builder.build();
+
+ ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
+ MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();
+ factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
+
+ BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
+ Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
+ Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
+ out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
+ }
+
+ /**
+ * @throws Exception
+ * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
+ */
+ @Test
+ public void testMultipartRequestPortStatsMessageFactory() throws Exception {
+ MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
+ BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
+ builder.setType(MultipartType.forValue(4));
+ builder.setFlags(new MultipartRequestFlags(true));
+ builder.setMultipartRequestBody(createRequestPortStats());
+ MultipartRequestInput message = builder.build();
+
+ ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
+ MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();
+ factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
+
+ BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
+ Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
+ Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
+ out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
+ Assert.assertEquals("Wrong portStatsBody", message.getMultipartRequestBody(), decodeRequestPortStats(out));
+ }
+
+ private static MultipartRequestPortStats createRequestPortStats() {
+ MultipartRequestPortStatsBuilder builder = new MultipartRequestPortStatsBuilder();
+ builder.setPortNo(2251L);
+ MultipartRequestPortStats portStats = builder.build();
+ return portStats;
+ }
+
+ private static MultipartRequestPortStats decodeRequestPortStats(ByteBuf output) {
+ final byte PADDING_IN_MULTIPART_REQUEST_PORTSTATS_BODY = 4;
+ MultipartRequestPortStatsBuilder builder = new MultipartRequestPortStatsBuilder();
+ builder.setPortNo(output.readUnsignedInt());
+ output.skipBytes(PADDING_IN_MULTIPART_REQUEST_PORTSTATS_BODY);
+ MultipartRequestPortStats portRequest = builder.build();
+ return portRequest;
+ }
+
+ /**
+ * @throws Exception
+ * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
+ */
+ @Test
+ public void testMultipartRequestQueueMessageFactory() throws Exception {
+ MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
+ BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
+ builder.setType(MultipartType.forValue(5));
+ builder.setFlags(new MultipartRequestFlags(true));
+ builder.setMultipartRequestBody(createRequestQueue());
+ MultipartRequestInput message = builder.build();
+
+ ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
+ MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();
+ factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
+
+ BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
+ Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
+ Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
+ out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
+ Assert.assertEquals("Wrong queueBody", message.getMultipartRequestBody(), decodeRequestQueue(out));
+ }
+
+ private static MultipartRequestQueue createRequestQueue() {
+ MultipartRequestQueueBuilder builder = new MultipartRequestQueueBuilder();
+ builder.setPortNo(2256L);
+ builder.setQueueId(2211L);
+ MultipartRequestQueue queue = builder.build();
+ return queue;
+ }
+
+ private static MultipartRequestQueue decodeRequestQueue(ByteBuf output) {
+ MultipartRequestQueueBuilder builder = new MultipartRequestQueueBuilder();
+ builder.setPortNo(output.readUnsignedInt());
+ builder.setQueueId(output.readUnsignedInt());
+ MultipartRequestQueue queue = builder.build();
+ return queue;
+ }
+
+ /**
+ * @throws Exception
+ * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
+ */
+ @Test
+ public void testMultipartRequestGroupMessageFactory() throws Exception {
+ MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
+ BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
+ builder.setType(MultipartType.forValue(6));
+ builder.setFlags(new MultipartRequestFlags(true));
+ builder.setMultipartRequestBody(createRequestGroup());
+ MultipartRequestInput message = builder.build();
+
+ ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
+ MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();
+ factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
+
+ BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
+ Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
+ Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
+ out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
+ Assert.assertEquals("Wrong groupBody", message.getMultipartRequestBody(), decodeRequestGroup(out));
+ }
+
+ private static MultipartRequestGroup createRequestGroup() {
+ MultipartRequestGroupBuilder builder = new MultipartRequestGroupBuilder();
+ builder.setGroupId(new GroupId(2258L));
+ MultipartRequestGroup group = builder.build();
+ return group;
+ }
+
+ private static MultipartRequestGroup decodeRequestGroup(ByteBuf output) {
+ final byte PADDING_IN_MULTIPART_REQUEST_GROUP_BODY = 4;
+ MultipartRequestGroupBuilder builder = new MultipartRequestGroupBuilder();
+ builder.setGroupId(new GroupId(output.readUnsignedInt()));
+ output.skipBytes(PADDING_IN_MULTIPART_REQUEST_GROUP_BODY);
+ MultipartRequestGroup group = builder.build();
+ return group;
+ }
+
+ /**
+ * @throws Exception
+ * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
+ */
+ @Test
+ public void testMultipartRequestMeterMessageFactory() throws Exception {
+ MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
+ BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
+ builder.setType(MultipartType.forValue(9));
+ builder.setFlags(new MultipartRequestFlags(true));
+ builder.setMultipartRequestBody(createRequestMeter());
+ MultipartRequestInput message = builder.build();
+
+ ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
+ MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();
+ factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
+
+ BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
+ Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
+ Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
+ out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
+ Assert.assertEquals("Wrong meterBody", message.getMultipartRequestBody(), decodeRequestMeter(out));
+ }
+
+ private static MultipartRequestMeter createRequestMeter() {
+ MultipartRequestMeterBuilder builder = new MultipartRequestMeterBuilder();
+ builder.setMeterId(new MeterId(1121L));
+ MultipartRequestMeter meter = builder.build();
+ return meter;
+ }
+
+ private static MultipartRequestMeter decodeRequestMeter(ByteBuf output) {
+ final byte PADDING_IN_MULTIPART_REQUEST_METER_BODY = 4;
+ MultipartRequestMeterBuilder builder = new MultipartRequestMeterBuilder();
+ builder.setMeterId(new MeterId(output.readUnsignedInt()));
+ output.skipBytes(PADDING_IN_MULTIPART_REQUEST_METER_BODY);
+ MultipartRequestMeter meter = builder.build();
+ return meter;
+ }
+
+ /**
+ * @throws Exception
+ * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
+ */
+ @Test
+ public void testMultipartRequestMeterConfigMessageFactory() throws Exception {
+ MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
+ BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
+ builder.setType(MultipartType.forValue(10));
+ builder.setFlags(new MultipartRequestFlags(true));
+ builder.setMultipartRequestBody(createRequestMeterConfig());
+ MultipartRequestInput message = builder.build();
+
+ ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
+ MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();
+ factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
+
+ BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
+ Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readShort());
+ Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
+ out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
+ Assert.assertEquals("Wrong meterConfigBody", message.getMultipartRequestBody(), decodeRequestMeterConfig(out));
+ }
+
+ private static MultipartRequestMeterConfig createRequestMeterConfig() {
+ MultipartRequestMeterConfigBuilder builder = new MultipartRequestMeterConfigBuilder();
+ builder.setMeterId(new MeterId(1133L));
+ MultipartRequestMeterConfig meterConfig = builder.build();
+ return meterConfig;
+ }
+
+ private static MultipartRequestMeterConfig decodeRequestMeterConfig(ByteBuf output) {
+ final byte PADDING_IN_MULTIPART_REQUEST_METER_CONFIG_BODY = 4;
+ MultipartRequestMeterConfigBuilder builder = new MultipartRequestMeterConfigBuilder();
+ builder.setMeterId(new MeterId(output.readUnsignedInt()));
+ output.skipBytes(PADDING_IN_MULTIPART_REQUEST_METER_CONFIG_BODY);
+ MultipartRequestMeterConfig meterConfig = builder.build();
+ return meterConfig;
+ }
+
+ /**
+ * @throws Exception
+ * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
+ */
+ @Test
+ public void testMultipartRequestExperimenterMessageFactory() throws Exception {
+ MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
+ BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
+ builder.setType(MultipartType.forValue(0xffff));
+ builder.setFlags(new MultipartRequestFlags(true));
+ builder.setMultipartRequestBody(createRequestExperimenter());
+ MultipartRequestInput message = builder.build();
+
+ ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
+ MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();
+ factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
+
+ BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
+ Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readUnsignedShort());
+ Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
+ out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
+ Assert.assertEquals("Wrong experimenterBody", message.getMultipartRequestBody(), decodeRequestExperimenter(out));
+ }
+
+ private static MultipartRequestExperimenter createRequestExperimenter() {
+ MultipartRequestExperimenterBuilder builder = new MultipartRequestExperimenterBuilder();
+ builder.setExperimenter(1133L);
+ builder.setExpType(1135L);
+ MultipartRequestExperimenter experimenter = builder.build();
+ return experimenter;
+ }
+
+ private static MultipartRequestExperimenter decodeRequestExperimenter(ByteBuf output) {
+ MultipartRequestExperimenterBuilder builder = new MultipartRequestExperimenterBuilder();
+ builder.setExperimenter(output.readUnsignedInt());
+ builder.setExpType(output.readUnsignedInt());
+ MultipartRequestExperimenter experimenter = builder.build();
+ return experimenter;
+ }
+
+ /**
+ * @throws Exception
+ * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
+ */
+ @Test
+ public void testMultipartRequestDescMessageFactory() throws Exception {
+ MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
+ BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
+ builder.setType(MultipartType.forValue(0));
+ builder.setFlags(new MultipartRequestFlags(true));
+ builder.setMultipartRequestBody(createRequestDesc());
+ MultipartRequestInput message = builder.build();
+
+ ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
+ MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();
+ factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
+
+ BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
+ Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readUnsignedShort());
+ Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
+ }
+
+ private static MultipartRequestBody createRequestDesc() {
+ MultipartRequestDescBuilder builder = new MultipartRequestDescBuilder();
+ return builder.build();
+ }
+
+ /**
+ * @throws Exception
+ * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO
+ */
+ @Test
+ public void testMultipartRequestTableFeaturesMessageFactory() throws Exception {
+ MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();
+ BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
+ builder.setType(MultipartType.forValue(12));
+ builder.setFlags(new MultipartRequestFlags(true));
+ builder.setMultipartRequestBody(createRequestTableFeatures());
+ MultipartRequestInput message = builder.build();
+
+ ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
+ MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();
+ factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
+
+ BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));
+ Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readUnsignedShort());
+ Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort()));
+ out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);
+
+ MultipartRequestTableFeatures messageTableFeatures = (MultipartRequestTableFeatures) message.getMultipartRequestBody();
+ Assert.assertEquals("Wrong tableFeaturesBody", messageTableFeatures.getTableFeatures(), decodeRequestTableFeatures(out).getTableFeatures());
+ }
+
+ private static MultipartRequestTableFeatures createRequestTableFeatures() {
+ MultipartRequestTableFeaturesBuilder builder = new MultipartRequestTableFeaturesBuilder();
+ List<TableFeatures> tableFeaturesList = new ArrayList<>();
+ TableFeaturesBuilder tableFeaturesBuilder = new TableFeaturesBuilder();
+ tableFeaturesBuilder.setTableId((short) 8);
+ tableFeaturesBuilder.setName("AAAABBBBCCCCDDDDEEEEFFFFGGGG");
+ tableFeaturesBuilder.setMetadataMatch(new BigInteger(new byte[] {0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}));
+ tableFeaturesBuilder.setMetadataWrite(new BigInteger(new byte[] {0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}));
+ tableFeaturesBuilder.setConfig(new TableConfig(true));
+ tableFeaturesBuilder.setMaxEntries(65L);
+ TableFeatures tableFeature = tableFeaturesBuilder.build();
+ tableFeaturesList.add(tableFeature);
+ builder.setTableFeatures(tableFeaturesList);
+ MultipartRequestTableFeatures tableFeaturesRequest = builder.build();
+ return tableFeaturesRequest;
+ }
+
+ private static MultipartRequestTableFeatures decodeRequestTableFeatures(ByteBuf output) {
+ final byte PADDING_IN_MULTIPART_REQUEST_TABLE_FEATURES_BODY = 5;
+ final byte OFP_MAX_TABLE_NAME_LEN = 32;
+ MultipartRequestTableFeaturesBuilder builder = new MultipartRequestTableFeaturesBuilder();
+ List<TableFeatures> tableFeaturesList = new ArrayList<>();
+ TableFeaturesBuilder tableFeaturesBuilder = new TableFeaturesBuilder();
+ tableFeaturesBuilder.setTableId(output.readUnsignedByte());
+ output.skipBytes(PADDING_IN_MULTIPART_REQUEST_TABLE_FEATURES_BODY);
+ byte[] tableNameBytes = new byte[OFP_MAX_TABLE_NAME_LEN];
+ output.readBytes(tableNameBytes);
+ String tableName = new String(tableNameBytes);
+ tableFeaturesBuilder.setName(tableName.trim());
+ byte[] metadataMatch = new byte[Long.SIZE/Byte.SIZE];
+ output.readBytes(metadataMatch);
+ tableFeaturesBuilder.setMetadataMatch(new BigInteger(metadataMatch));
+ byte[] metadataWrite = new byte[Long.SIZE/Byte.SIZE];
+ output.readBytes(metadataWrite);
+ tableFeaturesBuilder.setMetadataWrite(new BigInteger(metadataWrite));
+ tableFeaturesBuilder.setConfig(decodeTableConfig(output.readInt()));
+ tableFeaturesBuilder.setMaxEntries(output.readUnsignedInt());
+ TableFeatures tableFeature = tableFeaturesBuilder.build();
+ tableFeaturesList.add(tableFeature);
+ builder.setTableFeatures(tableFeaturesList);
+ MultipartRequestTableFeatures tableFeaturesRequest = builder.build();
+ return tableFeaturesRequest;
+ }
+
+ private static TableConfig decodeTableConfig(int input) {
+ final Boolean _oFPTCDEPRECATEDMASK = (input & (1 << 3)) > 0;
+ return new TableConfig(_oFPTCDEPRECATEDMASK);
+ }
+
+}