"Added more deserialization factories & their unit tests" 56/1356/4
authormichal.polkorab <michal.polkorab@pantheon.sk>
Mon, 23 Sep 2013 15:17:35 +0000 (17:17 +0200)
committermichal.polkorab <michal.polkorab@pantheon.sk>
Tue, 24 Sep 2013 08:52:15 +0000 (10:52 +0200)
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

36 files changed:
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/connection/ConnectionAdapterImpl.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/connection/MessageConsumer.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/connection/SwitchConnectionProviderImpl.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/core/OF13Decoder.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/core/OF13Encoder.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/DeserializationFactory.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/BarrierReplyMessageFactory.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/EchoReplyMessageFactory.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/EchoRequestMessageFactory.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/ErrorMessageFactory.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/ExperimenterMessageFactory.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/FeaturesReplyMessageFactory.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/FlowRemovedMessageFactory.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/GetConfigReplyMessageFactory.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/HelloMessageFactory.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/MultipartReplyMessageFactory.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/PacketInMessageFactory.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/PortStatusMessageFactory.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/QueueGetConfigReplyMessageFactory.java [new file with mode: 0644]
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/RoleReplyMessageFactory.java [new file with mode: 0644]
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/HelloInputMessageFactory.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/RoleRequestInputMessageFactory.java
openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/serialization/factories/SetConfigMessageFactory.java
openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/BarrierReplyMessageFactoryTest.java
openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/EchoReplyMessageFactoryTest.java
openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/EchoRequestMessageFactoryTest.java
openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/ErrorMessageFactoryTest.java [new file with mode: 0644]
openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/ExperimenterMessageFactoryTest.java
openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/FeaturesReplyMessageFactoryTest.java
openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/FlowRemovedMessageFactoryTest.java
openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/GetConfigReplyMessageFactoryTest.java
openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/HelloMessageFactoryTest.java
openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/MultipartReplyMessageFactoryTest.java
openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/PortStatusMessageFactoryTest.java
openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/QueueGetConfigReplyMessageFactoryMultiTest.java [new file with mode: 0644]
openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/RoleReplyMessageFactoryTest.java [new file with mode: 0644]

index d07b588797c5ab14cc235d11fedfbf4ffe090344..c6e9e2307d73f5b374426b35f1e91d51f508a327 100644 (file)
@@ -112,7 +112,6 @@ public class ConnectionAdapterImpl implements ConnectionFacade {
     /**
      * @param channel the channel to be set - used for communication
      */
-    @Override
     public void setChannel(Channel channel) {
         this.channel = channel;
     }
index 3f1bf2d8250df11dbf1d5b71f03965be508c65ea..88a3c74726bb14d8033f0c498cb1a4ca389c3dfe 100644 (file)
@@ -8,8 +8,6 @@
 
 package org.opendaylight.openflowjava.protocol.impl.connection;
 
-import io.netty.channel.Channel;
-
 import org.opendaylight.yangtools.yang.binding.DataObject;
 
 /**
@@ -22,9 +20,5 @@ public interface MessageConsumer {
      * @param message to process
      */
     public void consume(DataObject message);
-    
-    /**
-     * @param channel sets processing channel
-     */
-    public void setChannel(Channel channel);
+
 }
