Renamed factory dependent local variables (builders) in deserialization factories
Added control check in SwitchConnectionProviderImpl startup()
Removed setChannel method from MessageConsumer interface
Quickfixed - correct usage of enums in deserialization factories
Updated logging and javadoc
Signed-off-by: michal.polkorab <michal.polkorab@pantheon.sk>
Change-Id: I1a71c1d0aef03f8052c9d4e1b256a1fdf6b0d438
/**
* @param channel the channel to be set - used for communication
*/
- @Override
public void setChannel(Channel channel) {
this.channel = channel;
}
package org.opendaylight.openflowjava.protocol.impl.connection;
-import io.netty.channel.Channel;
-
import org.opendaylight.yangtools.yang.binding.DataObject;
/**
* @param message to process
*/
public void consume(DataObject message);
-
- /**
- * @param channel sets processing channel
- */
- public void setChannel(Channel channel);
+
}
/**
* @author mirehak
- *
+ * @author michal.polkorab
*/
public class SwitchConnectionProviderImpl implements SwitchConnectionProvider {
@Override
public void configure(Collection<ConnectionConfiguration> connConfigs) {
- LOG.debug("configurating ..");
+ LOG.debug("Configurating ..");
//TODO - add and configure servers according to configuration
serverLot = new HashSet<>();
@Override
public Future<List<Boolean>> shutdown() {
- LOG.debug("shutdown summoned");
+ LOG.debug("Shutdown summoned");
ListenableFuture<List<Boolean>> result = SettableFuture.create();
try {
List<ListenableFuture<Boolean>> shutdownChain = new ArrayList<>();
ListenableFuture<Boolean> shutdownFuture = server.shutdown();
shutdownChain.add(shutdownFuture);
}
-
if (!shutdownChain.isEmpty()) {
result = Futures.allAsList(shutdownChain);
} else {
- throw new IllegalStateException("no servers configured");
+ throw new IllegalStateException("No servers configured");
}
} catch (Exception e) {
SettableFuture<List<Boolean>> exFuture = SettableFuture.create();
LOG.debug("startup summoned");
ListenableFuture<List<Boolean>> result = SettableFuture.create();
try {
- //TODO - check config, status of servers
+ if (serverLot.isEmpty()) {
+ throw new IllegalStateException("No servers configured");
+ }
+ for (ServerFacade server : serverLot) {
+ if (server.getIsOnlineFuture().isDone()) {
+ throw new IllegalStateException("Servers already running");
+ }
+ }
if (switchConnectionHandler == null) {
throw new IllegalStateException("switchConnectionHandler is not set");
}
-
- // starting
List<ListenableFuture<Boolean>> starterChain = new ArrayList<>();
for (ServerFacade server : serverLot) {
new Thread(server).start();
ListenableFuture<Boolean> isOnlineFuture = server.getIsOnlineFuture();
starterChain.add(isOnlineFuture);
}
-
if (!starterChain.isEmpty()) {
result = Futures.allAsList(starterChain);
} else {
- throw new IllegalStateException("no servers configured");
+ throw new IllegalStateException("No servers configured");
}
} catch (Exception e) {
SettableFuture<List<Boolean>> exFuture = SettableFuture.create();
import org.slf4j.LoggerFactory;\r
\r
/**\r
- * Transforms OpenFlow Protocol messages to POJOs and reverse\r
+ * Transforms OpenFlow Protocol messages to POJOs\r
*\r
* @author michal.polkorab\r
*/\r
* Constructor of class\r
*/\r
public OF13Decoder() {\r
- LOGGER.info("Creating OF 1.3 Codec");\r
+ LOGGER.info("Creating OF 1.3 Decoder");\r
}\r
\r
@Override\r
\r
import org.opendaylight.openflowjava.protocol.impl.serialization.SerializationFactory;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
\r
import io.netty.buffer.ByteBuf;\r
import io.netty.channel.ChannelHandlerContext;\r
import io.netty.handler.codec.MessageToByteEncoder;\r
\r
/**\r
+ * Transforms OpenFlow Protocol messages to POJOs\r
+ * \r
* @author michal.polkorab\r
- *\r
*/\r
public class OF13Encoder extends MessageToByteEncoder<OfHeader> {\r
\r
+ private static final Logger LOGGER = LoggerFactory.getLogger(OF13Encoder.class);\r
+ \r
+ /** Constructor of class */\r
+ public OF13Encoder() {\r
+ LOGGER.info("Creating OF13Encoder");\r
+ }\r
@Override\r
protected void encode(ChannelHandlerContext ctx, OfHeader msg, ByteBuf out)\r
throws Exception {\r
public static DataObject bufferToMessage(ByteBuf rawMessage, short version) {\r
DataObject dataObject = null;\r
short type = rawMessage.readUnsignedByte();\r
- \r
- // TODO - check if no change happened, so that skipping length would cause problems\r
rawMessage.skipBytes(Short.SIZE / Byte.SIZE);\r
\r
MessageTypeCodeKey msgTypeCodeKey = new MessageTypeCodeKey(version, type);\r
\r
@Override\r
public BarrierOutput bufferToMessage(ByteBuf rawMessage, short version) {\r
- BarrierOutputBuilder bob = new BarrierOutputBuilder();\r
- bob.setVersion(version);\r
- bob.setXid(rawMessage.readUnsignedInt());\r
- return bob.build();\r
+ BarrierOutputBuilder builder = new BarrierOutputBuilder();\r
+ builder.setVersion(version);\r
+ builder.setXid(rawMessage.readUnsignedInt());\r
+ return builder.build();\r
}\r
\r
}\r
return instance;\r
}\r
\r
- /* (non-Javadoc)\r
- * @see org.openflow.core.deserialization.OfDeserializer#createMessage(io.netty.buffer.ByteBuf, short)\r
- */\r
@Override\r
public EchoOutput bufferToMessage(ByteBuf rawMessage, short version) {\r
- EchoOutputBuilder eob = new EchoOutputBuilder();\r
- eob.setVersion(version);\r
- eob.setXid(rawMessage.readUnsignedInt());\r
- // read the rest of EchoReply message\r
- eob.setData(rawMessage.readBytes(rawMessage.readableBytes()).array());\r
- return eob.build();\r
+ EchoOutputBuilder builder = new EchoOutputBuilder();\r
+ builder.setVersion(version);\r
+ builder.setXid(rawMessage.readUnsignedInt());\r
+ builder.setData(rawMessage.readBytes(rawMessage.readableBytes()).array());\r
+ return builder.build();\r
}\r
\r
}\r
\r
@Override\r
public EchoRequestMessage bufferToMessage(ByteBuf rawMessage, short version) {\r
- EchoRequestMessageBuilder emb = new EchoRequestMessageBuilder();\r
- emb.setVersion(version);\r
- emb.setXid(rawMessage.readUnsignedInt());\r
- // read the rest of EchoRequest message\r
- emb.setData(rawMessage.readBytes(rawMessage.readableBytes()).array());\r
- return emb.build();\r
+ EchoRequestMessageBuilder builder = new EchoRequestMessageBuilder();\r
+ builder.setVersion(version);\r
+ builder.setXid(rawMessage.readUnsignedInt());\r
+ builder.setData(rawMessage.readBytes(rawMessage.readableBytes()).array());\r
+ return builder.build();\r
}\r
}\r
\r
@Override\r
public ErrorMessage bufferToMessage(ByteBuf rawMessage, short version) {\r
- ErrorMessageBuilder emb = new ErrorMessageBuilder();\r
- emb.setVersion(version);\r
- emb.setXid(rawMessage.readUnsignedInt());\r
- ErrorType[] errorTypes = ErrorType.values();\r
- // TODO - finish implementation after enums are generated with proper funcionality\r
- //emb.setType();\r
- emb.setCode(rawMessage.readInt());\r
+ ErrorMessageBuilder builder = new ErrorMessageBuilder();\r
+ builder.setVersion(version);\r
+ builder.setXid(rawMessage.readUnsignedInt());\r
+ builder.setType(ErrorType.forValue(rawMessage.readUnsignedShort()));\r
+ builder.setCode(rawMessage.readUnsignedShort());\r
byte[] data = new byte[rawMessage.readableBytes()];\r
rawMessage.readBytes(data);\r
- emb.setData(data);\r
- return emb.build();\r
+ builder.setData(data);\r
+ return builder.build();\r
}\r
\r
}\r
if (instance == null){\r
instance = new ExperimenterMessageFactory(); \r
}\r
- \r
return instance;\r
}\r
\r
@Override\r
public ExperimenterMessage bufferToMessage(ByteBuf rawMessage, short version) {\r
- ExperimenterMessageBuilder emb = new ExperimenterMessageBuilder();\r
- emb.setVersion(version);\r
- emb.setXid(rawMessage.readUnsignedInt());\r
- emb.setExperimenter(rawMessage.readUnsignedInt());\r
- emb.setExpType(rawMessage.readUnsignedInt());\r
- return emb.build();\r
+ ExperimenterMessageBuilder builder = new ExperimenterMessageBuilder();\r
+ builder.setVersion(version);\r
+ builder.setXid(rawMessage.readUnsignedInt());\r
+ builder.setExperimenter(rawMessage.readUnsignedInt());\r
+ builder.setExpType(rawMessage.readUnsignedInt());\r
+ return builder.build();\r
}\r
- \r
- \r
}\r
return instance;\r
}\r
\r
- /* (non-Javadoc)\r
- * @see org.openflow.core.deserialization.OfDeserializer#createMessage(io.netty.buffer.ByteBuf, short)\r
- */\r
@Override\r
public GetFeaturesOutput bufferToMessage(ByteBuf rawMessage, short version) {\r
- GetFeaturesOutputBuilder gfob = new GetFeaturesOutputBuilder();\r
- gfob.setVersion(version);\r
- gfob.setXid(rawMessage.readUnsignedInt());\r
- \r
- // TODO - unsigned long - check for appropriate process\r
- byte[] datapathId = new byte[8];\r
+ GetFeaturesOutputBuilder builder = new GetFeaturesOutputBuilder();\r
+ builder.setVersion(version);\r
+ builder.setXid(rawMessage.readUnsignedInt());\r
+ byte[] datapathId = new byte[Long.SIZE/Byte.SIZE];\r
rawMessage.readBytes(datapathId);\r
- gfob.setDatapathId(new BigInteger(datapathId));\r
- gfob.setBuffers(rawMessage.readUnsignedInt());\r
- gfob.setTables(rawMessage.readUnsignedByte());\r
- gfob.setAuxiliaryId(rawMessage.readUnsignedByte());\r
+ builder.setDatapathId(new BigInteger(datapathId));\r
+ builder.setBuffers(rawMessage.readUnsignedInt());\r
+ builder.setTables(rawMessage.readUnsignedByte());\r
+ builder.setAuxiliaryId(rawMessage.readUnsignedByte());\r
rawMessage.skipBytes(PADDING_IN_FEATURES_REPLY_HEADER);\r
- gfob.setCapabilities(rawMessage.readUnsignedInt());\r
- gfob.setReserved(rawMessage.readUnsignedInt());\r
- return gfob.build();\r
+ builder.setCapabilities(rawMessage.readUnsignedInt());\r
+ builder.setReserved(rawMessage.readUnsignedInt());\r
+ return builder.build();\r
}\r
\r
}\r
import java.math.BigInteger;\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.TableId;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowRemovedMessage;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.FlowRemovedMessageBuilder;\r
if(instance == null){\r
instance = new FlowRemovedMessageFactory();\r
}\r
- \r
return instance;\r
}\r
\r
@Override\r
public FlowRemovedMessage bufferToMessage(ByteBuf rawMessage, short version) {\r
- FlowRemovedMessageBuilder frmb = new FlowRemovedMessageBuilder();\r
- \r
- frmb.setVersion(version);\r
- frmb.setXid(rawMessage.readUnsignedInt());\r
- \r
- byte[] cookie = new byte[8];\r
+ FlowRemovedMessageBuilder builder = new FlowRemovedMessageBuilder();\r
+ builder.setVersion(version);\r
+ builder.setXid(rawMessage.readUnsignedInt());\r
+ byte[] cookie = new byte[Long.SIZE/Byte.SIZE];\r
rawMessage.readBytes(cookie);\r
- frmb.setCookie(new BigInteger(cookie));\r
- frmb.setPriority(rawMessage.readUnsignedShort());\r
- \r
-// TODO enum! \r
-// frmb.setReason(FlowRemovedReason.values()[rawMessage.readInt()]);\r
- rawMessage.skipBytes(1); //instead of setReason\r
- \r
- frmb.setTableId(new TableId((long)rawMessage.readUnsignedByte()));\r
- frmb.setDurationSec(rawMessage.readUnsignedInt());\r
- frmb.setDurationNsec(rawMessage.readUnsignedInt());\r
- frmb.setIdleTimeout(rawMessage.readUnsignedShort());\r
- frmb.setHardTimeout(rawMessage.readUnsignedShort());\r
- \r
- byte[] packet_count = new byte[8];\r
+ builder.setCookie(new BigInteger(cookie));\r
+ builder.setPriority(rawMessage.readUnsignedShort());\r
+ builder.setReason(FlowRemovedReason.forValue(rawMessage.readUnsignedByte()));\r
+ builder.setTableId(new TableId((long)rawMessage.readUnsignedByte()));\r
+ builder.setDurationSec(rawMessage.readUnsignedInt());\r
+ builder.setDurationNsec(rawMessage.readUnsignedInt());\r
+ builder.setIdleTimeout(rawMessage.readUnsignedShort());\r
+ builder.setHardTimeout(rawMessage.readUnsignedShort());\r
+ byte[] packet_count = new byte[Long.SIZE/Byte.SIZE];\r
rawMessage.readBytes(packet_count);\r
- frmb.setPacketCount(new BigInteger(packet_count));\r
- \r
- byte[] byte_count = new byte[8];\r
+ builder.setPacketCount(new BigInteger(packet_count));\r
+ byte[] byte_count = new byte[Long.SIZE/Byte.SIZE];\r
rawMessage.readBytes(byte_count);\r
- frmb.setByteCount(new BigInteger(byte_count));\r
- \r
- return frmb.build();\r
+ builder.setByteCount(new BigInteger(byte_count));\r
+ return builder.build();\r
}\r
-\r
}\r
import io.netty.buffer.ByteBuf;\r
\r
import org.opendaylight.openflowjava.protocol.impl.deserialization.OFDeserializer;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.SwitchConfigFlag;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetConfigOutput;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetConfigOutputBuilder;\r
\r
if(instance == null){\r
instance = new GetConfigReplyMessageFactory();\r
}\r
- \r
return instance;\r
}\r
\r
@Override\r
public GetConfigOutput bufferToMessage(ByteBuf rawMessage, short version) {\r
- GetConfigOutputBuilder gcob = new GetConfigOutputBuilder();\r
- gcob.setVersion(version);\r
- gcob.setXid(rawMessage.readUnsignedInt());\r
- // TODO - waiting for enum funcionality\r
-// gcob.setFlags(SwitchConfigFlag.values()[rawMessage.readInt()]);\r
- gcob.setMissSendLen(rawMessage.readUnsignedShort());\r
- return gcob.build();\r
+ GetConfigOutputBuilder builder = new GetConfigOutputBuilder();\r
+ builder.setVersion(version);\r
+ builder.setXid(rawMessage.readUnsignedInt());\r
+ builder.setFlags(SwitchConfigFlag.forValue(rawMessage.readUnsignedShort()));\r
+ builder.setMissSendLen(rawMessage.readUnsignedShort());\r
+ return builder.build();\r
}\r
- \r
- \r
}\r
\r
@Override\r
public HelloMessage bufferToMessage(ByteBuf rawMessage, short version) {\r
- HelloMessageBuilder hmb = new HelloMessageBuilder();\r
- hmb.setVersion(version);\r
- hmb.setXid(rawMessage.readUnsignedInt());\r
- return hmb.build();\r
+ HelloMessageBuilder builder = new HelloMessageBuilder();\r
+ builder.setVersion(version);\r
+ builder.setXid(rawMessage.readUnsignedInt());\r
+ // TODO - implement setElements()\r
+ return builder.build();\r
}\r
}\r
\r
import org.opendaylight.openflowjava.protocol.impl.deserialization.OFDeserializer;\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.MultipartReplyMessage;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessageBuilder;\r
\r
*/\r
public static MultipartReplyMessageFactory getInstance(){\r
if (instance == null){\r
-\r
instance = new MultipartReplyMessageFactory();\r
}\r
- \r
return instance;\r
}\r
\r
@Override\r
public MultipartReplyMessage bufferToMessage(ByteBuf rawMessage, short version) {\r
- MultipartReplyMessageBuilder mrmb = new MultipartReplyMessageBuilder();\r
- mrmb.setVersion(version);\r
- mrmb.setXid(rawMessage.readUnsignedInt());\r
- \r
-// TODO enum MultipartType\r
-// mrmb.setType(MultipartType.values()[rawMessage.readInt()]);\r
- rawMessage.skipBytes(2); //instead of enum\r
- \r
- mrmb.setFlags(new MultipartRequestFlags((rawMessage.readUnsignedShort() & 0x01) > 0));\r
+ MultipartReplyMessageBuilder builder = new MultipartReplyMessageBuilder();\r
+ builder.setVersion(version);\r
+ builder.setXid(rawMessage.readUnsignedInt());\r
+ builder.setType(MultipartType.forValue(rawMessage.readUnsignedShort()));\r
+ builder.setFlags(new MultipartRequestFlags((rawMessage.readUnsignedShort() & 0x01) > 0));\r
rawMessage.skipBytes(PADDING_IN_MULTIPART_REPLY_HEADER);\r
+ // TODO - implement body\r
//mrmb.setBody(rawMessage.readBytes(rawMessage.readableBytes()).array());\r
- \r
- return mrmb.build();\r
+ return builder.build();\r
} \r
}\r
if(instance == null){\r
instance = new PacketInMessageFactory();\r
}\r
- \r
return instance;\r
}\r
\r
@Override\r
public PacketInMessage bufferToMessage(ByteBuf rawMessage, short version) {\r
- PacketInMessageBuilder pimb = new PacketInMessageBuilder();\r
- pimb.setVersion(version);\r
- pimb.setXid(rawMessage.readUnsignedInt());\r
- pimb.setBufferId(rawMessage.readUnsignedInt());\r
- pimb.setTotalLen(rawMessage.readUnsignedShort());\r
- pimb.setReason(rawMessage.readUnsignedByte());\r
- pimb.setTableId(new TableId((long)rawMessage.readUnsignedByte()));\r
- \r
- byte[] cookie = new byte[8];\r
+ PacketInMessageBuilder builder = new PacketInMessageBuilder();\r
+ builder.setVersion(version);\r
+ builder.setXid(rawMessage.readUnsignedInt());\r
+ builder.setBufferId(rawMessage.readUnsignedInt());\r
+ builder.setTotalLen(rawMessage.readUnsignedShort());\r
+ builder.setReason(rawMessage.readUnsignedByte());\r
+ builder.setTableId(new TableId((long)rawMessage.readUnsignedByte()));\r
+ byte[] cookie = new byte[Long.SIZE/Byte.SIZE];\r
rawMessage.readBytes(cookie);\r
- pimb.setCookie(new BigInteger(cookie));\r
+ builder.setCookie(new BigInteger(cookie));\r
// TODO - implement match factories to finish this factory \r
rawMessage.skipBytes(PADDING_IN_PACKET_IN_HEADER);\r
- \r
- pimb.setData(rawMessage.readBytes(rawMessage.readableBytes()).array());\r
- \r
- return pimb.build();\r
+ builder.setData(rawMessage.readBytes(rawMessage.readableBytes()).array());\r
+ return builder.build();\r
}\r
}\r
import io.netty.buffer.ByteBuf;\r
\r
import org.opendaylight.openflowjava.protocol.impl.deserialization.OFDeserializer;\r
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortConfig;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortFeatures;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortReason;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortState;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PortStatusMessage;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PortStatusMessageBuilder;\r
\r
public class PortStatusMessageFactory implements OFDeserializer<PortStatusMessage> {\r
\r
private static PortStatusMessageFactory instance;\r
- private static final byte PADDING_IN_FEATURES_REPLY_HEADER = 7;\r
+ private static final byte PADDING_IN_PORT_STATUS_HEADER = 7;\r
+ private static final byte PADDING_IN_OFP_PORT_HEADER_1 = 4;\r
+ private static final byte PADDING_IN_OFP_PORT_HEADER_2 = 2;\r
+ private static final int macAddressLength = 6;\r
\r
private PortStatusMessageFactory() {\r
// Singleton\r
*/\r
public static PortStatusMessageFactory getInstance(){\r
if(instance == null){\r
- \r
instance = new PortStatusMessageFactory();\r
}\r
- \r
return instance;\r
}\r
\r
@Override\r
public PortStatusMessage bufferToMessage(ByteBuf rawMessage, short version) {\r
- PortStatusMessageBuilder psmb = new PortStatusMessageBuilder(); \r
- psmb.setVersion(version);\r
- psmb.setXid(rawMessage.readUnsignedInt());\r
- \r
-// TODO enum portReason\r
-// psmb.setReason(PortReason.values()[rawMessage.readInt()]);\r
- rawMessage.skipBytes(1); //instead of portReason enum\r
- \r
- rawMessage.skipBytes(PADDING_IN_FEATURES_REPLY_HEADER);\r
- return psmb.build();\r
+ PortStatusMessageBuilder builder = new PortStatusMessageBuilder(); \r
+ builder.setVersion(version);\r
+ builder.setXid(rawMessage.readUnsignedInt());\r
+ builder.setReason(PortReason.forValue(rawMessage.readUnsignedByte()));\r
+ rawMessage.skipBytes(PADDING_IN_PORT_STATUS_HEADER);\r
+ builder.setPortNo(rawMessage.readUnsignedInt());\r
+ rawMessage.skipBytes(PADDING_IN_OFP_PORT_HEADER_1);\r
+ StringBuffer macToString = new StringBuffer();\r
+ for(int i=0; i<macAddressLength; i++){\r
+ short mac = 0;\r
+ mac = rawMessage.readUnsignedByte();\r
+ macToString.append(String.format("%02X", mac));\r
+ }\r
+ builder.setHwAddr(new MacAddress(macToString.toString()));\r
+ rawMessage.skipBytes(PADDING_IN_OFP_PORT_HEADER_2);\r
+ builder.setConfig(createPortConfig(rawMessage.readUnsignedInt()));\r
+ builder.setState(createPortState(rawMessage.readUnsignedInt()));\r
+ builder.setCurrentFeatures(createPortFeatures(rawMessage.readUnsignedInt()));\r
+ builder.setAdvertisedFeatures(createPortFeatures(rawMessage.readUnsignedInt()));\r
+ builder.setSupportedFeatures(createPortFeatures(rawMessage.readUnsignedInt()));\r
+ builder.setPeerFeatures(createPortFeatures(rawMessage.readUnsignedInt()));\r
+ builder.setCurrSpeed(rawMessage.readUnsignedInt());\r
+ builder.setMaxSpeed(rawMessage.readUnsignedInt());\r
+ return builder.build();\r
}\r
\r
+ private static PortFeatures createPortFeatures(long input){\r
+ final Boolean _10mbHd = ((input) & 0x01) > 0;\r
+ final Boolean _10mbFd = ((input) & 0x02) > 0;\r
+ final Boolean _100mbHd = ((input) & 0x04) > 0;\r
+ final Boolean _100mbFd = ((input) & 0x08) > 0;\r
+ final Boolean _1gbHd = ((input) & 0x10) > 0;\r
+ final Boolean _1gbFd = ((input) & 0x20) > 0;\r
+ final Boolean _10gbFd = ((input) & 0x40) > 0;\r
+ final Boolean _40gbFd = ((input) & 0x80) > 0;\r
+ final Boolean _100gbFd = ((input) & 0x100) > 0;\r
+ final Boolean _1tbFd = ((input) & 0x200) > 0;\r
+ final Boolean _other = ((input) & 0x400) > 0;\r
+ final Boolean _copper = ((input) & 0x800) > 0;\r
+ final Boolean _fiber = ((input) & 0x1000) > 0;\r
+ final Boolean _autoneg = ((input) & 0x2000) > 0;\r
+ final Boolean _pause = ((input) & 0x4000) > 0;\r
+ final Boolean _pauseAsym = ((input) & 0x8000) > 0;\r
+ return new PortFeatures(_10mbHd, _10mbFd, _100mbHd, _100mbFd, _1gbHd, _1gbFd, _10gbFd,\r
+ _40gbFd, _100gbFd, _1tbFd, _other, _copper, _fiber, _autoneg, _pause, _pauseAsym);\r
+ }\r
\r
+ private static PortState createPortState(long input){\r
+ final Boolean _linkDown = ((input) & 0x01) > 0;\r
+ final Boolean _blocked = ((input) & 0x02) > 0;\r
+ final Boolean _live = ((input) & 0x04) > 0;\r
+ return new PortState(_linkDown, _blocked,_live);\r
+ }\r
+ \r
+ private static PortConfig createPortConfig(long input){\r
+ final Boolean _portDown = ((input) & 0x01) > 0;\r
+ final Boolean _noRecv = ((input) & 0x02) > 0;\r
+ final Boolean _noFwd = ((input) & 0x04) > 0;\r
+ final Boolean _noPacketIn = ((input) & 0x08) > 0;\r
+ return new PortConfig(_portDown, _noRecv, _noFwd, _noPacketIn);\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 java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import io.netty.buffer.ByteBuf;\r
+\r
+import org.opendaylight.openflowjava.protocol.impl.deserialization.OFDeserializer;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.QueueId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.QueueProperty;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetQueueConfigOutput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetQueueConfigOutputBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.packet.queue.Properties;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.packet.queue.PropertiesBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.queue.get.config.reply.Queues;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.queue.get.config.reply.QueuesBuilder;\r
+\r
+/**\r
+ * @author timotej.kubas\r
+ * @author michal.polkorab\r
+ */\r
+public class QueueGetConfigReplyMessageFactory implements OFDeserializer<GetQueueConfigOutput> {\r
+\r
+ private static QueueGetConfigReplyMessageFactory instance;\r
+ private static final byte PADDING_IN_QUEUE_GET_CONFIG_REPLY_HEADER = 4;\r
+ private static final byte PADDING_IN_PACKET_QUEUE_HEADER = 6;\r
+ private static final byte PADDING_IN_QUEUE_PROPERTY_HEADER = 4;\r
+ \r
+ private QueueGetConfigReplyMessageFactory() {\r
+ // singleton\r
+ }\r
+ \r
+ /**\r
+ * \r
+ * @return singleton factory\r
+ */\r
+ public static QueueGetConfigReplyMessageFactory getInstance(){\r
+ \r
+ if(instance == null){\r
+ instance = new QueueGetConfigReplyMessageFactory();\r
+ }\r
+ return instance;\r
+ }\r
+ \r
+ @Override\r
+ public GetQueueConfigOutput bufferToMessage(ByteBuf rawMessage, short version) {\r
+ GetQueueConfigOutputBuilder builder = new GetQueueConfigOutputBuilder();\r
+ builder.setVersion(version);\r
+ builder.setXid((rawMessage.readUnsignedInt()));\r
+ builder.setPort(new PortNumber(rawMessage.readUnsignedInt()));\r
+ rawMessage.skipBytes(PADDING_IN_QUEUE_GET_CONFIG_REPLY_HEADER);\r
+ builder.setQueues(createQueuesList(rawMessage));\r
+ return builder.build();\r
+ }\r
+ \r
+ private static List<Queues> createQueuesList(ByteBuf input){\r
+ List<Queues> queuesList = new ArrayList<Queues>();\r
+ QueuesBuilder queueBuilder = new QueuesBuilder();\r
+ while (input.readableBytes() > 0) {\r
+ queueBuilder.setQueueId(new QueueId(input.readUnsignedInt()));\r
+ queueBuilder.setPort(new PortNumber(input.readUnsignedInt()));\r
+ input.skipBytes(2);\r
+ input.skipBytes(PADDING_IN_PACKET_QUEUE_HEADER);\r
+ queueBuilder.setProperties(createPropertiesList(input));\r
+ queuesList.add(queueBuilder.build());\r
+ } \r
+ return queuesList;\r
+ }\r
+ \r
+ private static List<Properties> createPropertiesList(ByteBuf propertiesInput){\r
+ List<Properties> propertiesList = new ArrayList<Properties>();\r
+ PropertiesBuilder propertiesBuilder = new PropertiesBuilder();\r
+ propertiesBuilder.setProperty(QueueProperty.forValue(propertiesInput.readUnsignedShort()));\r
+ propertiesInput.skipBytes(2);\r
+ propertiesInput.skipBytes(PADDING_IN_QUEUE_PROPERTY_HEADER);\r
+ propertiesList.add(propertiesBuilder.build());\r
+ return propertiesList;\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.math.BigInteger;\r
+\r
+import org.opendaylight.openflowjava.protocol.impl.deserialization.OFDeserializer;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.ControllerRole;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.RoleRequestOutput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.RoleRequestOutputBuilder;\r
+\r
+/**\r
+ * @author timotej.kubas\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
+ private RoleReplyMessageFactory() {\r
+ // singleton\r
+ }\r
+ \r
+ /**\r
+ * \r
+ * @return singleton factory\r
+ */\r
+ public static RoleReplyMessageFactory getInstance(){\r
+ if(instance == null){\r
+ instance = new RoleReplyMessageFactory();\r
+ }\r
+ return instance;\r
+ }\r
+\r
+ @Override\r
+ public RoleRequestOutput bufferToMessage(ByteBuf rawMessage, short version) {\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
+ rawMessage.skipBytes(PADDING_IN_ROLE_REPLY_HEADER);\r
+ byte[] generationID = new byte[8];\r
+ rawMessage.readBytes(generationID);\r
+ builder.setGenerationId(new BigInteger(generationID));\r
+ return builder.build();\r
+ }\r
+}\r
// TODO - fill list of elements into ByteBuf, check length too\r
}\r
\r
- \r
-\r
- \r
- \r
}\r
out.writeByte(MESSAGE_TYPE);\r
out.writeShort(OFFrameDecoder.LENGTH_OF_HEADER);\r
out.writeInt(message.getXid().intValue());\r
- // TODO - finish implementation after enum support needed funcionality\r
- //out.writeInt(message.getRole());\r
+ out.writeInt(message.getRole().getIntValue());\r
ByteBufUtils.padBuffer(PADDING_IN_ROLE_REQUEST_MESSAGE, out);\r
out.writeLong(message.getGenerationId().longValue());\r
}\r
out.writeShort(OFFrameDecoder.LENGTH_OF_HEADER);\r
out.writeInt(message.getXid().intValue());\r
// TODO - finish implementation after enums provide needed funcionality\r
- out.writeInt(message.getMissSendLen());\r
+ out.writeShort(message.getFlags().getIntValue());\r
+ out.writeShort(message.getMissSendLen());\r
}\r
\r
}\r
\r
/**\r
* @author michal.polkorab\r
- *\r
+ * @author timotej.kubas\r
*/\r
public class BarrierReplyMessageFactoryTest {\r
\r
\r
/**\r
* @author michal.polkorab\r
- *\r
+ * @author timotej.kubas\r
*/\r
public class EchoReplyMessageFactoryTest {\r
\r
EchoReplyMessageFactory.getInstance(), bb);\r
\r
BufferHelper.checkHeaderV13(builtByFactory);\r
- Assert.assertArrayEquals(builtByFactory.getData(), data);\r
+ Assert.assertArrayEquals("Wrong data", data, builtByFactory.getData());\r
}\r
\r
}\r
\r
/**\r
* @author michal.polkorab\r
- *\r
+ * @author timotej.kubas\r
*/\r
public class EchoRequestMessageFactoryTest {\r
\r
EchoRequestMessageFactory.getInstance(), bb);\r
\r
BufferHelper.checkHeaderV13(builtByFactory);\r
- Assert.assertArrayEquals(builtByFactory.getData(), data);\r
+ Assert.assertArrayEquals("Wrong data", data, builtByFactory.getData());\r
}\r
\r
}\r
--- /dev/null
+package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;\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.protocol.rev130731.ErrorMessage;\r
+\r
+/**\r
+ * @author michal.polkorab\r
+ * @author timotej.kubas\r
+ */\r
+public class ErrorMessageFactoryTest {\r
+\r
+ /**\r
+ * Test of {@link ErrorMessageFactory} for correct translation into POJO\r
+ */\r
+ @Test\r
+ public void test() {\r
+ ByteBuf bb = BufferHelper.buildBuffer("00 04 00 03 01 02 03 04");\r
+ ErrorMessage builtByFactory = BufferHelper.decodeV13(ErrorMessageFactory.getInstance(), bb);\r
+ BufferHelper.checkHeaderV13(builtByFactory);\r
+ \r
+ Assert.assertEquals("Wrong reason", 0x04, builtByFactory.getType().getIntValue());\r
+ Assert.assertEquals("Wrong code", 3, builtByFactory.getCode().intValue());\r
+ Assert.assertArrayEquals("Wrong body", new byte[]{0x01, 0x02, 0x03, 0x04}, builtByFactory.getData());\r
+ }\r
+}\r
ExperimenterMessageFactory.getInstance(), bb);\r
\r
BufferHelper.checkHeaderV13(builtByFactory);\r
- Assert.assertEquals(builtByFactory.getExperimenter().longValue(), 0x01020304L);\r
- Assert.assertEquals(builtByFactory.getExpType().longValue(), 0x01020304L);\r
+ Assert.assertEquals("Wrong experimenter", 0x01020304L, builtByFactory.getExperimenter().longValue());\r
+ Assert.assertEquals("Wrong expType", 0x01020304L, builtByFactory.getExpType().longValue());\r
}\r
\r
}\r
\r
/**\r
* @author michal.polkorab\r
- *\r
+ * @author timotej.kubas\r
*/\r
public class FeaturesReplyMessageFactoryTest {\r
\r
Assert.assertEquals("Wrong auxiliaryId", 0x01, builtByFactory.getAuxiliaryId().shortValue());\r
Assert.assertEquals("Wrong capabilities", 0x00010203L, builtByFactory.getCapabilities().longValue());\r
Assert.assertEquals("Wrong reserved", 0x00010203L, builtByFactory.getReserved().longValue());\r
- \r
}\r
-\r
}\r
*/\r
@Test\r
public void test(){\r
- ByteBuf bb = BufferHelper.buildBuffer("00 01 02 03 04 05 06 07 00 03 00 04 00 00 00 02"\r
+ ByteBuf bb = BufferHelper.buildBuffer("00 01 02 03 04 05 06 07 00 03 02 04 00 00 00 02"\r
+ " 00 00 00 05 00 01 00 03 00 01 02 03 04 05 06 07 00 01 02 03 04 05 06 07");\r
FlowRemovedMessage builtByFactory = BufferHelper.decodeV13(FlowRemovedMessageFactory.getInstance(), bb);\r
\r
\r
Assert.assertTrue(builtByFactory.getCookie().longValue() == 0x0001020304050607L);\r
Assert.assertTrue(builtByFactory.getPriority() == 0x03);\r
-\r
- // TODO enum type!\r
- // builtByFactory.getReason()\r
+ Assert.assertEquals("Wrong reason", 0x02, builtByFactory.getReason().getIntValue());\r
Assert.assertEquals("Wrong tableId", new TableId((long) 4), builtByFactory.getTableId());\r
Assert.assertEquals("Wrong durationSec", 0x02L, builtByFactory.getDurationSec().longValue());\r
Assert.assertEquals("Wrong durationNsec", 0x05L, builtByFactory.getDurationNsec().longValue());\r
*/\r
public class GetConfigReplyMessageFactoryTest {\r
\r
-\r
/**\r
* Testing {@link GetConfigReplyMessageFactory} for correct translation into POJO\r
*/\r
GetConfigReplyMessageFactory.getInstance(), bb);\r
\r
BufferHelper.checkHeaderV13(builtByFactory);\r
- // TODO - enum problem !\r
-// Assert.assertEquals(builtByFactory.getFlags().toString(),"OFPCFRAGDROP"); \r
- Assert.assertEquals("Wrong missSendLen", 0x01, builtByFactory.getMissSendLen().intValue());\r
- \r
+ Assert.assertEquals("Wrong switchConfigFlag", 0x01, builtByFactory.getFlags().getIntValue()); \r
+ Assert.assertEquals("Wrong missSendLen", 0x03, builtByFactory.getMissSendLen().intValue());\r
}\r
\r
}\r
\r
/**\r
* @author michal.polkorab\r
- * \r
+ * @author timotej.kubas\r
*/\r
public class HelloMessageFactoryTest {\r
\r
*/\r
@Test\r
public void test(){\r
- ByteBuf bb = BufferHelper.buildBuffer("00 01 00 01 00 00 00 00 01 02 03 04");\r
+ ByteBuf bb = BufferHelper.buildBuffer("00 07 00 01 00 00 00 00 01 02 03 04");\r
MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);\r
\r
BufferHelper.checkHeaderV13(builtByFactory);\r
\r
+ Assert.assertEquals("Wrong type", 0x07, builtByFactory.getType().getIntValue());\r
Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());\r
//Assert.assertArrayEquals("Wrong body", new byte[]{0x01, 0x02, 0x03, 0x04}, builtByFactory.getBody());\r
}\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.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortConfig;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortFeatures;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortState;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.PortStatusMessage;\r
\r
/**\r
*/\r
@Test\r
public void test(){\r
- ByteBuf bb = BufferHelper.buildBuffer("01 00 00 00 00 00 00 00");\r
+ ByteBuf bb = BufferHelper.buildBuffer("01 " + //reason \r
+ "00 00 00 00 00 00 00 " + //padding\r
+ "00 01 02 03 " + //port no\r
+ "00 00 00 00 " + //padding in ofp_port1\r
+ "08 00 27 00 B0 EB " + //mac address\r
+ "00 00 " + //padding in ofp_port2\r
+ "00 00 00 0a " + //port config\r
+ "00 00 00 05 " + //port state\r
+ "00 00 00 81 " + //current features\r
+ "00 00 00 81 " + //advertised features\r
+ "00 00 00 81 " + //supported features\r
+ "00 00 00 81 " + //peer features\r
+ "00 00 00 81 " + //curr speed\r
+ "00 00 00 80" //max speed\r
+ );\r
\r
PortStatusMessage builtByFactory = BufferHelper.decodeV13(PortStatusMessageFactory.getInstance(), bb);\r
\r
BufferHelper.checkHeaderV13(builtByFactory);\r
- //Assert.assertEquals("Wrong reason", 0x01, builtByFactory.getReason());\r
+ Assert.assertEquals("Wrong reason", 0x01, builtByFactory.getReason().getIntValue());\r
+ Assert.assertEquals("Wrong portNumber", 66051L, builtByFactory.getPortNo().longValue());\r
+ Assert.assertEquals("Wrong macAddress", new MacAddress("08002700B0EB"), builtByFactory.getHwAddr());\r
+ Assert.assertEquals("Wrong portConfig", new PortConfig(false, true, false, true), builtByFactory.getConfig());\r
+ Assert.assertEquals("Wrong portState", new PortState(true, false, true), builtByFactory.getState());\r
+ Assert.assertEquals("Wrong portFeatures", new PortFeatures(true, false, false, false,\r
+ false, false, false, true, false, false, false, false, \r
+ false, false, false, false), builtByFactory.getCurrentFeatures());\r
+ Assert.assertEquals("Wrong portFeatures", new PortFeatures(true, false, false, false,\r
+ false, false, false, true, false, false, false, false, \r
+ false, false, false, false), builtByFactory.getAdvertisedFeatures());\r
+ Assert.assertEquals("Wrong portFeatures", new PortFeatures(true, false, false, false,\r
+ false, false, false, true, false, false, false, false, \r
+ false, false, false, false), builtByFactory.getSupportedFeatures());\r
+ Assert.assertEquals("Wrong portFeatures", new PortFeatures(true, false, false, false,\r
+ false, false, false, true, false, false, false, false, \r
+ false, false, false, false), builtByFactory.getSupportedFeatures());\r
+ Assert.assertEquals("Wrong currSpeed", 129L, builtByFactory.getCurrSpeed().longValue());\r
+ Assert.assertEquals("Wrong maxSpeed", 128L, builtByFactory.getMaxSpeed().longValue());\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.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.PortNumber;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.QueueId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.QueueProperty;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetQueueConfigOutput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.packet.queue.Properties;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.packet.queue.PropertiesBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.queue.get.config.reply.Queues;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.queue.get.config.reply.QueuesBuilder;\r
+\r
+/**\r
+ * @author timotej.kubas\r
+ * @author michal.polkorab\r
+ */\r
+public class QueueGetConfigReplyMessageFactoryMultiTest {\r
+\r
+ /**\r
+ * Testing of {@link QueueGetConfigReplyMessageFactory} for correct\r
+ * translation into POJO\r
+ */\r
+ @Test\r
+ public void test() {\r
+ ByteBuf bb = BufferHelper.buildBuffer("00 01 02 03 " + // port\r
+ "00 00 00 00 " + // padding\r
+ "00 00 00 01 " + // queueId\r
+ "00 00 00 01 " + // port\r
+ "00 00 00 00 00 00 00 00 " + // pad\r
+ "00 01 " + // property\r
+ "00 00 00 00 00 00 " + // pad\r
+ "00 00 00 02 " + // queueId\r
+ "00 00 00 02 " + // port\r
+ "00 00 00 00 00 00 00 00 " + // pad\r
+ "00 01 " + // property\r
+ "00 00 00 00 00 00 " + // pad\r
+ "00 00 00 03 " + // queueId\r
+ "00 00 00 03 " + // port\r
+ "00 00 00 00 00 00 00 00 " + // pad\r
+ "00 01 " + // property\r
+ "00 00 00 00 00 00" // pad\r
+ );\r
+\r
+ GetQueueConfigOutput builtByFactory = BufferHelper.decodeV13(\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
+ }\r
+\r
+ private static List<Queues> createQueuesList() {\r
+ List<Queues> queuesList = new ArrayList<Queues>();\r
+ QueuesBuilder qb = new QueuesBuilder();\r
+ for (int i = 1; i <= 3; i++) {\r
+ qb.setQueueId(new QueueId((long) i));\r
+ qb.setPort(new PortNumber((long) i));\r
+ qb.setProperties(createPropertiesList());\r
+ queuesList.add(qb.build());\r
+ }\r
+ return queuesList;\r
+ }\r
+\r
+ private static List<Properties> createPropertiesList() {\r
+ List<Properties> propertiesList = new ArrayList<Properties>();\r
+ PropertiesBuilder pb = new PropertiesBuilder();\r
+ pb.setProperty(QueueProperty.values()[1]);\r
+ propertiesList.add(pb.build());\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
--- /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 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.protocol.rev130731.RoleRequestOutput;\r
+\r
+/**\r
+ * @author timotej.kubas\r
+ * @author michal.polkorab\r
+ */\r
+public class RoleReplyMessageFactoryTest {\r
+\r
+ /**\r
+ * Testing of {@link RoleReplyMessageFactory} for correct translation into POJO\r
+ */\r
+ @Test\r
+ public void test(){\r
+ ByteBuf bb = BufferHelper.buildBuffer("00 00 00 02 00 00 00 00 00 01 02 03 04 05 06 07");\r
+ RoleRequestOutput builtByFactory = BufferHelper.decodeV13(RoleReplyMessageFactory.getInstance(), bb);\r
+\r
+ BufferHelper.checkHeaderV13(builtByFactory);\r
+ \r
+ Assert.assertEquals("Wrong role", 0x02, builtByFactory.getRole().getIntValue());\r
+ Assert.assertEquals("Wrong generationId", 0x01020304050607L, builtByFactory.getGenerationId().longValue());\r
+ }\r
+}\r