X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=openflow-protocol-impl%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fopenflowjava%2Fprotocol%2Fimpl%2Fserialization%2Ffactories%2FMultipartRequestInputFactoryTest.java;h=4227330b5d2da7d4df0a7cd58729b93b1bfb839c;hb=a36c93be5820165c81258c23af1f3ad26d44ffa1;hp=e725e64b35c3bc47f40d0d859cd06a05cee72455;hpb=537927d0952c74dd362ede53fbbed7db8d53fc7b;p=openflowjava.git diff --git a/openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/MultipartRequestInputFactoryTest.java b/openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/MultipartRequestInputFactoryTest.java index e725e64b..4227330b 100644 --- a/openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/MultipartRequestInputFactoryTest.java +++ b/openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/MultipartRequestInputFactoryTest.java @@ -1,539 +1,521 @@ -/* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */ -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 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 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); - } - -} +/* + * 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 org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.opendaylight.openflowjava.protocol.api.extensibility.MessageTypeKey; +import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer; +import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry; +import org.opendaylight.openflowjava.protocol.impl.serialization.SerializerRegistryImpl; +import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper; +import org.opendaylight.openflowjava.protocol.api.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.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.MultipartRequestAggregateCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestAggregateCaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestDescCaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestExperimenterCaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestFlowCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestFlowCaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroupCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestGroupCaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterCaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterConfigCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestMeterConfigCaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestPortStatsCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestPortStatsCaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestQueueCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.MultipartRequestQueueCaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.aggregate._case.MultipartRequestAggregateBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.desc._case.MultipartRequestDescBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.experimenter._case.MultipartRequestExperimenterBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.flow._case.MultipartRequestFlowBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.group._case.MultipartRequestGroupBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.meter._case.MultipartRequestMeterBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.meter.config._case.MultipartRequestMeterConfigBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.port.stats._case.MultipartRequestPortStatsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.request.multipart.request.body.multipart.request.queue._case.MultipartRequestQueueBuilder; + +/** + * @author timotej.kubas + * @author michal.polkorab + */ +public class MultipartRequestInputFactoryTest { + /** padding in MultipartRequest message */ + public static final byte PADDING_IN_MULTIPART_REQUEST_MESSAGE = 4; + private SerializerRegistry registry; + private OFSerializer multipartFactory; + + /** + * Initializes serializer registry and stores correct factory in field + */ + @Before + public void startUp() { + registry = new SerializerRegistryImpl(); + registry.init(); + multipartFactory = registry.getSerializer( + new MessageTypeKey<>(EncodeConstants.OF13_VERSION_ID, MultipartRequestInput.class)); + } + + /** + * @throws Exception + * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO + */ + @Test + public void testMultipartRequestFlowInputFactory() 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(); + multipartFactory.serialize(message, out); + + BufferHelper.checkHeaderV13(out, (byte) 18, 48); + 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 MultipartRequestFlowCase createRequestFlow() { + MultipartRequestFlowCaseBuilder caseBuilder = new MultipartRequestFlowCaseBuilder(); + 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(1, cookie)); + byte[] cookieMask = new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}; + builder.setCookieMask(new BigInteger(1, cookieMask)); + caseBuilder.setMultipartRequestFlow(builder.build()); + //TODO match field + return caseBuilder.build(); + } + + private static MultipartRequestFlowCase decodeRequestFlow(ByteBuf output) { + final byte PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_01 = 3; + final byte PADDING_IN_MULTIPART_REQUEST_FLOW_BODY_02 = 4; + MultipartRequestFlowCaseBuilder caseBuilder = new MultipartRequestFlowCaseBuilder(); + 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[EncodeConstants.SIZE_OF_LONG_IN_BYTES]; + output.readBytes(cookie); + builder.setCookie(new BigInteger(1, cookie)); + byte[] cookieMask = new byte[EncodeConstants.SIZE_OF_LONG_IN_BYTES]; + output.readBytes(cookieMask); + builder.setCookieMask(new BigInteger(1, cookieMask)); + caseBuilder.setMultipartRequestFlow(builder.build()); + return caseBuilder.build(); + } + + /** + * @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(); + multipartFactory.serialize(message, out); + + BufferHelper.checkHeaderV13(out, (byte) 18, 48); + 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 MultipartRequestAggregateCase createRequestAggregate() { + MultipartRequestAggregateCaseBuilder caseBuilder = new MultipartRequestAggregateCaseBuilder(); + 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(1, cookie)); + byte[] cookieMask = new byte[]{0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}; + builder.setCookieMask(new BigInteger(1, cookieMask)); + caseBuilder.setMultipartRequestAggregate(builder.build()); + //TODO match field + return caseBuilder.build(); + } + + private static MultipartRequestAggregateCase decodeRequestAggregate(ByteBuf output) { + final byte PADDING_IN_MULTIPART_REQUEST_AGGREGATE_BODY_01 = 3; + final byte PADDING_IN_MULTIPART_REQUEST_AGGREGATE_BODY_02 = 4; + MultipartRequestAggregateCaseBuilder caseBuilder = new MultipartRequestAggregateCaseBuilder(); + 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[EncodeConstants.SIZE_OF_LONG_IN_BYTES]; + output.readBytes(cookie); + builder.setCookie(new BigInteger(1, cookie)); + byte[] cookieMask = new byte[EncodeConstants.SIZE_OF_LONG_IN_BYTES]; + output.readBytes(cookieMask); + builder.setCookieMask(new BigInteger(1, cookieMask)); + caseBuilder.setMultipartRequestAggregate(builder.build()); + return caseBuilder.build(); + } + + /** + * @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 registry does not have body + MultipartRequestInput message = builder.build(); + + ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer(); + multipartFactory.serialize(message, out); + + BufferHelper.checkHeaderV13(out, (byte) 18, 16); + 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(); + multipartFactory.serialize(message, out); + + BufferHelper.checkHeaderV13(out, (byte) 18, 24); + 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 MultipartRequestPortStatsCase createRequestPortStats() { + MultipartRequestPortStatsCaseBuilder caseBuilder = new MultipartRequestPortStatsCaseBuilder(); + MultipartRequestPortStatsBuilder builder = new MultipartRequestPortStatsBuilder(); + builder.setPortNo(2251L); + caseBuilder.setMultipartRequestPortStats(builder.build()); + return caseBuilder.build(); + } + + private static MultipartRequestPortStatsCase decodeRequestPortStats(ByteBuf output) { + final byte PADDING_IN_MULTIPART_REQUEST_PORTSTATS_BODY = 4; + MultipartRequestPortStatsCaseBuilder caseBuilder = new MultipartRequestPortStatsCaseBuilder(); + MultipartRequestPortStatsBuilder builder = new MultipartRequestPortStatsBuilder(); + builder.setPortNo(output.readUnsignedInt()); + output.skipBytes(PADDING_IN_MULTIPART_REQUEST_PORTSTATS_BODY); + caseBuilder.setMultipartRequestPortStats(builder.build()); + return caseBuilder.build(); + } + + /** + * @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(); + multipartFactory.serialize(message, out); + + BufferHelper.checkHeaderV13(out, (byte) 18, 24); + 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 MultipartRequestQueueCase createRequestQueue() { + MultipartRequestQueueCaseBuilder caseBuilder = new MultipartRequestQueueCaseBuilder(); + MultipartRequestQueueBuilder builder = new MultipartRequestQueueBuilder(); + builder.setPortNo(2256L); + builder.setQueueId(2211L); + caseBuilder.setMultipartRequestQueue(builder.build()); + return caseBuilder.build(); + } + + private static MultipartRequestQueueCase decodeRequestQueue(ByteBuf output) { + MultipartRequestQueueCaseBuilder caseBuilder = new MultipartRequestQueueCaseBuilder(); + MultipartRequestQueueBuilder builder = new MultipartRequestQueueBuilder(); + builder.setPortNo(output.readUnsignedInt()); + builder.setQueueId(output.readUnsignedInt()); + caseBuilder.setMultipartRequestQueue(builder.build()); + return caseBuilder.build(); + } + + /** + * @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(); + multipartFactory.serialize(message, out); + + BufferHelper.checkHeaderV13(out, (byte) 18, 24); + 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 MultipartRequestGroupCase createRequestGroup() { + MultipartRequestGroupCaseBuilder caseBuilder = new MultipartRequestGroupCaseBuilder(); + MultipartRequestGroupBuilder builder = new MultipartRequestGroupBuilder(); + builder.setGroupId(new GroupId(2258L)); + caseBuilder.setMultipartRequestGroup(builder.build()); + return caseBuilder.build(); + } + + private static MultipartRequestGroupCase decodeRequestGroup(ByteBuf output) { + final byte PADDING_IN_MULTIPART_REQUEST_GROUP_BODY = 4; + MultipartRequestGroupCaseBuilder caseBuilder = new MultipartRequestGroupCaseBuilder(); + MultipartRequestGroupBuilder builder = new MultipartRequestGroupBuilder(); + builder.setGroupId(new GroupId(output.readUnsignedInt())); + output.skipBytes(PADDING_IN_MULTIPART_REQUEST_GROUP_BODY); + caseBuilder.setMultipartRequestGroup(builder.build()); + return caseBuilder.build(); + } + + /** + * @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(); + multipartFactory.serialize(message, out); + + BufferHelper.checkHeaderV13(out, (byte) 18, 24); + 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 MultipartRequestMeterCase createRequestMeter() { + MultipartRequestMeterCaseBuilder caseBuilder = new MultipartRequestMeterCaseBuilder(); + MultipartRequestMeterBuilder builder = new MultipartRequestMeterBuilder(); + builder.setMeterId(new MeterId(1121L)); + caseBuilder.setMultipartRequestMeter(builder.build()); + return caseBuilder.build(); + } + + private static MultipartRequestMeterCase decodeRequestMeter(ByteBuf output) { + final byte PADDING_IN_MULTIPART_REQUEST_METER_BODY = 4; + MultipartRequestMeterCaseBuilder caseBuilder = new MultipartRequestMeterCaseBuilder(); + MultipartRequestMeterBuilder builder = new MultipartRequestMeterBuilder(); + builder.setMeterId(new MeterId(output.readUnsignedInt())); + output.skipBytes(PADDING_IN_MULTIPART_REQUEST_METER_BODY); + caseBuilder.setMultipartRequestMeter(builder.build()); + return caseBuilder.build(); + } + + /** + * @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(); + multipartFactory.serialize(message, out); + + BufferHelper.checkHeaderV13(out, (byte) 18, 24); + 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 MultipartRequestMeterConfigCase createRequestMeterConfig() { + MultipartRequestMeterConfigCaseBuilder caseBuilder = new MultipartRequestMeterConfigCaseBuilder(); + MultipartRequestMeterConfigBuilder builder = new MultipartRequestMeterConfigBuilder(); + builder.setMeterId(new MeterId(1133L)); + caseBuilder.setMultipartRequestMeterConfig(builder.build()); + return caseBuilder.build(); + } + + private static MultipartRequestMeterConfigCase decodeRequestMeterConfig(ByteBuf output) { + final byte PADDING_IN_MULTIPART_REQUEST_METER_CONFIG_BODY = 4; + MultipartRequestMeterConfigCaseBuilder caseBuilder = new MultipartRequestMeterConfigCaseBuilder(); + MultipartRequestMeterConfigBuilder builder = new MultipartRequestMeterConfigBuilder(); + builder.setMeterId(new MeterId(output.readUnsignedInt())); + output.skipBytes(PADDING_IN_MULTIPART_REQUEST_METER_CONFIG_BODY); + caseBuilder.setMultipartRequestMeterConfig(builder.build()); + return caseBuilder.build(); + } + + /** + * @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(); + multipartFactory.serialize(message, out); + + BufferHelper.checkHeaderV13(out, (byte) 18, 16); + Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readUnsignedShort()); + Assert.assertEquals("Wrong flags", message.getFlags(), decodeMultipartRequestFlags(out.readShort())); + } + + private static MultipartRequestBody createRequestDesc() { + MultipartRequestDescCaseBuilder caseBuilder = new MultipartRequestDescCaseBuilder(); + MultipartRequestDescBuilder builder = new MultipartRequestDescBuilder(); + caseBuilder.setMultipartRequestDesc(builder.build()); + return caseBuilder.build(); + } + + /** + * Testing OF10StatsRequestInputFactory (Vendor) for correct serialization + * @throws Exception + */ + @Test + public void testExperimenter() throws Exception { + MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder(); + BufferHelper.setupHeader(builder, EncodeConstants.OF10_VERSION_ID); + builder.setType(MultipartType.OFPMPEXPERIMENTER); + builder.setFlags(new MultipartRequestFlags(false)); + MultipartRequestExperimenterCaseBuilder caseBuilder = new MultipartRequestExperimenterCaseBuilder(); + MultipartRequestExperimenterBuilder expBuilder = new MultipartRequestExperimenterBuilder(); + expBuilder.setExperimenter(56L); + expBuilder.setExpType(148L); + byte[] expData = new byte[]{0, 1, 2, 3, 4, 5, 6, 7}; + expBuilder.setData(expData); + caseBuilder.setMultipartRequestExperimenter(expBuilder.build()); + builder.setMultipartRequestBody(caseBuilder.build()); + MultipartRequestInput message = builder.build(); + + ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer(); + multipartFactory.serialize(message, out); + + BufferHelper.checkHeaderV10(out, (byte) 18, 32); + Assert.assertEquals("Wrong type", 0xFFFF, out.readUnsignedShort()); + Assert.assertEquals("Wrong flags", 0, out.readUnsignedShort()); + out.skipBytes(EncodeConstants.SIZE_OF_INT_IN_BYTES); + Assert.assertEquals("Wrong experimenter", 56, out.readUnsignedInt()); + Assert.assertEquals("Wrong exp-type", 148, out.readUnsignedInt()); + byte[] temp = new byte[8]; + out.readBytes(temp); + Assert.assertArrayEquals("Wrong data", expData, temp); + Assert.assertTrue("Unread data", out.readableBytes() == 0); + } + + /** + * Testing OF10StatsRequestInputFactory (Vendor) for correct serialization + * @throws Exception + */ + @Test + public void testExperimenterWithoutData() throws Exception { + MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder(); + BufferHelper.setupHeader(builder, EncodeConstants.OF10_VERSION_ID); + builder.setType(MultipartType.OFPMPEXPERIMENTER); + builder.setFlags(new MultipartRequestFlags(false)); + MultipartRequestExperimenterCaseBuilder caseBuilder = new MultipartRequestExperimenterCaseBuilder(); + MultipartRequestExperimenterBuilder expBuilder = new MultipartRequestExperimenterBuilder(); + expBuilder.setExperimenter(56L); + expBuilder.setExpType(152L); + caseBuilder.setMultipartRequestExperimenter(expBuilder.build()); + builder.setMultipartRequestBody(caseBuilder.build()); + MultipartRequestInput message = builder.build(); + + ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer(); + multipartFactory.serialize(message, out); + + BufferHelper.checkHeaderV10(out, (byte) 18, 24); + Assert.assertEquals("Wrong type", 0xFFFF, out.readUnsignedShort()); + Assert.assertEquals("Wrong flags", 0, out.readUnsignedShort()); + out.skipBytes(EncodeConstants.SIZE_OF_INT_IN_BYTES); + Assert.assertEquals("Wrong experimenter", 56, out.readUnsignedInt()); + Assert.assertEquals("Wrong exp-type", 152, out.readUnsignedInt()); + Assert.assertTrue("Unread data", out.readableBytes() == 0); + } + +}