import org.opendaylight.openflowjava.protocol.impl.deserialization.factories.ExperimenterMessageFactory;\r
import org.opendaylight.openflowjava.protocol.impl.deserialization.factories.FeaturesReplyMessageFactory;\r
import org.opendaylight.openflowjava.protocol.impl.deserialization.factories.FlowRemovedMessageFactory;\r
+import org.opendaylight.openflowjava.protocol.impl.deserialization.factories.GetAsyncReplyMessageFactory;\r
import org.opendaylight.openflowjava.protocol.impl.deserialization.factories.GetConfigReplyMessageFactory;\r
import org.opendaylight.openflowjava.protocol.impl.deserialization.factories.HelloMessageFactory;\r
import org.opendaylight.openflowjava.protocol.impl.deserialization.factories.MultipartReplyMessageFactory;\r
table.put(new MessageTypeCodeKey(OF13, (short) 21), BarrierReplyMessageFactory.getInstance());\r
table.put(new MessageTypeCodeKey(OF13, (short) 23), QueueGetConfigReplyMessageFactory.getInstance());\r
table.put(new MessageTypeCodeKey(OF13, (short) 25), RoleReplyMessageFactory.getInstance());\r
+ table.put(new MessageTypeCodeKey(OF13, (short) 27), GetAsyncReplyMessageFactory.getInstance());\r
}\r
\r
/**\r
--- /dev/null
+/* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */\r
+package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;\r
+\r
+import io.netty.buffer.ByteBuf;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.opendaylight.openflowjava.protocol.impl.deserialization.OFDeserializer;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowRemovedReason;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PacketInReason;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortReason;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetAsyncOutput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetAsyncOutputBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.get.async.reply.FlowRemovedMask;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.get.async.reply.FlowRemovedMaskBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.get.async.reply.PacketInMask;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.get.async.reply.PacketInMaskBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.get.async.reply.PortStatusMask;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.get.async.reply.PortStatusMaskBuilder;\r
+\r
+/**\r
+ * @author timotej.kubas\r
+ * @author michal.polkorab\r
+ */\r
+public class GetAsyncReplyMessageFactory implements OFDeserializer<GetAsyncOutput> {\r
+ private static GetAsyncReplyMessageFactory instance;\r
+ \r
+ private GetAsyncReplyMessageFactory() {\r
+ // singleton\r
+ }\r
+\r
+ /**\r
+ * @return singleton factory\r
+ */\r
+ public static GetAsyncReplyMessageFactory getInstance() {\r
+ if (instance == null) {\r
+ instance = new GetAsyncReplyMessageFactory();\r
+ }\r
+ return instance;\r
+ }\r
+ \r
+ @Override\r
+ public GetAsyncOutput bufferToMessage(ByteBuf rawMessage, short version) {\r
+ GetAsyncOutputBuilder builder = new GetAsyncOutputBuilder();\r
+ builder.setVersion(version);\r
+ builder.setXid(rawMessage.readUnsignedInt());\r
+ builder.setPacketInMask(decodePacketInMask(rawMessage));\r
+ builder.setPortStatusMask(decodePortStatusMask(rawMessage));\r
+ builder.setFlowRemovedMask(decodeFlowRemovedMask(rawMessage));\r
+ return builder.build();\r
+ }\r
+ \r
+ private static List<PacketInMask> decodePacketInMask(ByteBuf outputBuf) {\r
+ List<PacketInReason> readPIRList = new ArrayList<PacketInReason>();\r
+ List<PacketInMask> inMasks = new ArrayList<PacketInMask>();\r
+ PacketInMaskBuilder maskBuilder = new PacketInMaskBuilder();\r
+ \r
+ readPIRList.add(decodedPacketInReason((int) outputBuf.readUnsignedInt()));\r
+ readPIRList.add(decodedPacketInReason((int) outputBuf.readUnsignedInt()));\r
+ inMasks.add(maskBuilder.setMask(readPIRList).build()); \r
+ return inMasks;\r
+ }\r
+ \r
+ private static List<PortStatusMask> decodePortStatusMask(ByteBuf outputBuf) {\r
+ List<PortReason> readPortReasonList = new ArrayList<PortReason>();\r
+ List<PortStatusMask> inMasks = new ArrayList<PortStatusMask>();\r
+ PortStatusMaskBuilder maskBuilder = new PortStatusMaskBuilder();\r
+ \r
+ readPortReasonList.add(decodePortReason((int) outputBuf.readUnsignedInt()));\r
+ readPortReasonList.add(decodePortReason((int) outputBuf.readUnsignedInt()));\r
+ inMasks.add(maskBuilder.setMask(readPortReasonList).build()); \r
+ return inMasks;\r
+ }\r
+ \r
+ private static List<FlowRemovedMask> decodeFlowRemovedMask(ByteBuf outputBuf) {\r
+ List<FlowRemovedReason> readFlowRemovedReasonList = new ArrayList<FlowRemovedReason>();\r
+ List<FlowRemovedMask> inMasks = new ArrayList<FlowRemovedMask>();\r
+ FlowRemovedMaskBuilder maskBuilder = new FlowRemovedMaskBuilder();\r
+ \r
+ readFlowRemovedReasonList.add(decodeFlowRemovedReason((int) outputBuf.readUnsignedInt()));\r
+ readFlowRemovedReasonList.add(decodeFlowRemovedReason((int) outputBuf.readUnsignedInt()));\r
+ inMasks.add(maskBuilder.setMask(readFlowRemovedReasonList).build()); \r
+ return inMasks;\r
+ }\r
+ \r
+ private static PacketInReason decodedPacketInReason(int input) {\r
+ PacketInReason reason = null;\r
+ Boolean OFPRNOMATCH = (input & (1 << 0)) > 0;\r
+ Boolean OFPRACTION = (input & (1 << 1)) > 0;\r
+ Boolean OFPRINVALIDTTL = (input & (1 << 2)) > 0;\r
+ \r
+ if (OFPRNOMATCH) {\r
+ return PacketInReason.forValue(0);\r
+ }\r
+ if (OFPRACTION) {\r
+ return PacketInReason.forValue(1);\r
+ }\r
+ if (OFPRINVALIDTTL) {\r
+ return PacketInReason.forValue(2);\r
+ }\r
+ \r
+ return reason;\r
+ }\r
+ \r
+ private static PortReason decodePortReason(int input) {\r
+ PortReason reason = null;\r
+ Boolean OFPPRADD = (input & (1 << 0)) > 0;\r
+ Boolean OFPPRDELETE = (input & (1 << 1)) > 0;\r
+ Boolean OFPPRMODIFY = (input & (1 << 2)) > 0;\r
+ \r
+ if (OFPPRADD) {\r
+ return PortReason.forValue(0);\r
+ }\r
+ if (OFPPRDELETE) {\r
+ return PortReason.forValue(1);\r
+ }\r
+ if (OFPPRMODIFY) {\r
+ return PortReason.forValue(2);\r
+ }\r
+ \r
+ return reason;\r
+ }\r
+ \r
+ private static FlowRemovedReason decodeFlowRemovedReason(int input) {\r
+ FlowRemovedReason reason = null;\r
+ Boolean OFPRRIDLETIMEOUT = (input & (1 << 0)) > 0;\r
+ Boolean OFPRRHARDTIMEOUT = (input & (1 << 1)) > 0;\r
+ Boolean OFPRRDELETE = (input & (1 << 2)) > 0;\r
+ Boolean OFPRRGROUPDELETE = (input & (1 << 3)) > 0;\r
+ \r
+ if (OFPRRIDLETIMEOUT) {\r
+ return FlowRemovedReason.forValue(0);\r
+ }\r
+ if (OFPRRHARDTIMEOUT) {\r
+ return FlowRemovedReason.forValue(1);\r
+ }\r
+ if (OFPRRDELETE) {\r
+ return FlowRemovedReason.forValue(2);\r
+ }\r
+ if (OFPRRGROUPDELETE) {\r
+ return FlowRemovedReason.forValue(3);\r
+ }\r
+ \r
+ return reason;\r
+ }\r
+}\r
* @author michal.polkorab\r
*/\r
public class RoleReplyMessageFactory implements OFDeserializer<RoleRequestOutput>{\r
-\r
private static RoleReplyMessageFactory instance;\r
private static final byte PADDING_IN_ROLE_REPLY_HEADER = 4;\r
\r
RoleRequestOutputBuilder builder = new RoleRequestOutputBuilder();\r
builder.setVersion(version);\r
builder.setXid(rawMessage.readUnsignedInt());\r
- byte[] role = new byte[Integer.SIZE/Byte.SIZE];\r
- rawMessage.readBytes(role);\r
- builder.setRole(ControllerRole.forValue(new BigInteger(role).intValue()));\r
+ builder.setRole(ControllerRole.forValue((int) rawMessage.readUnsignedInt()));\r
rawMessage.skipBytes(PADDING_IN_ROLE_REPLY_HEADER);\r
byte[] generationID = new byte[8];\r
rawMessage.readBytes(generationID);\r
import org.opendaylight.openflowjava.protocol.impl.serialization.factories.GroupModInputMessageFactory;\r
import org.opendaylight.openflowjava.protocol.impl.serialization.factories.HelloInputMessageFactory;\r
import org.opendaylight.openflowjava.protocol.impl.serialization.factories.MeterModInputMessageFactory;\r
+import org.opendaylight.openflowjava.protocol.impl.serialization.factories.MultipartRequestMessageFactory;\r
import org.opendaylight.openflowjava.protocol.impl.serialization.factories.PacketOutInputMessageFactory;\r
import org.opendaylight.openflowjava.protocol.impl.serialization.factories.PortModInputMessageFactory;\r
import org.opendaylight.openflowjava.protocol.impl.serialization.factories.RoleRequestInputMessageFactory;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GroupModInput;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.HelloInput;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MeterModInput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestMessage;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PacketOutInput;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PortModInput;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.RoleRequestInput;\r
table.put(new MessageTypeKey<>(OF13, GroupModInput.class), GroupModInputMessageFactory.getInstance());\r
table.put(new MessageTypeKey<>(OF13, HelloInput.class), HelloInputMessageFactory.getInstance());\r
table.put(new MessageTypeKey<>(OF13, MeterModInput.class), MeterModInputMessageFactory.getInstance());\r
+ table.put(new MessageTypeKey<>(OF13, MultipartRequestMessage.class), MultipartRequestMessageFactory.getInstance());\r
table.put(new MessageTypeKey<>(OF13, PacketOutInput.class), PacketOutInputMessageFactory.getInstance());\r
table.put(new MessageTypeKey<>(OF13, PortModInput.class), PortModInputMessageFactory.getInstance());\r
table.put(new MessageTypeKey<>(OF13, RoleRequestInput.class), RoleRequestInputMessageFactory.getInstance());\r
\r
/** Code type of Experimenter message */\r
public static final byte MESSAGE_TYPE = 4;\r
- private static final int MESSAGE_LENGTH = 16;\r
+ private static int dataLength;\r
private static ExperimenterInputMessageFactory instance;\r
\r
private ExperimenterInputMessageFactory() {\r
@Override\r
public void messageToBuffer(short version, ByteBuf out,\r
ExperimenterInput message) {\r
- \r
+ dataLength = message.getData().length;\r
ByteBufUtils.writeOFHeader(instance, message, out);\r
out.writeInt(message.getExperimenter().intValue());\r
out.writeInt(message.getExpType().intValue());\r
+ out.writeBytes(message.getData());\r
}\r
\r
@Override\r
public int computeLength() {\r
- return MESSAGE_LENGTH;\r
+ int ofHeaderLength = 8; //OFHeaderLength\r
+ int messageLength = 8; //experimenterHeaderLength\r
+ messageLength = messageLength + ofHeaderLength + dataLength;\r
+ return messageLength;\r
}\r
\r
@Override\r
public byte getMessageType() {\r
return MESSAGE_TYPE;\r
}\r
-\r
+ \r
}\r
/* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */\r
package org.opendaylight.openflowjava.protocol.impl.serialization.factories;\r
\r
+import java.util.Iterator;\r
+import java.util.List;\r
+\r
import io.netty.buffer.ByteBuf;\r
\r
import org.opendaylight.openflowjava.protocol.impl.serialization.OFSerializer;\r
import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.HelloInput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.hello.Elements;\r
\r
/**\r
* @author michal.polkorab\r
public byte getMessageType() {\r
return MESSAGE_TYPE;\r
}\r
- \r
+ \r
}\r
--- /dev/null
+/* 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
+\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+\r
+import org.opendaylight.openflowjava.protocol.impl.serialization.OFSerializer;\r
+import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartRequestFlags;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestMessage;\r
+\r
+/**\r
+ * @author timotej.kubas\r
+ *\r
+ */\r
+public class MultipartRequestMessageFactory implements OFSerializer<MultipartRequestMessage> {\r
+ private static final byte MESSAGE_TYPE = 18;\r
+ private static final int MESSAGE_LENGTH = 16;\r
+ private static MultipartRequestMessageFactory instance; \r
+ private static final byte PADDING_IN_MULTIPART_REQUEST_MESSAGE = 4;\r
+ private MultipartRequestMessageFactory() {\r
+ // singleton\r
+ }\r
+ \r
+ /**\r
+ * @return singleton factory\r
+ */\r
+ public static MultipartRequestMessageFactory getInstance() {\r
+ if (instance == null) {\r
+ instance = new MultipartRequestMessageFactory();\r
+ }\r
+ return instance;\r
+ }\r
+ \r
+ @Override\r
+ public void messageToBuffer(short version, ByteBuf out,\r
+ MultipartRequestMessage message) {\r
+ ByteBufUtils.writeOFHeader(instance, message, out);\r
+ out.writeShort(message.getType().getIntValue());\r
+ out.writeShort(createMultipartRequestFlagsBitmask(message.getFlags()));\r
+ // TODO multipart body (message.getMultipartRequestBody())\r
+ ByteBufUtils.padBuffer(PADDING_IN_MULTIPART_REQUEST_MESSAGE, out);\r
+ }\r
+ \r
+ @Override\r
+ public int computeLength() {\r
+ return MESSAGE_LENGTH;\r
+ }\r
+ @Override\r
+ public byte getMessageType() {\r
+ return MESSAGE_TYPE;\r
+ } \r
+ \r
+ private static int createMultipartRequestFlagsBitmask(MultipartRequestFlags flags) {\r
+ int multipartRequestFlagsBitmask = 0;\r
+ Map<Integer, Boolean> multipartRequestFlagsMap = new HashMap<>();\r
+ multipartRequestFlagsMap.put(0, flags.isOFPMPFREQMORE());\r
+ \r
+ multipartRequestFlagsBitmask = ByteBufUtils.fillBitMaskFromMap(multipartRequestFlagsMap);\r
+ return multipartRequestFlagsBitmask;\r
+ }\r
+}\r
Assert.assertTrue(builtByFactory.getCookie().longValue() == 0x0001020304050607L);\r
Assert.assertTrue(builtByFactory.getPriority() == 0x03);\r
Assert.assertEquals("Wrong reason", 0x02, builtByFactory.getReason().getIntValue());\r
- Assert.assertEquals("Wrong tableId", new TableId((long) 4), builtByFactory.getTableId());\r
+ Assert.assertEquals("Wrong tableId", new TableId(4L), builtByFactory.getTableId());\r
Assert.assertEquals("Wrong durationSec", 0x02L, builtByFactory.getDurationSec().longValue());\r
Assert.assertEquals("Wrong durationNsec", 0x05L, builtByFactory.getDurationNsec().longValue());\r
Assert.assertEquals("Wrong idleTimeout", 0x01, builtByFactory.getIdleTimeout().intValue());\r
--- /dev/null
+/* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */\r
+package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import io.netty.buffer.ByteBuf;\r
+\r
+import org.junit.Assert;\r
+import org.junit.Test;\r
+import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowRemovedReason;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PacketInReason;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortReason;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetAsyncOutput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.get.async.reply.FlowRemovedMask;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.get.async.reply.FlowRemovedMaskBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.get.async.reply.PacketInMask;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.get.async.reply.PacketInMaskBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.get.async.reply.PortStatusMask;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.get.async.reply.PortStatusMaskBuilder;\r
+\r
+/**\r
+ * @author timotej.kubas\r
+ *\r
+ */\r
+public class GetAsyncReplyMessageFactoryTest {\r
+\r
+ /**\r
+ * Testing {@link GetAsyncReplyMessageFactory} for correct translation into POJO\r
+ */\r
+ @Test\r
+ public void testGetAsyncReplyMessage() {\r
+ ByteBuf bb = BufferHelper.buildBuffer("00 00 00 02 "+ \r
+ "00 00 00 02 "+\r
+ "00 00 00 02 "+\r
+ "00 00 00 02 "+\r
+ "00 00 00 04 "+\r
+ "00 00 00 04");\r
+ GetAsyncOutput builtByFactory = BufferHelper.decodeV13(GetAsyncReplyMessageFactory.getInstance(), bb);\r
+\r
+ BufferHelper.checkHeaderV13(builtByFactory);\r
+ Assert.assertEquals("Wrong packetInMask",createPacketInMask().get(0).getMask(), \r
+ builtByFactory.getPacketInMask().get(0).getMask());\r
+ Assert.assertEquals("Wrong portStatusMask",createPortStatusMask().get(0).getMask(), \r
+ builtByFactory.getPortStatusMask().get(0).getMask());\r
+ Assert.assertEquals("Wrong flowRemovedMask",createFlowRemovedMask().get(0).getMask(), \r
+ builtByFactory.getFlowRemovedMask().get(0).getMask());\r
+ }\r
+ \r
+ private static List<PacketInMask> createPacketInMask() {\r
+ List<PacketInReason> readPIRList = new ArrayList<PacketInReason>();\r
+ List<PacketInMask> inMasks = new ArrayList<PacketInMask>();\r
+ PacketInMaskBuilder maskBuilder = new PacketInMaskBuilder();\r
+ \r
+ readPIRList.add(PacketInReason.forValue(1));\r
+ readPIRList.add(PacketInReason.forValue(1));\r
+ inMasks.add(maskBuilder.setMask(readPIRList).build());\r
+ return inMasks;\r
+ }\r
+ \r
+ private static List<PortStatusMask> createPortStatusMask() {\r
+ List<PortReason> readPortReasonList = new ArrayList<PortReason>();\r
+ List<PortStatusMask> inMasks = new ArrayList<PortStatusMask>();\r
+ PortStatusMaskBuilder maskBuilder = new PortStatusMaskBuilder();\r
+ \r
+ readPortReasonList.add(PortReason.forValue(1));\r
+ readPortReasonList.add(PortReason.forValue(1));\r
+ inMasks.add(maskBuilder.setMask(readPortReasonList).build()); \r
+ return inMasks;\r
+ }\r
+ \r
+ private static List<FlowRemovedMask> createFlowRemovedMask() {\r
+ List<FlowRemovedReason> readFlowRemovedReasonList = new ArrayList<FlowRemovedReason>();\r
+ List<FlowRemovedMask> inMasks = new ArrayList<FlowRemovedMask>();\r
+ FlowRemovedMaskBuilder maskBuilder = new FlowRemovedMaskBuilder();\r
+ \r
+ readFlowRemovedReasonList.add(FlowRemovedReason.forValue(2));\r
+ readFlowRemovedReasonList.add(FlowRemovedReason.forValue(2));\r
+ inMasks.add(maskBuilder.setMask(readFlowRemovedReasonList).build()); \r
+ return inMasks;\r
+ }\r
+}\r
Assert.assertEquals("Wrong bufferID", 0x00010203L, builtByFactory.getBufferId().longValue());\r
Assert.assertEquals("Wrong totalLength", 0x0102, builtByFactory.getTotalLen().intValue());\r
Assert.assertEquals("Wrong reason", 0x01, builtByFactory.getReason().shortValue());\r
- Assert.assertEquals("Wrong tableID", new TableId((long) 4), builtByFactory.getTableId());\r
+ Assert.assertEquals("Wrong tableID", new TableId(4L), builtByFactory.getTableId());\r
Assert.assertEquals("Wrong cookie", 0x0001020304050607L, builtByFactory.getCookie().longValue());\r
Assert.assertArrayEquals("Wrong data", ByteBufUtils.hexStringToBytes("01 02 03 04"), builtByFactory.getData());\r
}\r
QueueGetConfigReplyMessageFactory.getInstance(), bb);\r
\r
BufferHelper.checkHeaderV13(builtByFactory);\r
- Assert.assertTrue("Wrong port", 66051L == builtByFactory.getPort().getValue());\r
- Assert.assertTrue("Wrong queues", true == compareLists(builtByFactory.getQueues(),\r
- createQueuesList()));\r
+ Assert.assertEquals("Wrong port", 66051L, builtByFactory.getPort().getValue().longValue());\r
+ Assert.assertEquals("Wrong queues", builtByFactory.getQueues(),\r
+ createQueuesList());\r
}\r
\r
private static List<Queues> createQueuesList() {\r
return propertiesList;\r
}\r
\r
- private static boolean compareLists(List<Queues> originalList,\r
- List<Queues> testList) {\r
- boolean result = false;\r
- int originalListLength = originalList.size();\r
- for (int i = 0; i < originalListLength; i++) {\r
- if (originalList.get(i).getPort().equals(testList.get(i).getPort())) {\r
- result = true;\r
- } else {\r
- result = false;\r
- break;\r
- }\r
- if (originalList.get(i).getQueueId()\r
- .equals(testList.get(i).getQueueId())) {\r
- result = true;\r
- } else {\r
- result = false;\r
- break;\r
- }\r
- if (originalList.get(i).getProperties().get(0).getProperty()\r
- .equals(testList.get(i).getProperties().get(0).getProperty())) {\r
- result = true;\r
- } else {\r
- result = false;\r
- break;\r
- }\r
- }\r
- return result;\r
- }\r
-\r
}\r
ByteBuf bb = BufferHelper.buildBuffer("00 01 02 03 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 00 00 00 00 00 00 02 00 00 00 00 00 00");\r
GetQueueConfigOutput builtByFactory = BufferHelper.decodeV13(QueueGetConfigReplyMessageFactory.getInstance(), bb);\r
BufferHelper.checkHeaderV13(builtByFactory);\r
- Assert.assertTrue("Wrong port",66051L == builtByFactory.getPort().getValue());\r
- Assert.assertTrue("Wrong queues", true == compareLists(builtByFactory.getQueues(), createQueuesList()));\r
+ Assert.assertEquals("Wrong port", 66051L, builtByFactory.getPort().getValue().longValue());\r
+ Assert.assertEquals("Wrong queues", builtByFactory.getQueues(), createQueuesList());\r
}\r
\r
public List<Queues> createQueuesList(){\r
- final byte PADDING_IN_PACKET_QUEUE_HEADER = 6;\r
List<Queues> queuesList = new ArrayList<Queues>();\r
QueuesBuilder qb = new QueuesBuilder();\r
- qb.setQueueId(new QueueId((long) 1));\r
- qb.setPort(new PortNumber((long) 1));\r
+ qb.setQueueId(new QueueId(1L));\r
+ qb.setPort(new PortNumber(1L));\r
qb.setProperties(createPropertiesList());\r
queuesList.add(qb.build());\r
\r
}\r
\r
public List<Properties> createPropertiesList(){\r
- final byte PADDING_IN_QUEUE_PROPERTY_HEADER = 4;\r
List<Properties> propertiesList = new ArrayList<Properties>();\r
PropertiesBuilder pb = new PropertiesBuilder();\r
pb.setProperty(QueueProperty.values()[2]);\r
\r
return propertiesList;\r
}\r
- \r
- public boolean compareLists(List<Queues> originalList, List<Queues> testList){\r
- boolean decision = false;\r
- int originalListLength = originalList.size();\r
- int testListLength = testList.size();\r
- \r
- for(int i=0; i<originalListLength; i++){\r
- if(originalList.get(i).getPort().equals(testList.get(i).getPort())) {\r
- decision = true;\r
- } else {\r
- decision = false;\r
- break;\r
- }\r
- if(originalList.get(i).getQueueId().equals(testList.get(i).getQueueId())) {\r
- decision = true;\r
- } else {\r
- decision = false;\r
- break;\r
- }\r
- if(originalList.get(i).getProperties().get(0).getProperty().equals(\r
- testList.get(i).getProperties().get(0).getProperty())) {\r
- decision = true;\r
- } else {\r
- decision = false;\r
- break;\r
- }\r
- }\r
- return decision;\r
- }\r
}\r
\r
/**\r
* @author michal.polkorab\r
- *\r
+ * @author timotej.kubas\r
*/\r
public class ExperimenterInputMessageFactoryTest {\r
\r
*/\r
@Test\r
public void test() throws Exception {\r
- ExperimenterInputBuilder eib = new ExperimenterInputBuilder();\r
- BufferHelper.setupHeader(eib);\r
- eib.setExperimenter(0x0001020304L);\r
- eib.setExpType(0x0001020304L);\r
- ExperimenterInput ei = eib.build();\r
+ ExperimenterInputBuilder builder = new ExperimenterInputBuilder();\r
+ BufferHelper.setupHeader(builder);\r
+ builder.setExperimenter(0x0001020304L);\r
+ builder.setExpType(0x0001020304L);\r
+ builder.setData(new byte[] {0x01, 0x02, 0x03});\r
+ ExperimenterInput message = builder.build();\r
\r
ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
- ExperimenterInputMessageFactory eimf = ExperimenterInputMessageFactory.getInstance();\r
- eimf.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, ei);\r
+ ExperimenterInputMessageFactory factory = ExperimenterInputMessageFactory.getInstance();\r
+ factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
\r
- BufferHelper.checkHeaderV13(out, EXPERIMENTER_REQUEST_MESSAGE_CODE_TYPE, 16);\r
+ BufferHelper.checkHeaderV13(out, EXPERIMENTER_REQUEST_MESSAGE_CODE_TYPE, factory.computeLength());\r
Assert.assertEquals("Wrong experimenter", 0x0001020304L, out.readUnsignedInt());\r
Assert.assertEquals("Wrong expType", 0x0001020304L, out.readUnsignedInt());\r
+ Assert.assertArrayEquals("Wrong data", message.getData(), readData(out));\r
+ }\r
+ \r
+ private static byte[] readData(ByteBuf input) {\r
+ byte[] data = new byte[input.readableBytes()]; \r
+ input.readBytes(data);\r
+ return data;\r
}\r
-\r
-\r
}\r
Assert.assertEquals("Wrong type", message.getType().getIntValue(), out.readByte());\r
out.skipBytes(PADDING_IN_GROUP_MOD_MESSAGE);\r
Assert.assertEquals("Wrong groupId", message.getGroupId().intValue(), out.readUnsignedInt());\r
- Assert.assertEquals("Wrong bucketList", true, compareBucketsLists(createBucketsList(), createBucketsListFromBufer(out)));\r
+ Assert.assertEquals("Wrong bucketList", createBucketsList(), createBucketsListFromBufer(out));\r
}\r
\r
private static List<Buckets> createBucketsList(){\r
bucketsList.add(bucket);\r
return bucketsList;\r
}\r
- \r
- private static boolean compareBucketsLists(List<Buckets> bucketsFromMessage, List<Buckets> bucketsFromBuffer) {\r
- boolean result = false;\r
- int bucketsFromMessageLength = bucketsFromMessage.size();\r
- for (int i = 0; i < bucketsFromMessageLength; i++) {\r
- if (bucketsFromMessage.get(i).getWeight().equals(bucketsFromBuffer.get(i).getWeight())) {\r
- result = true;\r
- } else {\r
- result = false;\r
- break;\r
- }\r
- if (bucketsFromMessage.get(i).getWatchPort()\r
- .equals(bucketsFromBuffer.get(i).getWatchPort())) {\r
- result = true;\r
- } else {\r
- result = false;\r
- break;\r
- }\r
- if (bucketsFromMessage.get(i).getWatchGroup()\r
- .equals(bucketsFromBuffer.get(i).getWatchGroup())) {\r
- result = true;\r
- } else {\r
- result = false;\r
- break;\r
- }\r
- }\r
- // TODO get method for field length missing\r
- // TODO actions structure missing\r
- return result;\r
- }\r
}\r
Assert.assertEquals("Wrong meterModCommand", message.getCommand().getIntValue(), out.readShort());\r
Assert.assertEquals("Wrong meterFlags", message.getFlags(), decodeMeterModFlags(out.readShort()));\r
Assert.assertEquals("Wrong meterId", message.getMeterId().getValue().intValue(), out.readUnsignedInt());\r
- Assert.assertEquals("Wrong bands", true, compareBandsLists(createBandsList(), decodeBandsList(out)));\r
+ Assert.assertEquals("Wrong bands", createBandsList(), decodeBandsList(out));\r
}\r
\r
private static MeterFlags decodeMeterModFlags(short input){\r
bandsList.add(band);\r
return bandsList;\r
}\r
- \r
- private static boolean compareBandsLists(List<Bands> bandsFromMessage, List<Bands> bandsFromBuffer) {\r
- boolean result = false;\r
- int bandsFromMessageLength = bandsFromMessage.size();\r
- for (int i = 0; i < bandsFromMessageLength; i++) {\r
- if (bandsFromMessage.get(i).getType().equals(bandsFromBuffer.get(i).getType())) {\r
- result = true;\r
- } else {\r
- result = false;\r
- break;\r
- }\r
- if (bandsFromMessage.get(i).getRate()\r
- .equals(bandsFromBuffer.get(i).getRate())) {\r
- result = true;\r
- } else {\r
- result = false;\r
- break;\r
- }\r
- if (bandsFromMessage.get(i).getBurstSize()\r
- .equals(bandsFromBuffer.get(i).getBurstSize())) {\r
- result = true;\r
- } else {\r
- result = false;\r
- break;\r
- }\r
- }\r
- // TODO get method for field length missing\r
- // TODO actions structure missing\r
- return result;\r
- }\r
}\r
--- /dev/null
+/* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */\r
+package org.opendaylight.openflowjava.protocol.impl.serialization.factories;\r
+\r
+import junit.framework.Assert;\r
+import io.netty.buffer.ByteBuf;\r
+import io.netty.buffer.UnpooledByteBufAllocator;\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.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterFlags;\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.protocol.rev130731.MultipartRequestMessage;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartRequestMessageBuilder;\r
+\r
+/**\r
+ * @author timotej.kubas\r
+ *\r
+ */\r
+public class MultipartRequestMessageFactoryTest {\r
+ private static final byte PADDING_IN_MULTIPART_REQUEST_MESSAGE = 4;\r
+ \r
+ /**\r
+ * @throws Exception\r
+ * Testing of {@link MultipartRequestMessageFactory} for correct translation from POJO\r
+ */\r
+ @Test\r
+ public void testMultipartRequestMessageFactory() throws Exception {\r
+ MultipartRequestMessageBuilder builder = new MultipartRequestMessageBuilder();\r
+ BufferHelper.setupHeader(builder);\r
+ builder.setType(MultipartType.forValue(5));\r
+ builder.setFlags(new MultipartRequestFlags(true));\r
+ MultipartRequestMessage message = builder.build();\r
+ \r
+ ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
+ MultipartRequestMessageFactory factory = MultipartRequestMessageFactory.getInstance();\r
+ factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
+ \r
+ BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength());\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
+ // TODO multipart body\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
factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
\r
BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength());\r
- Assert.assertTrue("Wrong packetInMask", comparePIRLists(message.getPacketInMask(), readPacketInMask(out)));\r
- Assert.assertTrue("Wrong packetInMask", comparePortReasonLists(message.getPortStatusMask(), readPortStatusMask(out)));\r
- Assert.assertTrue("Wrong packetInMask", compareFlowRemovedReasonLists(message.getFlowRemovedMask(), readFlowRemovedReasonMask(out)));\r
+ Assert.assertEquals("Wrong packetInMask", message.getPacketInMask(), readPacketInMask(out));\r
+ Assert.assertEquals("Wrong packetInMask", message.getPortStatusMask(), readPortStatusMask(out));\r
+ Assert.assertEquals("Wrong packetInMask", message.getFlowRemovedMask(), readFlowRemovedReasonMask(out));\r
\r
}\r
\r
\r
private static PacketInReason readPacketInReason(int input) {\r
PacketInReason reason = null;\r
- Boolean OFPRNOMATCH = (input & (1 << 0)) > 0;\r
- Boolean OFPRACTION = (input & (1 << 1)) > 0;\r
- Boolean OFPRINVALIDTTL = (input & (1 << 2)) > 0;\r
+ boolean OFPRNOMATCH = (input & (1 << 0)) > 0;\r
+ boolean OFPRACTION = (input & (1 << 1)) > 0;\r
+ boolean OFPRINVALIDTTL = (input & (1 << 2)) > 0;\r
\r
if (OFPRNOMATCH) {\r
return PacketInReason.forValue(0);\r
\r
private static PortReason readPortReason(int input) {\r
PortReason reason = null;\r
- Boolean OFPPRADD = (input & (1 << 0)) > 0;\r
- Boolean OFPPRDELETE = (input & (1 << 1)) > 0;\r
- Boolean OFPPRMODIFY = (input & (1 << 2)) > 0;\r
+ boolean OFPPRADD = (input & (1 << 0)) > 0;\r
+ boolean OFPPRDELETE = (input & (1 << 1)) > 0;\r
+ boolean OFPPRMODIFY = (input & (1 << 2)) > 0;\r
\r
if (OFPPRADD) {\r
return PortReason.forValue(0);\r
\r
private static FlowRemovedReason readFlowRemovedReason(int input) {\r
FlowRemovedReason reason = null;\r
- Boolean OFPRRIDLETIMEOUT = (input & (1 << 0)) > 0;\r
- Boolean OFPRRHARDTIMEOUT = (input & (1 << 1)) > 0;\r
- Boolean OFPRRDELETE = (input & (1 << 2)) > 0;\r
- Boolean OFPRRGROUPDELETE = (input & (1 << 3)) > 0;\r
+ boolean OFPRRIDLETIMEOUT = (input & (1 << 0)) > 0;\r
+ boolean OFPRRHARDTIMEOUT = (input & (1 << 1)) > 0;\r
+ boolean OFPRRDELETE = (input & (1 << 2)) > 0;\r
+ boolean OFPRRGROUPDELETE = (input & (1 << 3)) > 0;\r
\r
if (OFPRRIDLETIMEOUT) {\r
return FlowRemovedReason.forValue(0);\r
\r
return reason;\r
}\r
- \r
- private static boolean comparePIRLists(List<PacketInReason> fromMessage, List<PacketInReason> fromBuffer) {\r
- boolean result = false;\r
- int romMessageLength = fromMessage.size();\r
- for (int i = 0; i < romMessageLength; i++) {\r
- if ((fromMessage.get(i).getIntValue()) == (fromBuffer.get(i).getIntValue())) {\r
- result = true;\r
- } else {\r
- result = false;\r
- break;\r
- }\r
- }\r
- return result;\r
- }\r
- \r
- private static boolean comparePortReasonLists(List<PortReason> fromMessage, \r
- List<PortReason> fromBuffer) {\r
- boolean result = false;\r
- int fromMessageLength = fromMessage.size();\r
- for (int i = 0; i < fromMessageLength; i++) {\r
- if ((fromMessage.get(i).getIntValue()) == (fromBuffer.get(i).getIntValue())) {\r
- result = true;\r
- } else {\r
- result = false;\r
- break;\r
- }\r
- }\r
- return result;\r
- }\r
- \r
- private static boolean compareFlowRemovedReasonLists(List<FlowRemovedReason> fromMessage, \r
- List<FlowRemovedReason> fromBuffer) {\r
- boolean result = false;\r
- int fromMessageLength = fromMessage.size();\r
- for (int i = 0; i < fromMessageLength; i++) {\r
- if ((fromMessage.get(i).getIntValue()) == (fromBuffer.get(i).getIntValue())) {\r
- result = true;\r
- } else {\r
- result = false;\r
- break;\r
- }\r
- }\r
- return result;\r
- }\r
}\r