index 3a540449e4f65e657850318dadcb66ce12e151c1..e0c36e62eed5515ffcac9c024d5ebe16d91f783f 100644 (file)
@@ -29,7 +29,7 @@ import com.google.common.util.concurrent.SettableFuture;
 
 /**
  * @author mirehak
- *
+ * @author michal.polkorab
  */
 public class SwitchConnectionProviderImpl implements SwitchConnectionProvider {
     
@@ -40,7 +40,7 @@ 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<>();
@@ -58,7 +58,7 @@ public class SwitchConnectionProviderImpl implements SwitchConnectionProvider {
 
     @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<>();
@@ -66,11 +66,10 @@ public class SwitchConnectionProviderImpl implements SwitchConnectionProvider {
                 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();
@@ -85,23 +84,27 @@ public class SwitchConnectionProviderImpl implements SwitchConnectionProvider {
         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();
index c6c496a48f746a886baf4068394527e4a6d7c2c9..7f2d2c8b8f985be1f608a39d1fe993d799fdc6e9 100644 (file)
@@ -12,7 +12,7 @@ import org.slf4j.Logger;
 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
@@ -24,7 +24,7 @@ public class OF13Decoder extends MessageToMessageDecoder<VersionMessageWrapper>
      * 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
index 8e56cc40af45b3bb404a87dadd667949be80635b..fb5dfb804536e329b92c9c047a0c6c57bbd91a72 100644 (file)
@@ -3,17 +3,26 @@ package org.opendaylight.openflowjava.protocol.impl.core;
 \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
index a126e6a4efd27e45827e8c8e6eb053bb9b332d9d..be2bbdd8da74f2b1c437587108f5dee206ba6968 100644 (file)
@@ -20,8 +20,6 @@ public abstract class DeserializationFactory {
     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
index 3ec397520ebf38dc5db752ee6e092badd236816d..bc60d23dcd5ce0cc9b654c34d8eb7826280f2424 100644 (file)
@@ -32,10 +32,10 @@ public class BarrierReplyMessageFactory implements
 \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
index 3b5fcc6c8a85c38bd1451a58273a414c4aa73a1f..059ae0e3e7b05266f68f7f33d0ffdd5490b63841 100644 (file)
@@ -29,17 +29,13 @@ public class EchoReplyMessageFactory implements OFDeserializer<EchoOutput> {
         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
index 11807db1cfa863fa404f7d5d42268978cc79b441..263b4d144f4d3ec271c1b5a3039cb46fccd7475e 100644 (file)
@@ -32,11 +32,10 @@ public class EchoRequestMessageFactory implements OFDeserializer<EchoRequestMess
 \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
index e4122ac4e677d75ec3529327f9157390a2533368..149ea0c247bdd40dce204c80204e819e80c5f991 100644 (file)
@@ -32,17 +32,15 @@ private static ErrorMessageFactory instance;
     \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
index ea500b7c25cb76cd930f584a1b1d5d347beaa20b..89856d73ff1c54fca66f0e5542a7c7d532012f87 100644 (file)
@@ -28,19 +28,16 @@ public class ExperimenterMessageFactory implements OFDeserializer<ExperimenterMe
         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
index cb111cff0eb919867185d9f041c32804768fe10b..aeb3353c5eb23a9f4649fe5a664ec1ca967923e6 100644 (file)
@@ -33,26 +33,21 @@ public class FeaturesReplyMessageFactory implements OFDeserializer<GetFeaturesOu
         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
index e014748e1fdcf7351b56e3b76f0020430cb536fb..e28e919a77a4b367b9a7b3e076331324357eb454 100644 (file)
@@ -5,6 +5,7 @@ import io.netty.buffer.ByteBuf;
 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
@@ -28,41 +29,30 @@ public class FlowRemovedMessageFactory implements OFDeserializer<FlowRemovedMess
         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
index 8d548992407587f10948a258b4640cb94049e19d..73b62688e6593d155c546ff3ecf6afa22bbb7e04 100644 (file)
@@ -3,6 +3,7 @@ package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;
 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
@@ -25,20 +26,16 @@ public class GetConfigReplyMessageFactory implements OFDeserializer<GetConfigOut
         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
index e1963b86dd4de916b4d7e167bdfcab325ec4359a..f83172ba467c5a30abac493781e2035186b26353 100644 (file)
@@ -31,9 +31,10 @@ public class HelloMessageFactory implements OFDeserializer<HelloMessage> {
     \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
index e13f230f39bd5d2aad1216ba9be359db23a7cb7c..76e13619c103710fdd42ecfc368d9acfcc5ddfc3 100644 (file)
@@ -5,6 +5,7 @@ import io.netty.buffer.ByteBuf;
 \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
@@ -26,27 +27,21 @@ public class MultipartReplyMessageFactory implements OFDeserializer<MultipartRep
      */\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
index a8733aff4f3b9f3f1409ab4a2c67e267b854e67a..e997becc2ec70c51bdefff8ee80ad63d78360d29 100644 (file)
@@ -29,28 +29,24 @@ public class PacketInMessageFactory implements OFDeserializer<PacketInMessage> {
         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
index 79183330362bf6d7cc5794aa9e87d8ceec998b03..7c3911755c395efd51c3327a0f4b5075b9cd23af 100644 (file)
@@ -3,6 +3,11 @@ package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;
 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
@@ -13,7 +18,10 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 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
@@ -24,27 +32,73 @@ public class PortStatusMessageFactory implements OFDeserializer<PortStatusMessag
      */\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
diff --git a/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/QueueGetConfigReplyMessageFactory.java b/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/QueueGetConfigReplyMessageFactory.java
new file mode 100644 (file)
index 0000000..aa73fdb
--- /dev/null
@@ -0,0 +1,82 @@
+/* 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
diff --git a/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/RoleReplyMessageFactory.java b/openflow-protocol-impl/src/main/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/RoleReplyMessageFactory.java
new file mode 100644 (file)
index 0000000..cbdfe48
--- /dev/null
@@ -0,0 +1,51 @@
+/* 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
index c1ea5d4a455ed454cac66c231c4b6a2405778ec8..ea03326dbcda35bcf8b92395cedfecc3dbf0a932 100644 (file)
@@ -40,8 +40,4 @@ public class HelloInputMessageFactory implements OFSerializer<HelloInput>{
         // TODO - fill list of elements into ByteBuf, check length too\r
     }\r
     \r
-    \r
-\r
-    \r
-    \r
 }\r
index 8789d7a5953ccd3f86a6c349207f115d4ad1c725..cdea17c1f746643ee8b0056afa308514c35239d1 100644 (file)
@@ -40,8 +40,7 @@ public class RoleRequestInputMessageFactory implements OFSerializer<RoleRequestI
         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
index 0c6d226571a5fbc96d6403927133b29e29869c54..ec08e81baa290c07cc94b2831e4415934ebaa953 100644 (file)
@@ -39,7 +39,8 @@ public class SetConfigMessageFactory implements OFSerializer<SetConfigInput> {
         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
index 5338ed03a0d3d7e493eab3e6252bd1302d19ff30..08d42b5ed4108de9bc6ad7239c03d5309050426c 100644 (file)
@@ -11,7 +11,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 \r
 /**\r
  * @author michal.polkorab\r
- *\r
+ * @author timotej.kubas\r
  */\r
 public class EchoReplyMessageFactoryTest {\r
 \r
@@ -38,7 +38,7 @@ public class EchoReplyMessageFactoryTest {
                 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
index e136f5ad7a1d9c62d4ff5aeb98f6a79dce3a1a22..5f882dbb6bdfafde9fa0830d164a519b63b31666 100644 (file)
@@ -11,7 +11,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 \r
 /**\r
  * @author michal.polkorab\r
- *\r
+ * @author timotej.kubas\r
  */\r
 public class EchoRequestMessageFactoryTest {\r
 \r
@@ -38,7 +38,7 @@ public class EchoRequestMessageFactoryTest {
                 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
diff --git a/openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/ErrorMessageFactoryTest.java b/openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/ErrorMessageFactoryTest.java
new file mode 100644 (file)
index 0000000..71172ff
--- /dev/null
@@ -0,0 +1,29 @@
+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
index 091e6a52321573098e62addd05612d2424a81521..0c080a135e5e155fbd9b20e31c19fd51ddd174eb 100644 (file)
@@ -24,8 +24,8 @@ public class ExperimenterMessageFactoryTest {
                 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
index 44cd96647e3972068e1aef26ef58129b3b3a9be2..8665bad47907d57bf91255124956243d013d229b 100644 (file)
@@ -10,7 +10,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 \r
 /**\r
  * @author michal.polkorab\r
- *\r
+ * @author timotej.kubas\r
  */\r
 public class FeaturesReplyMessageFactoryTest {\r
 \r
@@ -31,7 +31,5 @@ public class FeaturesReplyMessageFactoryTest {
         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
index 7f1aa2e0eb2a6a63a801bc1128fa64a6485d681f..e0c830a3d8147abdf4882d372a839a4caf58c590 100644 (file)
@@ -20,7 +20,7 @@ public class FlowRemovedMessageFactoryTest {
      */\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
@@ -28,9 +28,7 @@ public class FlowRemovedMessageFactoryTest {
         \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
index 06ef8b5b8cdaee01ee2bfca1cecc97c40b4a5684..8a8717ddf85bd3dac3ca86c9e5ba4622ebfdda9a 100644 (file)
@@ -14,7 +14,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
  */\r
 public class GetConfigReplyMessageFactoryTest {\r
 \r
-\r
     /**\r
      * Testing {@link GetConfigReplyMessageFactory} for correct translation into POJO\r
      */\r
@@ -25,10 +24,8 @@ public class GetConfigReplyMessageFactoryTest {
                 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
index 04af39d409260065eb7fab6fa9c8a8a529534f71..5be0dc597913d8383daef7574cfb9a28020424bb 100644 (file)
@@ -9,7 +9,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 \r
 /**\r
  * @author michal.polkorab\r
- * \r
+ * @author timotej.kubas\r
  */\r
 public class HelloMessageFactoryTest {\r
 \r
index e4e12eb25c038db7cdc79a92b8c648cff7611f13..470d944a9347bcc42e68ea5efda625d7281666de 100644 (file)
@@ -19,11 +19,12 @@ public class MultipartReplyMessageFactoryTest {
      */\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
index 2100a5a4e7a13648a46f610c9aa2ff14610ee194..39a12076fa87196e1d63d16619c4fb6da5822d25 100644 (file)
@@ -4,8 +4,13 @@ package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;
 \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
@@ -19,11 +24,43 @@ public class PortStatusMessageFactoryTest {
      */\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
diff --git a/openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/QueueGetConfigReplyMessageFactoryMultiTest.java b/openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/QueueGetConfigReplyMessageFactoryMultiTest.java
new file mode 100644 (file)
index 0000000..3fbd8e8
--- /dev/null
@@ -0,0 +1,110 @@
+/* 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
diff --git a/openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/RoleReplyMessageFactoryTest.java b/openflow-protocol-impl/src/test/java/org/opendaylight/openflowjava/protocol/impl/deserialization/factories/RoleReplyMessageFactoryTest.java
new file mode 100644 (file)
index 0000000..e24af65
--- /dev/null
@@ -0,0 +1,30 @@
+/* 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