[jboss-cvs] JBoss Messaging SVN: r4066 - in trunk: src/main/org/jboss/messaging/core/remoting/impl/mina and 5 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Apr 16 11:15:09 EDT 2008


Author: jmesnil
Date: 2008-04-16 11:15:09 -0400 (Wed, 16 Apr 2008)
New Revision: 4066

Modified:
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/AbstractPacketCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/BytesPacketCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/ConnectionCreateSessionMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/ConnectionCreateSessionResponseMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/ConsumerDeliverMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/ConsumerFlowTokenMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/CreateConnectionMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/CreateConnectionResponseMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/EmptyPacketCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/MessagingExceptionMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/PingCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/PongCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/ProducerReceiveTokensMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/ProducerSendMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/RemotingBuffer.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionAcknowledgeMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionAddDestinationMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionBindingQueryMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionBindingQueryResponseMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionBrowserHasNextMessageResponseMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionBrowserNextMessageBlockMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionBrowserNextMessageBlockResponseMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionBrowserNextMessageResponseMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionCancelMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionCreateBrowserMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionCreateBrowserResponseMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionCreateConsumerMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionCreateConsumerResponseMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionCreateProducerMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionCreateProducerResponseMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionCreateQueueMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionDeleteQueueMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionQueueQueryMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionQueueQueryResponseMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionRemoveDestinationMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXACommitMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXAEndMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXAForgetMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXAGetInDoubtXidsResponseMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXAGetTimeoutResponseMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXAJoinMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXAPrepareMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXAResponseMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXAResumeMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXARollbackMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXASetTimeoutMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXASetTimeoutResponseMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXAStartMessageCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/TextPacketCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/mina/BufferWrapper.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/mina/FilterChainSupport.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/mina/MessagingCodec.java
   trunk/src/main/org/jboss/messaging/core/remoting/impl/wireformat/SessionXACommitMessage.java
   trunk/tests/src/org/jboss/messaging/tests/unit/core/remoting/impl/SessionTestBase.java
   trunk/tests/src/org/jboss/messaging/tests/unit/core/remoting/impl/wireformat/CodecAssert.java
   trunk/tests/src/org/jboss/messaging/tests/unit/core/remoting/impl/wireformat/PacketTypeTest.java
   trunk/tests/src/org/jboss/messaging/tests/unit/core/transaction/impl/TransactionTest.java
   trunk/tests/src/org/jboss/messaging/tests/util/RandomUtil.java
   trunk/tests/src/org/jboss/messaging/tests/util/UnitTestCase.java
Log:
fixed MessagingCodec doDecode() method
uncommented and refactored PacketTypeTest tests

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/AbstractPacketCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/AbstractPacketCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/AbstractPacketCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -74,8 +74,6 @@
       
       int messageLength = getBodyLength(packet) + HEADER_LENGTH;
       
-      log.info("Message length is " + messageLength);
-      
       //The standard header fields
       buf.putInt(messageLength);
       buf.put(packet.getType().byteValue());
@@ -106,14 +104,16 @@
    
    public static int getXidLength(final Xid xid)
    {
-      return 1 + 1 + xid.getBranchQualifier().length + 1 + xid.getGlobalTransactionId().length;
+      return INT_LENGTH + INT_LENGTH + xid.getBranchQualifier().length + INT_LENGTH + xid.getGlobalTransactionId().length;
    }
 
-   public boolean decode(final RemotingBuffer buffer, final ProtocolDecoderOutput out) throws Exception
+   public void decode(final RemotingBuffer buffer, final ProtocolDecoderOutput out) throws Exception
    {        	   	
       long correlationID = buffer.getLong();
       long targetID = buffer.getLong();
       long executorID = buffer.getLong();
+      if (executorID == -1)
+         executorID = targetID;
       boolean oneWay = buffer.getBoolean();
       
       Packet packet = decodeBody(buffer);
@@ -124,24 +124,22 @@
       packet.setOneWay(oneWay);
       
       out.write(packet);
-
-      return false;
    }   
    
    public PacketType getType()
    {
    	return type;
    }
-   
-   // Protected -----------------------------------------------------
 
-   protected abstract int getBodyLength(P packet) throws Exception;
+   public abstract int getBodyLength(P packet) throws Exception;
+
+   // Protected -----------------------------------------------------
    
    protected abstract void encodeBody(P packet, RemotingBuffer buf) throws Exception;
 
    protected abstract Packet decodeBody(RemotingBuffer buffer) throws Exception;
 
-   protected static void encodeXid(final Xid xid, final RemotingBuffer out)
+   public static void encodeXid(final Xid xid, final RemotingBuffer out)
    {
       out.putInt(xid.getFormatId());
       out.putInt(xid.getBranchQualifier().length);

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/BytesPacketCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/BytesPacketCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/BytesPacketCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -34,7 +34,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final BytesPacket packet)
+   public int getBodyLength(final BytesPacket packet)
    {
    	return INT_LENGTH + packet.getBytes().length;
    }

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/ConnectionCreateSessionMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/ConnectionCreateSessionMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/ConnectionCreateSessionMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -34,7 +34,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final ConnectionCreateSessionMessage packet)
+   public int getBodyLength(final ConnectionCreateSessionMessage packet)
    {
    	return 3 * BOOLEAN_LENGTH;
    }

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/ConnectionCreateSessionResponseMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/ConnectionCreateSessionResponseMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/ConnectionCreateSessionResponseMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -33,7 +33,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final ConnectionCreateSessionResponseMessage packet)
+   public int getBodyLength(final ConnectionCreateSessionResponseMessage packet)
    {
    	return LONG_LENGTH;
    }

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/ConsumerDeliverMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/ConsumerDeliverMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/ConsumerDeliverMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -39,7 +39,7 @@
    //TODO - remove this when in next stage of refactoring
    private byte[] encodedMsg;
    
-   protected int getBodyLength(final ConsumerDeliverMessage packet) throws Exception
+   public int getBodyLength(final ConsumerDeliverMessage packet) throws Exception
    {
    	encodedMsg = StreamUtils.toBytes(packet.getMessage());
    	

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/ConsumerFlowTokenMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/ConsumerFlowTokenMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/ConsumerFlowTokenMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -33,7 +33,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
    
-   protected int getBodyLength(final ConsumerFlowTokenMessage packet) throws Exception
+   public int getBodyLength(final ConsumerFlowTokenMessage packet) throws Exception
    {
    	return INT_LENGTH;
    }

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/CreateConnectionMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/CreateConnectionMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/CreateConnectionMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -33,7 +33,7 @@
 
    // AbstractPackedCodec overrides----------------------------------
 
-   protected int getBodyLength(final CreateConnectionRequest packet) throws Exception
+   public int getBodyLength(final CreateConnectionRequest packet) throws Exception
    {
       int bodyLength = INT_LENGTH // version
             + LONG_LENGTH +

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/CreateConnectionResponseMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/CreateConnectionResponseMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/CreateConnectionResponseMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -33,7 +33,7 @@
 
    // AbstractPackedCodec overrides----------------------------------
    
-   protected int getBodyLength(final CreateConnectionResponse packet) throws Exception
+   public int getBodyLength(final CreateConnectionResponse packet) throws Exception
    {
    	return LONG_LENGTH;
    }

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/EmptyPacketCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/EmptyPacketCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/EmptyPacketCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -33,7 +33,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final PacketImpl packet)
+   public int getBodyLength(final PacketImpl packet)
    {
    	return 0;
    }

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/MessagingExceptionMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/MessagingExceptionMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/MessagingExceptionMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -34,7 +34,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final MessagingExceptionMessage packet) throws Exception
+   public int getBodyLength(final MessagingExceptionMessage packet) throws Exception
    {
    	return INT_LENGTH + sizeof(packet.getException().getMessage());
    }

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/PingCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/PingCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/PingCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -34,7 +34,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final Ping packet) throws Exception
+   public int getBodyLength(final Ping packet) throws Exception
    {
    	return LONG_LENGTH;
    }

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/PongCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/PongCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/PongCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -34,7 +34,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
    
-   protected int getBodyLength(final Pong packet) throws Exception
+   public int getBodyLength(final Pong packet) throws Exception
    {
    	return LONG_LENGTH + BOOLEAN_LENGTH;
    }

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/ProducerReceiveTokensMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/ProducerReceiveTokensMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/ProducerReceiveTokensMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -36,7 +36,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final ProducerReceiveTokensMessage packet) throws Exception
+   public int getBodyLength(final ProducerReceiveTokensMessage packet) throws Exception
    {
    	return INT_LENGTH;
    }

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/ProducerSendMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/ProducerSendMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/ProducerSendMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -42,7 +42,7 @@
    //TOD remove this in next stage of refactoring
    private byte[] encodedMsg;
    
-   protected int getBodyLength(final ProducerSendMessage packet) throws Exception
+   public int getBodyLength(final ProducerSendMessage packet) throws Exception
    {
    	encodedMsg = StreamUtils.toBytes(packet.getMessage());   
 

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/RemotingBuffer.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/RemotingBuffer.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/RemotingBuffer.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -49,4 +49,6 @@
    
    void rewind();
 
+   byte[] array();
+
 }

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionAcknowledgeMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionAcknowledgeMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionAcknowledgeMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -7,9 +7,7 @@
 package org.jboss.messaging.core.remoting.impl.codec;
 
 import org.jboss.messaging.core.remoting.impl.wireformat.PacketType;
-import org.jboss.messaging.core.remoting.impl.wireformat.ProducerSendMessage;
 import org.jboss.messaging.core.remoting.impl.wireformat.SessionAcknowledgeMessage;
-import org.jboss.messaging.util.StreamUtils;
 
 /**
  * 
@@ -38,7 +36,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final SessionAcknowledgeMessage packet) throws Exception
+   public int getBodyLength(final SessionAcknowledgeMessage packet) throws Exception
    {
       return LONG_LENGTH + 1;
    }

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionAddDestinationMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionAddDestinationMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionAddDestinationMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -36,7 +36,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final SessionAddDestinationMessage packet) throws Exception
+   public int getBodyLength(final SessionAddDestinationMessage packet) throws Exception
    {
       return sizeof(packet.getAddress()) + BOOLEAN_LENGTH;
    }

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionBindingQueryMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionBindingQueryMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionBindingQueryMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -36,7 +36,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final SessionBindingQueryMessage packet) throws Exception
+   public int getBodyLength(final SessionBindingQueryMessage packet) throws Exception
    {
       return sizeof(packet.getAddress());
    }

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionBindingQueryResponseMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionBindingQueryResponseMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionBindingQueryResponseMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -39,7 +39,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final SessionBindingQueryResponseMessage packet) throws Exception
+   public int getBodyLength(final SessionBindingQueryResponseMessage packet) throws Exception
    {   	
       List<String> queueNames = packet.getQueueNames();
 

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionBrowserHasNextMessageResponseMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionBrowserHasNextMessageResponseMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionBrowserHasNextMessageResponseMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -34,7 +34,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final SessionBrowserHasNextMessageResponseMessage packet) throws Exception
+   public int getBodyLength(final SessionBrowserHasNextMessageResponseMessage packet) throws Exception
    {   	
       return BOOLEAN_LENGTH;
    }

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionBrowserNextMessageBlockMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionBrowserNextMessageBlockMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionBrowserNextMessageBlockMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -33,7 +33,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final SessionBrowserNextMessageBlockMessage packet) throws Exception
+   public int getBodyLength(final SessionBrowserNextMessageBlockMessage packet) throws Exception
    {   	
       return LONG_LENGTH;
    }

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionBrowserNextMessageBlockResponseMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionBrowserNextMessageBlockResponseMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionBrowserNextMessageBlockResponseMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -58,7 +58,7 @@
    //TODO remove this in next refactoring
    private byte[] encodedMsgs;
    
-   protected int getBodyLength(final SessionBrowserNextMessageBlockResponseMessage packet) throws Exception
+   public int getBodyLength(final SessionBrowserNextMessageBlockResponseMessage packet) throws Exception
    {   	
    	Message[] messages = packet.getMessages();
       

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionBrowserNextMessageResponseMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionBrowserNextMessageResponseMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionBrowserNextMessageResponseMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -39,9 +39,9 @@
    //TODO remove this in next refactoring
    private byte[] encodedMsg;
    
-   protected int getBodyLength(final SessionBrowserNextMessageResponseMessage packet) throws Exception
+   public int getBodyLength(final SessionBrowserNextMessageResponseMessage packet) throws Exception
    {   	
-   	byte[] encodedMsg = StreamUtils.toBytes(packet.getMessage());
+   	encodedMsg = StreamUtils.toBytes(packet.getMessage());
 
       int bodyLength = INT_LENGTH + encodedMsg.length;
       

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionCancelMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionCancelMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionCancelMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -35,7 +35,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final SessionCancelMessage packet) throws Exception
+   public int getBodyLength(final SessionCancelMessage packet) throws Exception
    {   	
       return LONG_LENGTH + 1;
    }

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionCreateBrowserMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionCreateBrowserMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionCreateBrowserMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -34,7 +34,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final SessionCreateBrowserMessage packet) throws Exception
+   public int getBodyLength(final SessionCreateBrowserMessage packet) throws Exception
    {   	
    	String queueName = packet.getQueueName();
       String filterString = packet.getFilterString();

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionCreateBrowserResponseMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionCreateBrowserResponseMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionCreateBrowserResponseMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -34,7 +34,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final SessionCreateBrowserResponseMessage packet) throws Exception
+   public int getBodyLength(final SessionCreateBrowserResponseMessage packet) throws Exception
    {   	
       return LONG_LENGTH;
    }

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionCreateConsumerMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionCreateConsumerMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionCreateConsumerMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -34,7 +34,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final SessionCreateConsumerMessage packet) throws Exception
+   public int getBodyLength(final SessionCreateConsumerMessage packet) throws Exception
    {   	
    	int bodyLength = sizeof(packet.getQueueName()) +
    	   sizeof(packet.getFilterString()) + 2 * BOOLEAN_LENGTH + 2 * INT_LENGTH;

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionCreateConsumerResponseMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionCreateConsumerResponseMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionCreateConsumerResponseMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -34,7 +34,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final SessionCreateConsumerResponseMessage packet) throws Exception
+   public int getBodyLength(final SessionCreateConsumerResponseMessage packet) throws Exception
    {   	
    	return LONG_LENGTH + INT_LENGTH;
    }

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionCreateProducerMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionCreateProducerMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionCreateProducerMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -37,7 +37,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final SessionCreateProducerMessage packet) throws Exception
+   public int getBodyLength(final SessionCreateProducerMessage packet) throws Exception
    {   	
    	String address = packet.getAddress();
       

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionCreateProducerResponseMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionCreateProducerResponseMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionCreateProducerResponseMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -37,7 +37,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final SessionCreateProducerResponseMessage packet) throws Exception
+   public int getBodyLength(final SessionCreateProducerResponseMessage packet) throws Exception
    {   	
       return LONG_LENGTH + 2 * INT_LENGTH;
    }

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionCreateQueueMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionCreateQueueMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionCreateQueueMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -36,7 +36,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final SessionCreateQueueMessage packet) throws Exception
+   public int getBodyLength(final SessionCreateQueueMessage packet) throws Exception
    {   	
    	String address = packet.getAddress();
       String queueName = packet.getQueueName();

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionDeleteQueueMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionDeleteQueueMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionDeleteQueueMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -36,7 +36,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final SessionDeleteQueueMessage packet) throws Exception
+   public int getBodyLength(final SessionDeleteQueueMessage packet) throws Exception
    {   	
    	String queueName = packet.getQueueName();      
       int bodyLength = sizeof(queueName);

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionQueueQueryMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionQueueQueryMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionQueueQueryMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -36,7 +36,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final SessionQueueQueryMessage packet) throws Exception
+   public int getBodyLength(final SessionQueueQueryMessage packet) throws Exception
    {   	
    	String queueName = packet.getQueueName();       
       int bodyLength = sizeof(queueName);

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionQueueQueryResponseMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionQueueQueryResponseMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionQueueQueryResponseMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -36,7 +36,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final SessionQueueQueryResponseMessage packet) throws Exception
+   public int getBodyLength(final SessionQueueQueryResponseMessage packet) throws Exception
    {   	
    	String filterString  = packet.getFilterString();
       String address = packet.getAddress();

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionRemoveDestinationMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionRemoveDestinationMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionRemoveDestinationMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -36,7 +36,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final SessionRemoveDestinationMessage packet) throws Exception
+   public int getBodyLength(final SessionRemoveDestinationMessage packet) throws Exception
    {   	
    	String address = packet.getAddress();      
       int bodyLength = sizeof(address) + BOOLEAN_LENGTH;

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXACommitMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXACommitMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXACommitMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -37,27 +37,26 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final SessionXACommitMessage packet) throws Exception
+   public int getBodyLength(final SessionXACommitMessage packet) throws Exception
    {   	
-   	int bodyLength = BOOLEAN_LENGTH + getXidLength(packet.getXid());
+   	int bodyLength = getXidLength(packet.getXid()) + BOOLEAN_LENGTH;
    	return bodyLength;
    }
    
    @Override
    protected void encodeBody(final SessionXACommitMessage message, final RemotingBuffer out) throws Exception
    {      
-      out.putBoolean(message.isOnePhase());      
       encodeXid(message.getXid(), out);      
+      out.putBoolean(message.isOnePhase());      
    }
 
    @Override
    protected SessionXACommitMessage decodeBody(final RemotingBuffer in)
          throws Exception
    {
-      boolean onePhase = in.getBoolean();
-            
       Xid xid = decodeXid(in);
-            
+      boolean onePhase = in.getBoolean();
+                  
       return new SessionXACommitMessage(xid, onePhase);
    }
 

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXAEndMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXAEndMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXAEndMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -37,9 +37,9 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final SessionXAEndMessage packet) throws Exception
+   public int getBodyLength(final SessionXAEndMessage packet) throws Exception
    {   	
-   	int bodyLength = BOOLEAN_LENGTH + getXidLength(packet.getXid());
+   	int bodyLength = getXidLength(packet.getXid()) + BOOLEAN_LENGTH;
    	return bodyLength;
    }
    
@@ -48,18 +48,16 @@
    {      
       Xid xid = message.getXid();      
       
+      encodeXid(xid, out);                  
       out.putBoolean(message.isFailed());
-      
-      encodeXid(xid, out);            
    }
 
    @Override
    protected SessionXAEndMessage decodeBody(final RemotingBuffer in) throws Exception
    {
+      Xid xid = decodeXid(in);
       boolean failed = in.getBoolean();
                   
-      Xid xid = decodeXid(in);
-            
       return new SessionXAEndMessage(xid, failed);
    }
 

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXAForgetMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXAForgetMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXAForgetMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -37,7 +37,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final SessionXAForgetMessage packet) throws Exception
+   public int getBodyLength(final SessionXAForgetMessage packet) throws Exception
    {   	
    	int bodyLength = getXidLength(packet.getXid());
    	return bodyLength;

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXAGetInDoubtXidsResponseMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXAGetInDoubtXidsResponseMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXAGetInDoubtXidsResponseMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -34,14 +34,14 @@
 
    public SessionXAGetInDoubtXidsResponseMessageCodec()
    {
-      super(PacketType.SESS_XA_INDOUBT_XIDS);
+      super(PacketType.SESS_XA_INDOUBT_XIDS_RESP);
    }
 
    // Public --------------------------------------------------------
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final SessionXAGetInDoubtXidsResponseMessage packet) throws Exception
+   public int getBodyLength(final SessionXAGetInDoubtXidsResponseMessage packet) throws Exception
    {   	
       int bodyLength = INT_LENGTH;
       

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXAGetTimeoutResponseMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXAGetTimeoutResponseMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXAGetTimeoutResponseMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -36,7 +36,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final SessionXAGetTimeoutResponseMessage packet) throws Exception
+   public int getBodyLength(final SessionXAGetTimeoutResponseMessage packet) throws Exception
    {   	
    	return INT_LENGTH;
    }

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXAJoinMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXAJoinMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXAJoinMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -37,7 +37,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final SessionXAJoinMessage packet) throws Exception
+   public int getBodyLength(final SessionXAJoinMessage packet) throws Exception
    {   	
    	Xid xid = packet.getXid();
       

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXAPrepareMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXAPrepareMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXAPrepareMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -37,7 +37,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final SessionXAPrepareMessage packet) throws Exception
+   public int getBodyLength(final SessionXAPrepareMessage packet) throws Exception
    {   	
    	Xid xid = packet.getXid();
       

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXAResponseMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXAResponseMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXAResponseMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -36,7 +36,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final SessionXAResponseMessage packet) throws Exception
+   public int getBodyLength(final SessionXAResponseMessage packet) throws Exception
    {   	
    	int bodyLength = BOOLEAN_LENGTH + INT_LENGTH + sizeof(packet.getMessage());
    	

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXAResumeMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXAResumeMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXAResumeMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -37,7 +37,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final SessionXAResumeMessage packet) throws Exception
+   public int getBodyLength(final SessionXAResumeMessage packet) throws Exception
    {   	
    	Xid xid = packet.getXid();
       

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXARollbackMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXARollbackMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXARollbackMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -30,7 +30,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final SessionXARollbackMessage packet) throws Exception
+   public int getBodyLength(final SessionXARollbackMessage packet) throws Exception
    {   	
    	Xid xid = packet.getXid();
       

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXASetTimeoutMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXASetTimeoutMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXASetTimeoutMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -35,7 +35,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final SessionXASetTimeoutMessage packet) throws Exception
+   public int getBodyLength(final SessionXASetTimeoutMessage packet) throws Exception
    {   	
       return INT_LENGTH;
    }

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXASetTimeoutResponseMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXASetTimeoutResponseMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXASetTimeoutResponseMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -35,7 +35,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final SessionXASetTimeoutResponseMessage packet) throws Exception
+   public int getBodyLength(final SessionXASetTimeoutResponseMessage packet) throws Exception
    {   	
       return BOOLEAN_LENGTH;
    }

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXAStartMessageCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXAStartMessageCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/SessionXAStartMessageCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -37,7 +37,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final SessionXAStartMessage packet) throws Exception
+   public int getBodyLength(final SessionXAStartMessage packet) throws Exception
    {   	
    	Xid xid = packet.getXid();
       

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/TextPacketCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/TextPacketCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/codec/TextPacketCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -34,7 +34,7 @@
 
    // AbstractPacketCodec overrides ---------------------------------
 
-   protected int getBodyLength(final TextPacket packet) throws Exception
+   public int getBodyLength(final TextPacket packet) throws Exception
    {   	
       return sizeof(packet.getText());
    }

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/mina/BufferWrapper.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/mina/BufferWrapper.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/mina/BufferWrapper.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -53,6 +53,11 @@
 
    // RemotingBuffer implementation ----------------------------------------------
 
+   public byte[] array()
+   {
+      return buffer.array();
+   }
+
    public int remaining()
    {
       return buffer.remaining();
@@ -158,6 +163,11 @@
    {
    	buffer.rewind();
    }
+
+   public void flip()
+   {
+      buffer.flip();
+   }
    
    // Package protected ---------------------------------------------
 

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/mina/FilterChainSupport.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/mina/FilterChainSupport.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/mina/FilterChainSupport.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -7,6 +7,7 @@
 package org.jboss.messaging.core.remoting.impl.mina;
 
 import static org.apache.mina.common.IdleStatus.BOTH_IDLE;
+import static org.apache.mina.common.IdleStatus.READER_IDLE;
 import static org.apache.mina.filter.keepalive.KeepAliveRequestTimeoutHandler.EXCEPTION;
 import static org.apache.mina.filter.logging.LogLevel.TRACE;
 import static org.apache.mina.filter.logging.LogLevel.WARN;
@@ -17,6 +18,7 @@
 import javax.net.ssl.SSLContext;
 
 import org.apache.mina.common.DefaultIoFilterChainBuilder;
+import org.apache.mina.common.IdleStatus;
 import org.apache.mina.filter.codec.ProtocolCodecFilter;
 import org.apache.mina.filter.keepalive.KeepAliveFilter;
 import org.apache.mina.filter.logging.LoggingFilter;
@@ -70,9 +72,12 @@
                + ", keepAliveInterval=" + keepAliveInterval);
       }
 
-      filterChain.addLast("keep-alive", new KeepAliveFilter(
-            new MinaKeepAliveFactory(factory, notifier),  BOTH_IDLE, EXCEPTION, keepAliveInterval,
-            keepAliveTimeout));
+      // FIXME: IdleStatus.BOTH_IDLE should be used but it is buggy: https://issues.apache.org/jira/browse/DIRMINA-569
+      KeepAliveFilter filter = new KeepAliveFilter(
+            new MinaKeepAliveFactory(factory, notifier), READER_IDLE, EXCEPTION, keepAliveInterval,
+            keepAliveTimeout);
+      filter.setForwardEvent(true);
+      filterChain.addLast("keep-alive", filter);
    }
 
    public static void addSSLFilter(

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/mina/MessagingCodec.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/mina/MessagingCodec.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/mina/MessagingCodec.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -59,36 +59,44 @@
 	
 	protected boolean doDecode(final IoSession session, final IoBuffer in, final ProtocolDecoderOutput out) throws Exception
 	{
-		if (in.remaining() > AbstractPacketCodec.INT_LENGTH)
+	   int start = in.position();
+	   
+	   if (in.remaining() <= AbstractPacketCodec.INT_LENGTH)
    	{
-   		int length = in.getInt();
-   		
-   		log.info("length is " + length);
-   		
-   		if (in.remaining() < length)
-   		{
-   			//Need more data
-   			return true;
-   		}
+         in.position(start);
+         return false;
    	}
-   	else
+		
+   	int length = in.getInt();
+
+      if (in.remaining() < length)
    	{
-   		//Need more data
-   		return true;
+         in.position(start);
+         return false;
    	}
-							
-		byte packetType = in.get();
 		
-		log.info("packet type is " + packetType);
+      int limit = in.limit();
+		in.limit(in.position() + length);
+		byte byteType = in.get();
+		PacketType packetType = PacketType.from(byteType);
 		
-      AbstractPacketCodec codec = codecs.get(packetType);
-      
-      if (codec == null)
-      {
-         throw new IllegalStateException("no encoder has been registered for " + packetType);
-      }
-                  
-      return codec.decode(new BufferWrapper(in), out);
+		try
+		{
+		   AbstractPacketCodec codec = codecs.get(packetType);
+
+		   if (codec == null)
+		   {
+		      throw new IllegalStateException("no encoder has been registered for " + packetType);
+		   }
+
+		   codec.decode(new BufferWrapper(in.slice()), out);
+		   return true;
+		} finally 
+		{
+		   in.position(in.limit());
+		   in.limit(limit);
+		}
+
 	}
 	
 	// Public --------------------------------------------------------

Modified: trunk/src/main/org/jboss/messaging/core/remoting/impl/wireformat/SessionXACommitMessage.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/remoting/impl/wireformat/SessionXACommitMessage.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/src/main/org/jboss/messaging/core/remoting/impl/wireformat/SessionXACommitMessage.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -33,7 +33,6 @@
       super(PacketType.SESS_XA_COMMIT);
       
       this.xid = xid;
-      
       this.onePhase = onePhase;
    }
 
@@ -48,6 +47,12 @@
    {
       return onePhase;
    }
+
+   @Override
+   public String toString()
+   {
+      return getParentString() + ", xid=" + xid + ", onePhae=" + onePhase + "]";
+   }
    
    // Package protected ---------------------------------------------
 

Modified: trunk/tests/src/org/jboss/messaging/tests/unit/core/remoting/impl/SessionTestBase.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/core/remoting/impl/SessionTestBase.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/remoting/impl/SessionTestBase.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -17,12 +17,14 @@
 import junit.framework.TestCase;
 
 import org.jboss.messaging.core.config.Configuration;
+import org.jboss.messaging.core.logging.Logger;
 import org.jboss.messaging.core.remoting.NIOConnector;
 import org.jboss.messaging.core.remoting.NIOSession;
 import org.jboss.messaging.core.remoting.PacketDispatcher;
 import org.jboss.messaging.core.remoting.PacketSender;
 import org.jboss.messaging.tests.integration.core.remoting.mina.ReversePacketHandler;
 import org.jboss.messaging.tests.unit.core.remoting.TestPacketHandler;
+import org.jboss.messaging.core.remoting.impl.codec.AbstractPacketCodec;
 import org.jboss.messaging.core.remoting.impl.wireformat.PacketImpl;
 import org.jboss.messaging.core.remoting.impl.wireformat.TextPacket;
 import org.jboss.messaging.core.remoting.impl.PacketDispatcherImpl;
@@ -36,6 +38,8 @@
 {
    // Constants -----------------------------------------------------
 
+   private static final Logger log = Logger.getLogger(SessionTestBase.class);
+
    // Attributes ----------------------------------------------------
 
    protected ReversePacketHandler serverPacketHandler;
@@ -69,7 +73,7 @@
    {
       serverPacketHandler.expectMessage(1);
 
-      TextPacket packet = new TextPacket("testSendOneWay");
+      TextPacket packet = new TextPacket("testWrite");
       packet.setTargetID(serverPacketHandler.getID());
       
       session.write(packet);

Modified: trunk/tests/src/org/jboss/messaging/tests/unit/core/remoting/impl/wireformat/CodecAssert.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/core/remoting/impl/wireformat/CodecAssert.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/remoting/impl/wireformat/CodecAssert.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -6,10 +6,12 @@
  */
 package org.jboss.messaging.tests.unit.core.remoting.impl.wireformat;
 
+import java.util.List;
+
+import javax.transaction.xa.Xid;
+
 import junit.framework.Assert;
 
-import org.jboss.messaging.core.transaction.impl.XidImpl;
-
 /**
  * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
  * 
@@ -24,13 +26,16 @@
 
    // Static --------------------------------------------------------
 
-   static void assertSameXids(XidImpl[] expected, XidImpl[] actual)
+   static void assertSameXids(List<Xid> expected, List<Xid> actual)
    {
-      assertEquals(expected.length, actual.length);
-      for (int i = 0; i < expected.length; i++)
+      assertNotNull(expected);
+      assertNotNull(actual);
+      assertEquals(expected.size(), actual.size());
+
+      for (int i = 0; i < expected.size(); i++)
       {
-         XidImpl expectedXid = expected[i];
-         XidImpl actualXid = actual[i];
+         Xid expectedXid = expected.get(i);
+         Xid actualXid = actual.get(i);
          assertEqualsByteArrays(expectedXid.getBranchQualifier(), actualXid
                .getBranchQualifier());
          assertEquals(expectedXid.getFormatId(), actualXid.getFormatId());

Modified: trunk/tests/src/org/jboss/messaging/tests/unit/core/remoting/impl/wireformat/PacketTypeTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/core/remoting/impl/wireformat/PacketTypeTest.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/remoting/impl/wireformat/PacketTypeTest.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -8,30 +8,183 @@
 
 import static org.jboss.messaging.core.remoting.impl.codec.AbstractPacketCodec.FALSE;
 import static org.jboss.messaging.core.remoting.impl.codec.AbstractPacketCodec.HEADER_LENGTH;
+import static org.jboss.messaging.core.remoting.impl.codec.AbstractPacketCodec.LONG_LENGTH;
 import static org.jboss.messaging.core.remoting.impl.codec.AbstractPacketCodec.TRUE;
-import static org.jboss.messaging.core.remoting.impl.mina.BufferWrapper.NOT_NULL_STRING;
-import static org.jboss.messaging.core.remoting.impl.mina.BufferWrapper.NULL_BYTE;
-import static org.jboss.messaging.core.remoting.impl.mina.BufferWrapper.NULL_STRING;
-import static org.jboss.messaging.core.remoting.impl.mina.BufferWrapper.UTF_8_ENCODER;
+import static org.jboss.messaging.core.remoting.impl.codec.AbstractPacketCodec.encodeXid;
+import static org.jboss.messaging.core.remoting.impl.mina.PacketCodecFactory.createCodecForEmptyPacket;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.BYTES;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.CLOSE;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.CONN_START;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.CONN_STOP;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.CONS_DELIVER;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.CONS_FLOWTOKEN;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.CREATECONNECTION;
 import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.NULL;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.PING;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.PONG;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.PROD_RECEIVETOKENS;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_ACKNOWLEDGE;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_ADD_DESTINATION;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_BINDINGQUERY;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_BINDINGQUERY_RESP;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_BROWSER_HASNEXTMESSAGE;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_BROWSER_HASNEXTMESSAGE_RESP;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_BROWSER_NEXTMESSAGE;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_BROWSER_NEXTMESSAGEBLOCK;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_BROWSER_NEXTMESSAGEBLOCK_RESP;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_BROWSER_NEXTMESSAGE_RESP;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_BROWSER_RESET;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_CANCEL;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_COMMIT;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_CREATEBROWSER;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_CREATEBROWSER_RESP;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_CREATECONSUMER_RESP;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_CREATEPRODUCER;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_CREATEPRODUCER_RESP;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_CREATEQUEUE;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_DELETE_QUEUE;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_QUEUEQUERY;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_QUEUEQUERY_RESP;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_RECOVER;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_REMOVE_DESTINATION;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_ROLLBACK;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_XA_COMMIT;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_XA_END;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_XA_FORGET;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_XA_GET_TIMEOUT;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_XA_GET_TIMEOUT_RESP;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_XA_INDOUBT_XIDS;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_XA_INDOUBT_XIDS_RESP;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_XA_JOIN;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_XA_PREPARE;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_XA_RESP;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_XA_RESUME;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_XA_ROLLBACK;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_XA_SET_TIMEOUT;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_XA_SET_TIMEOUT_RESP;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_XA_START;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.SESS_XA_SUSPEND;
+import static org.jboss.messaging.core.remoting.impl.wireformat.PacketType.TEXT;
 import static org.jboss.messaging.tests.unit.core.remoting.impl.wireformat.CodecAssert.assertEqualsByteArrays;
+import static org.jboss.messaging.tests.unit.core.remoting.impl.wireformat.CodecAssert.assertSameXids;
+import static org.jboss.messaging.tests.util.RandomUtil.randomBoolean;
+import static org.jboss.messaging.tests.util.RandomUtil.randomBytes;
+import static org.jboss.messaging.tests.util.RandomUtil.randomInt;
 import static org.jboss.messaging.tests.util.RandomUtil.randomLong;
+import static org.jboss.messaging.tests.util.RandomUtil.randomString;
+import static org.jboss.messaging.tests.util.RandomUtil.randomXid;
 
-import java.nio.ByteBuffer;
-import java.nio.CharBuffer;
+import java.util.ArrayList;
+import java.util.List;
 
+import javax.transaction.xa.Xid;
+
 import org.apache.mina.common.IoBuffer;
 import org.apache.mina.common.WriteFuture;
 import org.apache.mina.filter.codec.ProtocolDecoderOutput;
 import org.apache.mina.filter.codec.ProtocolEncoderOutput;
 import org.jboss.messaging.core.logging.Logger;
+import org.jboss.messaging.core.message.Message;
+import org.jboss.messaging.core.message.impl.MessageImpl;
 import org.jboss.messaging.core.remoting.Packet;
 import org.jboss.messaging.core.remoting.impl.codec.AbstractPacketCodec;
+import org.jboss.messaging.core.remoting.impl.codec.BytesPacketCodec;
+import org.jboss.messaging.core.remoting.impl.codec.ConnectionCreateSessionMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.ConnectionCreateSessionResponseMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.ConsumerDeliverMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.ConsumerFlowTokenMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.CreateConnectionMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.CreateConnectionResponseMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.PingCodec;
+import org.jboss.messaging.core.remoting.impl.codec.PongCodec;
+import org.jboss.messaging.core.remoting.impl.codec.ProducerReceiveTokensMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.ProducerSendMessageCodec;
 import org.jboss.messaging.core.remoting.impl.codec.RemotingBuffer;
+import org.jboss.messaging.core.remoting.impl.codec.SessionAcknowledgeMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.SessionAddDestinationMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.SessionBindingQueryMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.SessionBindingQueryResponseMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.SessionBrowserHasNextMessageResponseMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.SessionBrowserNextMessageBlockMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.SessionBrowserNextMessageBlockResponseMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.SessionBrowserNextMessageResponseMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.SessionCancelMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.SessionCreateBrowserMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.SessionCreateBrowserResponseMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.SessionCreateConsumerMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.SessionCreateConsumerResponseMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.SessionCreateProducerMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.SessionCreateProducerResponseMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.SessionCreateQueueMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.SessionDeleteQueueMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.SessionQueueQueryMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.SessionQueueQueryResponseMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.SessionRemoveDestinationMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.SessionXACommitMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.SessionXAEndMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.SessionXAForgetMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.SessionXAGetInDoubtXidsResponseMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.SessionXAGetTimeoutResponseMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.SessionXAJoinMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.SessionXAPrepareMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.SessionXAResponseMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.SessionXAResumeMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.SessionXARollbackMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.SessionXASetTimeoutMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.SessionXASetTimeoutResponseMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.SessionXAStartMessageCodec;
+import org.jboss.messaging.core.remoting.impl.codec.TextPacketCodec;
 import org.jboss.messaging.core.remoting.impl.mina.BufferWrapper;
 import org.jboss.messaging.core.remoting.impl.mina.PacketCodecFactory;
+import org.jboss.messaging.core.remoting.impl.wireformat.BytesPacket;
+import org.jboss.messaging.core.remoting.impl.wireformat.ConnectionCreateSessionMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.ConnectionCreateSessionResponseMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.ConsumerDeliverMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.ConsumerFlowTokenMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.CreateConnectionRequest;
+import org.jboss.messaging.core.remoting.impl.wireformat.CreateConnectionResponse;
 import org.jboss.messaging.core.remoting.impl.wireformat.PacketImpl;
+import org.jboss.messaging.core.remoting.impl.wireformat.PacketType;
+import org.jboss.messaging.core.remoting.impl.wireformat.Ping;
+import org.jboss.messaging.core.remoting.impl.wireformat.Pong;
+import org.jboss.messaging.core.remoting.impl.wireformat.ProducerReceiveTokensMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.ProducerSendMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.SessionAcknowledgeMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.SessionAddDestinationMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.SessionBindingQueryMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.SessionBindingQueryResponseMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.SessionBrowserHasNextMessageResponseMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.SessionBrowserNextMessageBlockMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.SessionBrowserNextMessageBlockResponseMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.SessionBrowserNextMessageResponseMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.SessionCancelMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.SessionCreateBrowserMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.SessionCreateBrowserResponseMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.SessionCreateConsumerMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.SessionCreateConsumerResponseMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.SessionCreateProducerMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.SessionCreateProducerResponseMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.SessionCreateQueueMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.SessionDeleteQueueMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.SessionQueueQueryMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.SessionQueueQueryResponseMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.SessionRemoveDestinationMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.SessionXACommitMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.SessionXAEndMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.SessionXAForgetMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.SessionXAGetInDoubtXidsResponseMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.SessionXAGetTimeoutResponseMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.SessionXAJoinMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.SessionXAPrepareMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.SessionXAResponseMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.SessionXAResumeMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.SessionXARollbackMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.SessionXASetTimeoutMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.SessionXASetTimeoutResponseMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.SessionXAStartMessage;
+import org.jboss.messaging.core.remoting.impl.wireformat.TextPacket;
 import org.jboss.messaging.tests.util.UnitTestCase;
+import org.jboss.messaging.util.StreamUtils;
 
 /**
  * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
@@ -52,9 +205,10 @@
 
    // Static --------------------------------------------------------
 
-   private static ByteBuffer encode(int length, Object... args)
+   private static RemotingBuffer encode(int length, Object... args)
+         throws Exception
    {
-      ByteBuffer buffer = ByteBuffer.allocate(length);
+      BufferWrapper buffer = new BufferWrapper(IoBuffer.allocate(length));
       for (Object arg : args)
       {
          if (arg instanceof Byte)
@@ -70,9 +224,9 @@
          else if (arg instanceof Float)
             buffer.putFloat(((Float) arg).floatValue());
          else if (arg instanceof String)
-            putNullableString((String) arg, buffer);
+            buffer.putNullableString((String) arg);
          else if (arg == null)
-            putNullableString(null, buffer);
+            buffer.putNullableString(null);
          else if (arg instanceof byte[])
          {
             byte[] b = (byte[]) arg;
@@ -85,6 +239,23 @@
             {
                buffer.putLong(l);
             }
+         } else if (arg instanceof List)
+         {
+            List argsInList = (List) arg;
+            buffer.putInt(argsInList.size());
+            for (Object argInList : argsInList)
+            {
+               if (argInList instanceof String)
+                  buffer.putNullableString((String) argInList);
+               else if (argInList instanceof Xid)
+                  encodeXid((Xid)argInList, buffer);
+               else
+                  fail ("no encoding defined for " + arg + " in List");
+            }
+         } else if (arg instanceof Xid)
+         {
+            Xid xid = (Xid) arg;
+            encodeXid(xid, buffer);
          } else
          {
             fail("no encoding defined for " + arg);
@@ -94,27 +265,14 @@
       return buffer;
    }
 
-   private static void putNullableString(String string, ByteBuffer buffer)
-   {
-      if (string == null)
-      {
-         buffer.put(NULL_STRING);
-      } else
-      {
-         buffer.put(NOT_NULL_STRING);
-         UTF_8_ENCODER.reset();
-         UTF_8_ENCODER.encode(CharBuffer.wrap(string), buffer, true);
-         buffer.put(NULL_BYTE);
-      }
-   }
-
    private static void checkHeader(final RemotingBuffer buffer,
-                                   final PacketImpl packet,
-                                   final int bodyLength) throws Exception
+         final Packet packet, final int bodyLength) throws Exception
    {
-   	buffer.rewind();
-   	assertEquals(AbstractPacketCodec.HEADER_LENGTH + bodyLength, buffer.getInt());
-   	   	
+      buffer.rewind();
+      int messageLength = buffer.getInt();
+      assertEquals(AbstractPacketCodec.HEADER_LENGTH + bodyLength,
+            messageLength);
+
       assertEquals(buffer.get(), packet.getType().byteValue());
 
       long correlationID = buffer.getLong();
@@ -128,21 +286,75 @@
       assertEquals(oneWay, packet.isOneWay());
    }
 
-   private static void checkBodyIsEmpty(RemotingBuffer buffer)
+   private static void checkBody(RemotingBuffer buffer, int bodyLength,
+         Object... bodyObjects) throws Exception
    {
-      assertEquals(0, buffer.remaining());
-   }
-
-   private static void checkBody(RemotingBuffer buffer, Object... bodyObjects)
-   {
-      byte[] actualBody = new byte[buffer.getInt()];
+      byte[] actualBody = new byte[bodyLength];
       buffer.get(actualBody);
-      ByteBuffer expectedBody = encode(actualBody.length, bodyObjects);
+      RemotingBuffer expectedBody = encode(actualBody.length, bodyObjects);
       assertEqualsByteArrays(expectedBody.array(), actualBody);
       // check the buffer has been wholly read
       assertEquals(0, buffer.remaining());
    }
 
+   private static Packet encodeAndCheckBytesAndDecode(Packet packet,
+         AbstractPacketCodec codec, Object... bodyObjects) throws Exception
+   {
+      RemotingBuffer buffer = encode(packet, codec);
+      int bodyLength = codec.getBodyLength(packet);
+      checkHeader(buffer, packet, bodyLength);
+      checkBody(buffer, bodyLength, bodyObjects);
+      buffer.rewind();
+
+      Packet decodedPacket = decode(buffer, codec, bodyLength);
+      return decodedPacket;
+   }
+
+   private static RemotingBuffer encode(final Packet packet,
+         final AbstractPacketCodec<Packet> codec) throws Exception
+   {
+      SimpleProtocolEncoderOutput out = new SimpleProtocolEncoderOutput();
+
+      codec.encode(packet, out);
+
+      Object encodedMessage = out.getEncodedMessage();
+
+      assertNotNull(encodedMessage);
+
+      log.info("encoded message is " + encodedMessage);
+
+      assertTrue(encodedMessage instanceof IoBuffer);
+
+      RemotingBuffer buff = new BufferWrapper((IoBuffer) encodedMessage);
+
+      return buff;
+   }
+
+   private static Packet decode(final RemotingBuffer buffer,
+         final AbstractPacketCodec<Packet> codec, final int len)
+         throws Exception
+   {
+      SimpleProtocolDencoderOutput out = new SimpleProtocolDencoderOutput();
+
+      int length = buffer.getInt();
+
+      assertEquals(len + HEADER_LENGTH, length);
+
+      byte type = buffer.get();
+
+      assertEquals(codec.getType().byteValue(), type);
+
+      codec.decode(buffer, out);
+
+      Object message = out.getMessage();
+
+      assertNotNull(message);
+
+      assertTrue(message instanceof Packet);
+
+      return (Packet) message;
+   }
+
    // Constructors --------------------------------------------------
 
    // Public --------------------------------------------------------
@@ -154,1296 +366,977 @@
       packet.setCorrelationID(cid);
       packet.setTargetID(randomLong());
       packet.setExecutorID(randomLong());
-
-      AbstractPacketCodec<?> codec = PacketCodecFactory
+      AbstractPacketCodec codec = PacketCodecFactory
             .createCodecForEmptyPacket(NULL);
-      RemotingBuffer buffer = encode(packet, codec);
-      checkHeader(buffer, packet, 0);
-      checkBodyIsEmpty(buffer);
-      buffer.rewind();
 
-      Packet decodedPacket = decode(buffer, codec, 0);
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(packet, codec);
       assertTrue(decodedPacket instanceof PacketImpl);
-      
+
       assertEquals(NULL, decodedPacket.getType());
       assertEquals(packet.getCorrelationID(), decodedPacket.getCorrelationID());
       assertEquals(packet.getTargetID(), decodedPacket.getTargetID());
       assertEquals(packet.getExecutorID(), decodedPacket.getExecutorID());
    }
 
-//   public void testPing() throws Exception
-//   {
-//      Ping ping = new Ping(randomLong());
-//      AbstractPacketCodec<Ping> codec = new PingCodec();
-//      
-//      RemotingBuffer buffer = encode(ping, codec);
-//      checkHeader(buffer, ping, AbstractPacketCodec.LONG_LENGTH);
-//      checkBody(buffer, ping.getSessionID());
-//      buffer.rewind();
-//
-//      Packet decodedPacket = decode(buffer, codec, AbstractPacketCodec.LONG_LENGTH);
-//
-//      assertTrue(decodedPacket instanceof Ping);
-//      Ping decodedPing = (Ping) decodedPacket;
-//      assertEquals(PING, decodedPing.getType());
-//      assertEquals(ping.getCorrelationID(), decodedPacket.getCorrelationID());
-//      assertEquals(ping.getTargetID(), decodedPacket.getTargetID());
-//      assertEquals(ping.getExecutorID(), decodedPacket.getExecutorID());
-//   }
-//
-//   public void testPong() throws Exception
-//   {
-//      Pong pong = new Pong(randomLong(), true);
-//      AbstractPacketCodec<Pong> codec = new PongCodec();
-//      
-//      SimpleRemotingBuffer buffer = encode(pong, codec);
-//      checkHeader(buffer, pong);
-//      checkBody(buffer, pong.getSessionID(), pong.isSessionFailed());
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertTrue(decodedPacket instanceof Pong);
-//      Pong decodedPong = (Pong) decodedPacket;
-//      assertEquals(PONG, decodedPong.getType());
-//      assertEquals(pong.getSessionID(), decodedPong.getSessionID());
-//      assertEquals(pong.isSessionFailed(), decodedPong.isSessionFailed());
-//   }
-//
-//   public void testTextPacket() throws Exception
-//   {
-//      TextPacket packet = new TextPacket("testTextPacket");
-//      AbstractPacketCodec<TextPacket> codec = new TextPacketCodec();
-//
-//      SimpleRemotingBuffer buffer = encode(packet, codec);
-//      checkHeader(buffer, packet);
-//      checkBody(buffer, packet.getText());
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertTrue(decodedPacket instanceof TextPacket);
-//      TextPacket p = (TextPacket) decodedPacket;
-//
-//      assertEquals(TEXT, p.getType());
-//      assertEquals(packet.getText(), p.getText());
-//   }
-//   
-//   public void testBytesPacket() throws Exception
-//   {
-//      BytesPacket packet = new BytesPacket(randomBytes());
-//
-//      AbstractPacketCodec codec = new BytesPacketCodec();
-//      SimpleRemotingBuffer buffer = encode(packet, codec);
-//      checkHeader(buffer, packet);
-//      checkBody(buffer, packet.getBytes());
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertTrue(decodedPacket instanceof BytesPacket);
-//      BytesPacket p = (BytesPacket) decodedPacket;
-//
-//      assertEquals(BYTES, p.getType());
-//      assertEqualsByteArrays(packet.getBytes(), p.getBytes());
-//   }
-//   
-//   public void testCreateConnectionRequest() throws Exception
-//   {
-//      int version = randomInt();
-//      long remotingSessionID = randomLong();
-//      String clientVMID = randomString();
-//      String username = null;
-//      String password = null;
-//
-//      CreateConnectionRequest request = new CreateConnectionRequest(version,
-//            remotingSessionID, clientVMID, username, password);
-//
-//      AbstractPacketCodec<CreateConnectionRequest> codec = new CreateConnectionMessageCodec();
-//      SimpleRemotingBuffer buffer = encode(request, codec);
-//      checkHeader(buffer, request);
-//      checkBody(buffer, version, remotingSessionID, clientVMID, username, password);
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertTrue(decodedPacket instanceof CreateConnectionRequest);
-//      CreateConnectionRequest decodedRequest = (CreateConnectionRequest) decodedPacket;
-//
-//      assertEquals(CREATECONNECTION, decodedPacket.getType());
-//      assertEquals(request.getVersion(), decodedRequest.getVersion());
-//      assertEquals(request.getRemotingSessionID(), decodedRequest
-//            .getRemotingSessionID());
-//      assertEquals(request.getClientVMID(), decodedRequest.getClientVMID());
-//      assertEquals(request.getUsername(), decodedRequest.getUsername());
-//      assertEquals(request.getPassword(), decodedRequest.getPassword());
-//   }
-//
-//   public void testCreateConnectionResponse() throws Exception
-//   {
-//      CreateConnectionResponse response = new CreateConnectionResponse(randomLong());
-//
-//      AbstractPacketCodec<CreateConnectionResponse> codec = new CreateConnectionResponseMessageCodec();
-//      SimpleRemotingBuffer buffer = encode(response, codec);
-//      checkHeader(buffer, response);
-//      checkBody(buffer, response.getConnectionTargetID());
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertTrue(decodedPacket instanceof CreateConnectionResponse);
-//      CreateConnectionResponse decodedResponse = (CreateConnectionResponse) decodedPacket;
-//      assertEquals(CREATECONNECTION_RESP, decodedResponse.getType());
-//      assertEquals(response.getConnectionTargetID(), decodedResponse.getConnectionTargetID());
-//   }
-//
-//   public void testCreateSessionRequest() throws Exception
-//   {
-//      //TODO test this more thoroughly
-//      
-//      ConnectionCreateSessionMessage request = new ConnectionCreateSessionMessage(true, true, true);
-//
-//      AbstractPacketCodec codec = new ConnectionCreateSessionMessageCodec();
-//      SimpleRemotingBuffer buffer = encode(request, codec);
-//      checkHeader(buffer, request);
-//      checkBody(buffer, request.isXA(), request.isAutoCommitSends(), request.isAutoCommitAcks());
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertTrue(decodedPacket instanceof ConnectionCreateSessionMessage);
-//      ConnectionCreateSessionMessage decodedRequest = (ConnectionCreateSessionMessage) decodedPacket;
-//      assertEquals(CONN_CREATESESSION, decodedRequest.getType());
-//      assertEquals(request.isXA(), decodedRequest.isXA());
-//      assertEquals(request.isAutoCommitSends(), decodedRequest.isAutoCommitSends());
-//      assertEquals(request.isAutoCommitAcks(), decodedRequest.isAutoCommitAcks());
-//      assertEquals(request.isXA(), decodedRequest.isXA());
-//   }
-//
-//   public void testCreateSessionResponse() throws Exception
-//   {
-//      ConnectionCreateSessionResponseMessage response = new ConnectionCreateSessionResponseMessage(randomLong());
-//
-//      AbstractPacketCodec codec = new ConnectionCreateSessionResponseMessageCodec();
-//      SimpleRemotingBuffer buffer = encode(response, codec);
-//      checkHeader(buffer, response);
-//      checkBody(buffer, response.getSessionID());
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertTrue(decodedPacket instanceof ConnectionCreateSessionResponseMessage);
-//      ConnectionCreateSessionResponseMessage decodedResponse = (ConnectionCreateSessionResponseMessage) decodedPacket;
-//      assertEquals(CONN_CREATESESSION_RESP, decodedResponse.getType());
-//      assertEquals(response.getSessionID(), decodedResponse.getSessionID());
-//   }
-//
-//   public void testSendMessage() throws Exception
-//   {
-//      ProducerSendMessage packet = new ProducerSendMessage(randomString(), new MessageImpl());
-//
-//      AbstractPacketCodec codec = new ProducerSendMessageCodec();
-//      SimpleRemotingBuffer buffer = encode(packet, codec);
-//      checkHeader(buffer, packet);
-//      checkBody(buffer, packet.getAddress(), StreamUtils.toBytes(packet.getMessage()));
-//      buffer.rewind();
-//
-//      Packet p = codec.decode(buffer);
-//
-//      assertTrue(p instanceof ProducerSendMessage);
-//      ProducerSendMessage decodedPacket = (ProducerSendMessage) p;
-//      assertEquals(PROD_SEND, decodedPacket.getType());
-//      assertEquals(packet.getAddress(), decodedPacket.getAddress());
-//      assertEquals(packet.getMessage().getMessageID(), decodedPacket
-//            .getMessage().getMessageID());
-//   }
-//
-//   public void testCreateConsumerRequest() throws Exception
-//   {      
-//      String destination = "queue.testCreateConsumerRequest";
-//      SessionCreateConsumerMessage request = new SessionCreateConsumerMessage(destination,
-//            "color = 'red'", false, false, randomInt(), randomInt());
-//
-//      AbstractPacketCodec codec = new SessionCreateConsumerMessageCodec();
-//      SimpleRemotingBuffer buffer = encode(request, codec);
-//      checkHeader(buffer, request);
-//      checkBody(buffer, request.getQueueName(), request
-//            .getFilterString(), request.isNoLocal(), request.isAutoDeleteQueue(), request.getWindowSize(), request.getMaxRate());
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertTrue(decodedPacket instanceof SessionCreateConsumerMessage);
-//      SessionCreateConsumerMessage decodedRequest = (SessionCreateConsumerMessage) decodedPacket;
-//      assertEquals(SESS_CREATECONSUMER, decodedRequest.getType());
-//      assertEquals(request.getQueueName(), decodedRequest.getQueueName());
-//      assertEquals(request.getFilterString(), decodedRequest.getFilterString());
-//      assertEquals(request.isNoLocal(), decodedRequest.isNoLocal());
-//      assertEquals(request.isAutoDeleteQueue(), decodedRequest.isAutoDeleteQueue());
-//      assertEquals(request.getWindowSize(), decodedRequest.getWindowSize());
-//      assertEquals(request.getMaxRate(), decodedRequest.getMaxRate());
-//   }
-//
-//   public void testCreateConsumerResponse() throws Exception
-//   {
-//      SessionCreateConsumerResponseMessage response =
-//      	new SessionCreateConsumerResponseMessage(randomLong(), randomInt());
-//
-//      AbstractPacketCodec codec = new SessionCreateConsumerResponseMessageCodec();
-//      SimpleRemotingBuffer buffer = encode(response, codec);
-//      checkHeader(buffer, response);
-//      checkBody(buffer, response.getConsumerTargetID(), response.getWindowSize());
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertTrue(decodedPacket instanceof SessionCreateConsumerResponseMessage);
-//      SessionCreateConsumerResponseMessage decodedResponse = (SessionCreateConsumerResponseMessage) decodedPacket;
-//      assertEquals(SESS_CREATECONSUMER_RESP, decodedResponse.getType());
-//      
-//      assertEquals(response.getConsumerTargetID(), decodedResponse.getConsumerTargetID());
-//      assertEquals(response.getWindowSize(), decodedResponse.getWindowSize());
-//   }
-//   
-//   public void testCreateProducerRequest() throws Exception
-//   {      
-//      String destination = "queue.testCreateProducerRequest";
-//      int windowSize = randomInt();
-//      int maxRate = randomInt();
-//      SessionCreateProducerMessage request = new SessionCreateProducerMessage(destination, windowSize, maxRate);
-//
-//      AbstractPacketCodec codec = new SessionCreateProducerMessageCodec();
-//      SimpleRemotingBuffer buffer = encode(request, codec);
-//      checkHeader(buffer, request);
-//      checkBody(buffer, request.getAddress(), request.getWindowSize(), request.getMaxRate());
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertTrue(decodedPacket instanceof SessionCreateProducerMessage);
-//      SessionCreateProducerMessage decodedRequest = (SessionCreateProducerMessage) decodedPacket;
-//      assertEquals(SESS_CREATEPRODUCER, decodedRequest.getType());
-//      assertEquals(request.getAddress(), decodedRequest.getAddress());
-//      assertEquals(request.getWindowSize(), decodedRequest.getWindowSize());
-//      assertEquals(request.getMaxRate(), decodedRequest.getMaxRate());
-//   }
-//   
-//   public void testCreateProducerResponse() throws Exception
-//   {
-//      SessionCreateProducerResponseMessage response =
-//      	new SessionCreateProducerResponseMessage(randomLong(), randomInt(), randomInt());
-//
-//      AbstractPacketCodec codec = new SessionCreateProducerResponseMessageCodec();
-//      SimpleRemotingBuffer buffer = encode(response, codec);
-//      checkHeader(buffer, response);
-//      checkBody(buffer, response.getProducerTargetID(), response.getWindowSize(), response.getMaxRate());
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertTrue(decodedPacket instanceof SessionCreateProducerResponseMessage);
-//      SessionCreateProducerResponseMessage decodedResponse = (SessionCreateProducerResponseMessage) decodedPacket;
-//      assertEquals(SESS_CREATEPRODUCER_RESP, decodedResponse.getType());
-//      assertEquals(response.getProducerTargetID(), decodedResponse.getProducerTargetID());
-//      assertEquals(response.getWindowSize(), decodedResponse.getWindowSize());
-//      assertEquals(response.getMaxRate(), decodedResponse.getMaxRate());
-//   }
-//
-//   public void testStartConnectionMessage() throws Exception
-//   {
-//      PacketImpl packet = new PacketImpl(CONN_START);
-//
-//      AbstractPacketCodec codec = PacketCodecFactory.createCodecForEmptyPacket(
-//            CONN_START);
-//      SimpleRemotingBuffer buffer = encode(packet, codec);
-//      checkHeader(buffer, packet);
-//      checkBodyIsEmpty(buffer);
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertEquals(CONN_START, decodedPacket.getType());
-//   }
-//
-//   public void testStopConnectionMessage() throws Exception
-//   {
-//      PacketImpl packet = new PacketImpl(CONN_STOP);
-//
-//      AbstractPacketCodec codec = PacketCodecFactory.createCodecForEmptyPacket(
-//            CONN_STOP);
-//      SimpleRemotingBuffer buffer = encode(packet, codec);
-//      checkHeader(buffer, packet);
-//      checkBodyIsEmpty(buffer);
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertEquals(CONN_STOP, decodedPacket.getType());
-//   }
-//
-//   public void testConsumerFlowTokenMessage() throws Exception
-//   {
-//      ConsumerFlowTokenMessage message = new ConsumerFlowTokenMessage(10);
-//      AbstractPacketCodec codec = new ConsumerFlowTokenMessageCodec();
-//      SimpleRemotingBuffer buffer = encode(message, codec);
-//      checkHeader(buffer, message);
-//      checkBody(buffer, message.getTokens());
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertTrue(decodedPacket instanceof ConsumerFlowTokenMessage);
-//      ConsumerFlowTokenMessage decodedMessage = (ConsumerFlowTokenMessage) decodedPacket;
-//      assertEquals(CONS_FLOWTOKEN, decodedMessage.getType());
-//      assertEquals(message.getTokens(), decodedMessage.getTokens());
-//   }
-//   
-//   public void testProducerReceiveTokensMessage() throws Exception
-//   {
-//   	ProducerReceiveTokensMessage message = new ProducerReceiveTokensMessage(10);
-//      AbstractPacketCodec codec = new ProducerReceiveTokensMessageCodec();
-//      SimpleRemotingBuffer buffer = encode(message, codec);
-//      checkHeader(buffer, message);
-//      checkBody(buffer, message.getTokens());
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertTrue(decodedPacket instanceof ProducerReceiveTokensMessage);
-//      ProducerReceiveTokensMessage decodedMessage = (ProducerReceiveTokensMessage) decodedPacket;
-//      assertEquals(PacketType.PROD_RECEIVETOKENS, decodedMessage.getType());
-//      assertEquals(message.getTokens(), decodedMessage.getTokens());
-//   }
-//
-//   public void testDeliverMessage() throws Exception
-//   {
-//      Message msg = new MessageImpl();
-//      ConsumerDeliverMessage message = new ConsumerDeliverMessage(msg, randomLong());
-//
-//      AbstractPacketCodec codec = new ConsumerDeliverMessageCodec();
-//      SimpleRemotingBuffer buffer = encode(message, codec);
-//      checkHeader(buffer, message);
-//      checkBody(buffer, StreamUtils.toBytes(msg), message.getDeliveryID());
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertTrue(decodedPacket instanceof ConsumerDeliverMessage);
-//      ConsumerDeliverMessage decodedMessage = (ConsumerDeliverMessage) decodedPacket;
-//      assertEquals(CONS_DELIVER, decodedMessage.getType());
-//      assertEquals(message.getMessage().getMessageID(), decodedMessage
-//            .getMessage().getMessageID());
-//      assertEquals(message.getDeliveryID(), decodedMessage.getDeliveryID());
-//   }
-//
-//   public void testSessionAcknowledgeMessage() throws Exception
-//   {
-//      SessionAcknowledgeMessage message = new SessionAcknowledgeMessage(
-//            randomLong(), true);
-//
-//      AbstractPacketCodec codec = new SessionAcknowledgeMessageCodec();
-//      SimpleRemotingBuffer buffer = encode(message, codec);
-//      checkHeader(buffer, message);
-//      checkBody(buffer, message.getDeliveryID(), message.isAllUpTo());
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertTrue(decodedPacket instanceof SessionAcknowledgeMessage);
-//      SessionAcknowledgeMessage decodedMessage = (SessionAcknowledgeMessage) decodedPacket;
-//      assertEquals(SESS_ACKNOWLEDGE, decodedMessage.getType());
-//      assertEquals(message.getDeliveryID(), decodedMessage.getDeliveryID());
-//      assertEquals(message.isAllUpTo(), decodedMessage.isAllUpTo());
-//   }
-//
-//   public void testSessionCancelMessage() throws Exception
-//   {
-//      SessionCancelMessage message = new SessionCancelMessage(randomLong(),
-//            true);
-//
-//      AbstractPacketCodec codec = new SessionCancelMessageCodec();
-//      SimpleRemotingBuffer buffer = encode(message, codec);
-//      checkHeader(buffer, message);
-//      checkBody(buffer, message.getDeliveryID(), message.isExpired());
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertTrue(decodedPacket instanceof SessionCancelMessage);
-//      SessionCancelMessage decodedMessage = (SessionCancelMessage) decodedPacket;
-//      assertEquals(SESS_CANCEL, decodedMessage.getType());
-//      assertEquals(message.getDeliveryID(), decodedMessage.getDeliveryID());
-//      assertEquals(message.isExpired(), decodedMessage.isExpired());
-//   }
-//
-//   public void testSessionCommitMessage() throws Exception
-//   {
-//      PacketImpl message = new PacketImpl(SESS_COMMIT);
-//
-//      AbstractPacketCodec codec = PacketCodecFactory.createCodecForEmptyPacket(
-//            SESS_COMMIT);
-//      SimpleRemotingBuffer buffer = encode(message, codec);
-//      checkHeader(buffer, message);
-//      checkBodyIsEmpty(buffer);
-//
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertEquals(SESS_COMMIT, decodedPacket.getType());
-//   }
-//
-//   public void testSessionRollbackMessage() throws Exception
-//   {
-//      PacketImpl message = new PacketImpl(SESS_ROLLBACK);
-//
-//      AbstractPacketCodec codec = PacketCodecFactory.createCodecForEmptyPacket(
-//            SESS_ROLLBACK);
-//      SimpleRemotingBuffer buffer = encode(message, codec);
-//      checkHeader(buffer, message);
-//      checkBodyIsEmpty(buffer);
-//
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertEquals(SESS_ROLLBACK, decodedPacket.getType());
-//   }
-//   
-//   public void testSessionRecoverMessage() throws Exception
-//   {
-//      PacketImpl message = new PacketImpl(SESS_RECOVER);
-//
-//      AbstractPacketCodec codec = PacketCodecFactory.createCodecForEmptyPacket(
-//            SESS_RECOVER);
-//      SimpleRemotingBuffer buffer = encode(message, codec);
-//      checkHeader(buffer, message);
-//      checkBodyIsEmpty(buffer);
-//
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertEquals(SESS_RECOVER, decodedPacket.getType());
-//   }
-//
-//   public void testCloseMessage() throws Exception
-//   {
-//      PacketImpl message = new PacketImpl(CLOSE);
-//
-//      AbstractPacketCodec codec = PacketCodecFactory.createCodecForEmptyPacket(
-//            CLOSE);
-//      SimpleRemotingBuffer buffer = encode(message, codec);
-//      checkHeader(buffer, message);
-//      checkBodyIsEmpty(buffer);
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertEquals(CLOSE, decodedPacket.getType());
-//   }
-//
-//
-//   public void testCreateBrowserRequest() throws Exception
-//   {
-//      String destination = "queue.testCreateBrowserRequest";
-//      SessionCreateBrowserMessage request = new SessionCreateBrowserMessage(destination,
-//            "color = 'red'");
-//
-//      AbstractPacketCodec codec = new SessionCreateBrowserMessageCodec();
-//      SimpleRemotingBuffer buffer = encode(request, codec);
-//      checkHeader(buffer, request);
-//      checkBody(buffer, request.getQueueName(), request.getFilterString());
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertTrue(decodedPacket instanceof SessionCreateBrowserMessage);
-//      SessionCreateBrowserMessage decodedRequest = (SessionCreateBrowserMessage) decodedPacket;
-//      assertEquals(SESS_CREATEBROWSER, decodedRequest.getType());
-//      assertEquals(request.getQueueName(), decodedRequest.getQueueName());
-//      assertEquals(request.getFilterString(), decodedRequest.getFilterString());
-//   }
-//
-//   public void testCreateBrowserResponse() throws Exception
-//   {
-//      SessionCreateBrowserResponseMessage response = new SessionCreateBrowserResponseMessage(randomLong());
-//
-//      AbstractPacketCodec codec = new SessionCreateBrowserResponseMessageCodec();
-//      SimpleRemotingBuffer buffer = encode(response, codec);
-//      checkHeader(buffer, response);
-//      checkBody(buffer, response.getBrowserTargetID());
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertTrue(decodedPacket instanceof SessionCreateBrowserResponseMessage);
-//      SessionCreateBrowserResponseMessage decodedResponse = (SessionCreateBrowserResponseMessage) decodedPacket;
-//      assertEquals(SESS_CREATEBROWSER_RESP, decodedResponse.getType());
-//      assertEquals(response.getBrowserTargetID(), decodedResponse.getBrowserTargetID());
-//   }
-//
-//   public void testBrowserResetMessage() throws Exception
-//   {
-//      PacketImpl message = new PacketImpl(SESS_BROWSER_RESET);
-//
-//      AbstractPacketCodec codec = PacketCodecFactory.createCodecForEmptyPacket(
-//            SESS_BROWSER_RESET);
-//      SimpleRemotingBuffer buffer = encode(message, codec);
-//      checkHeader(buffer, message);
-//      checkBodyIsEmpty(buffer);
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertEquals(SESS_BROWSER_RESET, decodedPacket.getType());
-//   }
-//
-//   public void testBrowserHasNextMessageRequest() throws Exception
-//   {
-//      PacketImpl request = new PacketImpl(SESS_BROWSER_HASNEXTMESSAGE);
-//
-//      AbstractPacketCodec codec = PacketCodecFactory.createCodecForEmptyPacket(
-//            SESS_BROWSER_HASNEXTMESSAGE);
-//      SimpleRemotingBuffer buffer = encode(request, codec);
-//      checkHeader(buffer, request);
-//      checkBodyIsEmpty(buffer);
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertEquals(SESS_BROWSER_HASNEXTMESSAGE, decodedPacket.getType());
-//   }
-//
-//   public void testBrowserHasNextMessageResponse() throws Exception
-//   {
-//      SessionBrowserHasNextMessageResponseMessage response = new SessionBrowserHasNextMessageResponseMessage(
-//            false);
-//      AbstractPacketCodec codec = new SessionBrowserHasNextMessageResponseMessageCodec();
-//      SimpleRemotingBuffer buffer = encode(response, codec);
-//      checkHeader(buffer, response);
-//      checkBody(buffer, response.hasNext());
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertTrue(decodedPacket instanceof SessionBrowserHasNextMessageResponseMessage);
-//      SessionBrowserHasNextMessageResponseMessage decodedResponse = (SessionBrowserHasNextMessageResponseMessage) decodedPacket;
-//      assertEquals(SESS_BROWSER_HASNEXTMESSAGE_RESP, decodedResponse.getType());
-//      assertEquals(response.hasNext(), decodedResponse.hasNext());
-//   }
-//
-//   public void testBrowserNextMessageRequest() throws Exception
-//   {
-//      PacketImpl request = new PacketImpl(SESS_BROWSER_NEXTMESSAGE);
-//
-//      AbstractPacketCodec codec = PacketCodecFactory.createCodecForEmptyPacket(
-//            SESS_BROWSER_NEXTMESSAGE);
-//      SimpleRemotingBuffer buffer = encode(request, codec);
-//      checkHeader(buffer, request);
-//      checkBodyIsEmpty(buffer);
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertEquals(SESS_BROWSER_NEXTMESSAGE, decodedPacket.getType());
-//   }
-//
-//   public void testBrowserNextMessageResponse() throws Exception
-//   {
-//      Message msg = new MessageImpl();
-//      SessionBrowserNextMessageResponseMessage response = new SessionBrowserNextMessageResponseMessage(msg);
-//
-//      AbstractPacketCodec codec = new SessionBrowserNextMessageResponseMessageCodec();
-//      SimpleRemotingBuffer buffer = encode(response, codec);
-//      checkHeader(buffer, response);
-//      checkBody(buffer, StreamUtils.toBytes(msg));
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertTrue(decodedPacket instanceof SessionBrowserNextMessageResponseMessage);
-//      SessionBrowserNextMessageResponseMessage decodedResponse = (SessionBrowserNextMessageResponseMessage) decodedPacket;
-//      assertEquals(SESS_BROWSER_NEXTMESSAGE_RESP, decodedResponse.getType());
-//      assertEquals(response.getMessage().getMessageID(), decodedResponse
-//            .getMessage().getMessageID());
-//   }
-//
-//   public void testBrowserNextMessageBlockRequest() throws Exception
-//   {
-//      SessionBrowserNextMessageBlockMessage request = new SessionBrowserNextMessageBlockMessage(
-//            randomLong());
-//
-//      AbstractPacketCodec codec = new SessionBrowserNextMessageBlockMessageCodec();
-//      SimpleRemotingBuffer buffer = encode(request, codec);
-//      checkHeader(buffer, request);
-//      checkBody(buffer, request.getMaxMessages());
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertTrue(decodedPacket instanceof SessionBrowserNextMessageBlockMessage);
-//      SessionBrowserNextMessageBlockMessage decodedRequest = (SessionBrowserNextMessageBlockMessage) decodedPacket;
-//      assertEquals(SESS_BROWSER_NEXTMESSAGEBLOCK, decodedPacket.getType());
-//      assertEquals(request.getMaxMessages(), decodedRequest.getMaxMessages());
-//   }
-//
-//   public void testBrowserNextMessageBlockResponse() throws Exception
-//   {
-//      Message[] messages = new Message[] { new MessageImpl(), new MessageImpl() };
-//      SessionBrowserNextMessageBlockResponseMessage response = new SessionBrowserNextMessageBlockResponseMessage(
-//            messages);
-//
-//      AbstractPacketCodec codec = new SessionBrowserNextMessageBlockResponseMessageCodec();
-//      SimpleRemotingBuffer buffer = encode(response, codec);
-//      checkHeader(buffer, response);
-//      checkBody(buffer, messages.length, SessionBrowserNextMessageBlockResponseMessageCodec
-//            .encode(messages));
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertTrue(decodedPacket instanceof SessionBrowserNextMessageBlockResponseMessage);
-//      SessionBrowserNextMessageBlockResponseMessage decodedResponse = (SessionBrowserNextMessageBlockResponseMessage) decodedPacket;
-//      assertEquals(SESS_BROWSER_NEXTMESSAGEBLOCK_RESP, decodedResponse.getType());
-//      assertEquals(response.getMessages()[0].getMessageID(), decodedResponse
-//            .getMessages()[0].getMessageID());
-//      assertEquals(response.getMessages()[1].getMessageID(), decodedResponse
-//            .getMessages()[1].getMessageID());
-//   }
-//
-//  
-//   public void testSesssionXACommitMessageOnePhase() throws Exception
-//   {
-//      this.testSessionXACommitMessage(true);
-//   }
-//   
-//   public void testSessionXACommitMessageNotOnePhase() throws Exception
-//   {
-//      this.testSessionXACommitMessage(false);
-//   }
-//   
-//   private void testSessionXACommitMessage(boolean onePhase) throws Exception
-//   {
-//      Xid xid = this.generateXid();
-//      SessionXACommitMessage message = new SessionXACommitMessage(xid, onePhase);
-//      AbstractPacketCodec codec = new SessionXACommitMessageCodec();
-//      SimpleRemotingBuffer buffer = encode(message, codec);
-//      checkHeader(buffer, message);
-//      buffer.rewind();
-//      
-//      Packet decodedPacket = codec.decode(buffer);
-//      assertTrue(decodedPacket instanceof SessionXACommitMessage);
-//      SessionXACommitMessage decodedMessage = (SessionXACommitMessage)decodedPacket;
-//      assertEquals(SESS_XA_COMMIT, decodedMessage.getType());
-//      assertEquals(xid, decodedMessage.getXid());      
-//      assertEquals(onePhase, decodedMessage.isOnePhase());
-//   }
-//   
-//   public void testSessionXAEndMessageFailed() throws Exception
-//   {
-//      this.testSessionXAEndMessage(true);
-//   }
-//   
-//   public void testSessionXAEndMessageNotFailed() throws Exception
-//   {
-//      this.testSessionXACommitMessage(false);
-//   }
-//   
-//   private void testSessionXAEndMessage(boolean failed) throws Exception
-//   {
-//      Xid xid = this.generateXid();
-//      SessionXAEndMessage message = new SessionXAEndMessage(xid, failed);
-//      AbstractPacketCodec codec = new SessionXAEndMessageCodec();
-//      SimpleRemotingBuffer buffer = encode(message, codec);
-//      checkHeader(buffer, message);
-//      buffer.rewind();
-//      
-//      Packet decodedPacket = codec.decode(buffer);
-//      assertTrue(decodedPacket instanceof SessionXAEndMessage);
-//      SessionXAEndMessage decodedMessage = (SessionXAEndMessage)decodedPacket;
-//      assertEquals(SESS_XA_END, decodedMessage.getType());
-//      assertEquals(xid, decodedMessage.getXid());      
-//      assertEquals(failed, decodedMessage.isFailed());
-//   }
-//   
-//   public void testSessionXAForgetMessage() throws Exception
-//   {
-//      Xid xid = this.generateXid();
-//      SessionXAForgetMessage message = new SessionXAForgetMessage(xid);
-//      AbstractPacketCodec codec = new SessionXAForgetMessageCodec();
-//      SimpleRemotingBuffer buffer = encode(message, codec);
-//      checkHeader(buffer, message);
-//      buffer.rewind();
-//      
-//      Packet decodedPacket = codec.decode(buffer);
-//      assertTrue(decodedPacket instanceof SessionXAForgetMessage);
-//      SessionXAForgetMessage decodedMessage = (SessionXAForgetMessage)decodedPacket;
-//      assertEquals(SESS_XA_FORGET, decodedMessage.getType());
-//      assertEquals(xid, decodedMessage.getXid());      
-//   }
-//   
-//   public void testSessionXAGetInDoubtXidsMessage() throws Exception
-//   {
-//      PacketImpl request = new PacketImpl(SESS_XA_INDOUBT_XIDS);
-//
-//      AbstractPacketCodec codec = PacketCodecFactory.createCodecForEmptyPacket(
-//            SESS_XA_INDOUBT_XIDS);
-//      SimpleRemotingBuffer buffer = encode(request, codec);
-//      checkHeader(buffer, request);
-//      checkBodyIsEmpty(buffer);
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertEquals(SESS_XA_INDOUBT_XIDS, decodedPacket.getType());            
-//   }
-//   
-//   public void testSessionGetInDoubtXidsResponse() throws Exception
-//   {
-//      final int numXids = 10;
-//      List<Xid> xids = new ArrayList<Xid>();
-//      for (int i = 0; i < numXids; i++)
-//      {
-//         xids.add(generateXid());
-//      }
-//      
-//      SessionXAGetInDoubtXidsResponseMessage message = new SessionXAGetInDoubtXidsResponseMessage(xids);
-//      AbstractPacketCodec codec = new SessionXAGetInDoubtXidsResponseMessageCodec();
-//      SimpleRemotingBuffer buffer = encode(message, codec);
-//      checkHeader(buffer, message);
-//      buffer.rewind();
-//      
-//      Packet decodedPacket = codec.decode(buffer);
-//      assertTrue(decodedPacket instanceof SessionXAGetInDoubtXidsResponseMessage);
-//      SessionXAGetInDoubtXidsResponseMessage decodedMessage = (SessionXAGetInDoubtXidsResponseMessage)decodedPacket;
-//      assertEquals(SESS_XA_INDOUBT_XIDS_RESP, decodedMessage.getType());
-//           
-//      List<Xid> decodedXids = decodedMessage.getXids();
-//      assertNotNull(decodedXids);
-//      assertEquals(xids.size(), decodedXids.size());
-//      
-//      for (int i = 0; i < numXids; i++)
-//      {
-//         assertEquals(xids.get(i), decodedXids.get(i));
-//      }
-//   }
-//   
-//   public void testSessionXAGetTimeoutMessage() throws Exception
-//   {
-//      PacketImpl message = new PacketImpl(SESS_XA_GET_TIMEOUT);
-//
-//      AbstractPacketCodec codec = PacketCodecFactory.createCodecForEmptyPacket(
-//            PacketType.SESS_XA_GET_TIMEOUT);
-//      SimpleRemotingBuffer buffer = encode(message, codec);
-//      checkHeader(buffer, message);
-//      checkBodyIsEmpty(buffer);
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertEquals(SESS_XA_GET_TIMEOUT, decodedPacket.getType());     
-//   }
-//   
-//   public void testSessionXAGetTimeoutResponse() throws Exception
-//   {
-//      final int timeout = RandomUtil.randomInt();
-//      
-//      SessionXAGetTimeoutResponseMessage message = new SessionXAGetTimeoutResponseMessage(timeout);
-//      AbstractPacketCodec codec = new SessionXAGetTimeoutResponseMessageCodec();
-//      SimpleRemotingBuffer buffer = encode(message, codec);
-//      checkHeader(buffer, message);
-//      buffer.rewind();
-//      
-//      Packet decodedPacket = codec.decode(buffer);
-//      assertTrue(decodedPacket instanceof SessionXAGetTimeoutResponseMessage);
-//      SessionXAGetTimeoutResponseMessage decodedMessage = (SessionXAGetTimeoutResponseMessage)decodedPacket;
-//      assertEquals(SESS_XA_GET_TIMEOUT_RESP, decodedMessage.getType());
-//           
-//      assertEquals(timeout, decodedMessage.getTimeoutSeconds());
-//   }
-//
-//   public void testSessionXAJoinMessage() throws Exception
-//   {
-//      Xid xid = this.generateXid();
-//      SessionXAJoinMessage message = new SessionXAJoinMessage(xid);
-//      AbstractPacketCodec codec = new SessionXAJoinMessageCodec();
-//      SimpleRemotingBuffer buffer = encode(message, codec);
-//      checkHeader(buffer, message);
-//      buffer.rewind();
-//      
-//      Packet decodedPacket = codec.decode(buffer);
-//      assertTrue(decodedPacket instanceof SessionXAJoinMessage);
-//      SessionXAJoinMessage decodedMessage = (SessionXAJoinMessage)decodedPacket;
-//      assertEquals(SESS_XA_JOIN, decodedMessage.getType());
-//      assertEquals(xid, decodedMessage.getXid());      
-//   }
-//   
-//   public void testSessionXAPrepareMessage() throws Exception
-//   {
-//      Xid xid = this.generateXid();
-//      SessionXAPrepareMessage message = new SessionXAPrepareMessage(xid);
-//      AbstractPacketCodec codec = new SessionXAPrepareMessageCodec();
-//      SimpleRemotingBuffer buffer = encode(message, codec);
-//      checkHeader(buffer, message);
-//      buffer.rewind();
-//      
-//      Packet decodedPacket = codec.decode(buffer);
-//      assertTrue(decodedPacket instanceof SessionXAPrepareMessage);
-//      SessionXAPrepareMessage decodedMessage = (SessionXAPrepareMessage)decodedPacket;
-//      assertEquals(SESS_XA_PREPARE, decodedMessage.getType());
-//      assertEquals(xid, decodedMessage.getXid());      
-//   }
-//   
-//   public void testSessionXAResponseErrorNullString() throws Exception
-//   {
-//      testSessionXAResponse(true, true);
-//   }
-//   
-//   public void testSessionXAResponseErrorNotNullString() throws Exception
-//   {
-//      testSessionXAResponse(true, false);
-//   }
-//   
-//   public void testSessionXAResponseNoErrorNullString() throws Exception
-//   {
-//      testSessionXAResponse(false, true);
-//   }
-//   
-//   public void testSessionXAResponseNoErrorNotNullString() throws Exception
-//   {
-//      testSessionXAResponse(false, false);
-//   }
-//   
-//   private void testSessionXAResponse(boolean error, boolean nullString) throws Exception
-//   {
-//      int responseCode = RandomUtil.randomInt();
-//      
-//      String str = nullString ? null : RandomUtil.randomString();
-//      
-//      SessionXAResponseMessage message = new SessionXAResponseMessage(error, responseCode, str);
-//      AbstractPacketCodec codec = new SessionXAResponseMessageCodec();
-//      SimpleRemotingBuffer buffer = encode(message, codec);
-//      checkHeader(buffer, message);
-//      buffer.rewind();
-//      
-//      Packet decodedPacket = codec.decode(buffer);
-//      assertTrue(decodedPacket instanceof SessionXAResponseMessage);
-//      SessionXAResponseMessage decodedMessage = (SessionXAResponseMessage)decodedPacket;
-//      assertEquals(SESS_XA_RESP, decodedMessage.getType());
-//      assertEquals(error, decodedMessage.isError());
-//      assertEquals(responseCode, decodedMessage.getResponseCode());
-//      assertEquals(str, decodedMessage.getMessage());
-//   }
-//   
-//   public void testSessionXAResumeMessage() throws Exception
-//   {
-//      Xid xid = this.generateXid();
-//      SessionXAResumeMessage message = new SessionXAResumeMessage(xid);
-//      AbstractPacketCodec codec = new SessionXAResumeMessageCodec();
-//      SimpleRemotingBuffer buffer = encode(message, codec);
-//      checkHeader(buffer, message);
-//      buffer.rewind();
-//      
-//      Packet decodedPacket = codec.decode(buffer);
-//      assertTrue(decodedPacket instanceof SessionXAResumeMessage);
-//      SessionXAResumeMessage decodedMessage = (SessionXAResumeMessage)decodedPacket;
-//      assertEquals(SESS_XA_RESUME, decodedMessage.getType());
-//      assertEquals(xid, decodedMessage.getXid());      
-//   }
-//   
-//   public void testSessionXARollbackMessage() throws Exception
-//   {
-//      Xid xid = this.generateXid();
-//      SessionXARollbackMessage message = new SessionXARollbackMessage(xid);
-//      AbstractPacketCodec codec = new SessionXARollbackMessageCodec();
-//      SimpleRemotingBuffer buffer = encode(message, codec);
-//      checkHeader(buffer, message);
-//      buffer.rewind();
-//      
-//      Packet decodedPacket = codec.decode(buffer);
-//      assertTrue(decodedPacket instanceof SessionXARollbackMessage);
-//      SessionXARollbackMessage decodedMessage = (SessionXARollbackMessage)decodedPacket;
-//      assertEquals(SESS_XA_ROLLBACK, decodedMessage.getType());
-//      assertEquals(xid, decodedMessage.getXid());      
-//   }
-//   
-//   public void testSessionXASetTimeoutMessage() throws Exception
-//   {
-//      final int timeout = RandomUtil.randomInt();
-//      SessionXASetTimeoutMessage message = new SessionXASetTimeoutMessage(timeout);
-//      AbstractPacketCodec codec = new SessionXASetTimeoutMessageCodec();
-//      SimpleRemotingBuffer buffer = encode(message, codec);
-//      checkHeader(buffer, message);
-//      buffer.rewind();
-//      
-//      Packet decodedPacket = codec.decode(buffer);
-//      assertTrue(decodedPacket instanceof SessionXASetTimeoutMessage);
-//      SessionXASetTimeoutMessage decodedMessage = (SessionXASetTimeoutMessage)decodedPacket;
-//      assertEquals(SESS_XA_SET_TIMEOUT, decodedMessage.getType());
-//      assertEquals(timeout, decodedMessage.getTimeoutSeconds());      
-//   }
-//   
-//   public void testSessionXASetTimeoutResponseMessageOK() throws Exception
-//   {
-//      testSessionXASetTimeoutResponseMessage(true);
-//   }
-//   
-//   public void testSessionXASetTimeoutResponseMessageNotOK() throws Exception
-//   {
-//      testSessionXASetTimeoutResponseMessage(false);
-//   }
-//   
-//   private void testSessionXASetTimeoutResponseMessage(boolean ok) throws Exception
-//   {
-//      final int timeout = RandomUtil.randomInt();
-//      SessionXASetTimeoutResponseMessage message = new SessionXASetTimeoutResponseMessage(ok);
-//      AbstractPacketCodec codec = new SessionXASetTimeoutResponseMessageCodec();
-//      SimpleRemotingBuffer buffer = encode(message, codec);
-//      checkHeader(buffer, message);
-//      buffer.rewind();
-//      
-//      Packet decodedPacket = codec.decode(buffer);
-//      assertTrue(decodedPacket instanceof SessionXASetTimeoutResponseMessage);
-//      SessionXASetTimeoutResponseMessage decodedMessage = (SessionXASetTimeoutResponseMessage)decodedPacket;
-//      assertEquals(SESS_XA_SET_TIMEOUT_RESP, decodedMessage.getType());
-//      assertEquals(ok, decodedMessage.isOK());      
-//   }
-//   
-//   public void testSessionXAStartMessage() throws Exception
-//   {
-//      Xid xid = this.generateXid();
-//      SessionXAStartMessage message = new SessionXAStartMessage(xid);
-//      AbstractPacketCodec codec = new SessionXAStartMessageCodec();
-//      SimpleRemotingBuffer buffer = encode(message, codec);
-//      checkHeader(buffer, message);
-//      buffer.rewind();
-//      
-//      Packet decodedPacket = codec.decode(buffer);
-//      assertTrue(decodedPacket instanceof SessionXAStartMessage);
-//      SessionXAStartMessage decodedMessage = (SessionXAStartMessage)decodedPacket;
-//      assertEquals(SESS_XA_START, decodedMessage.getType());
-//      assertEquals(xid, decodedMessage.getXid());      
-//   }
-//   
-//   public void testSessionXASuspendMessage() throws Exception
-//   {
-//      PacketImpl message = new PacketImpl(SESS_XA_SUSPEND);
-//
-//      AbstractPacketCodec codec = PacketCodecFactory.createCodecForEmptyPacket(
-//            PacketType.SESS_XA_SUSPEND);
-//      SimpleRemotingBuffer buffer = encode(message, codec);
-//      checkHeader(buffer, message);
-//      checkBodyIsEmpty(buffer);
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertEquals(SESS_XA_SUSPEND, decodedPacket.getType());     
-//   }
-//   
-//   
-//   public void testSessionRemoveAddressMessage() throws Exception
-//   {
-//      SessionRemoveDestinationMessage message = new SessionRemoveDestinationMessage(randomString(), true);
-//
-//      AbstractPacketCodec codec = new SessionRemoveDestinationMessageCodec();
-//      
-//      SimpleRemotingBuffer buffer = encode(message, codec);
-//      checkHeader(buffer, message);
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertTrue(decodedPacket instanceof SessionRemoveDestinationMessage);
-//      SessionRemoveDestinationMessage decodedMessage = (SessionRemoveDestinationMessage)decodedPacket;
-//      assertEquals(SESS_REMOVE_DESTINATION, decodedMessage.getType());
-//      
-//      assertEquals(message.getAddress(), decodedMessage.getAddress());
-//      assertEquals(message.isTemporary(), decodedMessage.isTemporary());
-//            
-//   }
-//   
-//   public void testSessionCreateQueueRequest() throws Exception
-//   {
-//      SessionCreateQueueMessage message = new SessionCreateQueueMessage(randomString(), randomString(), randomString(), true, true);
-//
-//      AbstractPacketCodec codec = new SessionCreateQueueMessageCodec();
-//      
-//      SimpleRemotingBuffer buffer = encode(message, codec);
-//      checkHeader(buffer, message);
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertTrue(decodedPacket instanceof SessionCreateQueueMessage);
-//      SessionCreateQueueMessage decodedMessage = (SessionCreateQueueMessage)decodedPacket;
-//      assertEquals(SESS_CREATEQUEUE, decodedMessage.getType());
-//      
-//      assertEquals(message.getAddress(), decodedMessage.getAddress());
-//      assertEquals(message.getQueueName(), decodedMessage.getQueueName());
-//      assertEquals(message.getFilterString(), decodedMessage.getFilterString());
-//      assertEquals(message.isDurable(), decodedMessage.isDurable());
-//      assertEquals(message.isTemporary(), decodedMessage.isDurable());
-//            
-//   }
-//   
-//   public void testSessionQueueQueryRequest() throws Exception
-//   {
-//      SessionQueueQueryMessage message = new SessionQueueQueryMessage(randomString());
-//
-//      AbstractPacketCodec codec = new SessionQueueQueryMessageCodec();
-//      
-//      SimpleRemotingBuffer buffer = encode(message, codec);
-//      checkHeader(buffer, message);
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertTrue(decodedPacket instanceof SessionQueueQueryMessage);
-//      SessionQueueQueryMessage decodedMessage = (SessionQueueQueryMessage)decodedPacket;
-//      assertEquals(SESS_QUEUEQUERY, decodedMessage.getType());
-//      
-//      assertEquals(message.getQueueName(), decodedMessage.getQueueName());            
-//   }
-//   
-//   public void testSessionQueueQueryResponse() throws Exception
-//   {
-//      SessionQueueQueryResponseMessage message = new SessionQueueQueryResponseMessage(true, true, randomInt(), randomInt(), randomInt(),
-//                                                          randomString(), randomString());
-//
-//      AbstractPacketCodec codec = new SessionQueueQueryResponseMessageCodec();
-//      
-//      SimpleRemotingBuffer buffer = encode(message, codec);
-//      checkHeader(buffer, message);
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertTrue(decodedPacket instanceof SessionQueueQueryResponseMessage);
-//      SessionQueueQueryResponseMessage decodedMessage = (SessionQueueQueryResponseMessage)decodedPacket;
-//      assertEquals(SESS_QUEUEQUERY_RESP, decodedMessage.getType());
-//      
-//      assertEquals(message.isExists(), decodedMessage.isExists());
-//      assertEquals(message.isDurable(), decodedMessage.isDurable());
-//      assertEquals(message.isTemporary(), decodedMessage.isTemporary());
-//      assertEquals(message.getConsumerCount(), decodedMessage.getConsumerCount());
-//      assertEquals(message.getMessageCount(), decodedMessage.getMessageCount());
-//      assertEquals(message.getFilterString(), decodedMessage.getFilterString());
-//      assertEquals(message.getAddress(), decodedMessage.getAddress());         
-//   }
-//   
-//   public void testSessionAddAddressMessage() throws Exception
-//   {
-//      SessionAddDestinationMessage message = new SessionAddDestinationMessage(randomString(), true);
-//
-//      AbstractPacketCodec<SessionAddDestinationMessage> codec = new SessionAddDestinationMessageCodec();
-//      
-//      SimpleRemotingBuffer buffer = encode(message, codec);
-//      checkHeader(buffer, message);
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertTrue(decodedPacket instanceof SessionAddDestinationMessage);
-//      SessionAddDestinationMessage decodedMessage = (SessionAddDestinationMessage)decodedPacket;
-//      assertEquals(SESS_ADD_DESTINATION, decodedMessage.getType());
-//      
-//      assertEquals(message.getAddress(), decodedMessage.getAddress());      
-//      assertEquals(message.isTemporary(), decodedMessage.isTemporary());
-//   }
-//   
-//   public void testSessionBindingQueryMessage() throws Exception
-//   {
-//      SessionBindingQueryMessage message = new SessionBindingQueryMessage(randomString());
-//
-//      AbstractPacketCodec codec = new SessionBindingQueryMessageCodec();
-//      
-//      SimpleRemotingBuffer buffer = encode(message, codec);
-//      checkHeader(buffer, message);
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertTrue(decodedPacket instanceof SessionBindingQueryMessage);
-//      SessionBindingQueryMessage decodedMessage = (SessionBindingQueryMessage)decodedPacket;
-//      assertEquals(SESS_BINDINGQUERY, decodedMessage.getType());
-//      
-//      assertEquals(message.getAddress(), decodedMessage.getAddress());        
-//   }
-//   
-//   public void testSessionBindingQueryResponseMessage() throws Exception
-//   {
-//      boolean exists = true;
-//      List<String> queueNames = new ArrayList<String>();
-//      queueNames.add(randomString());
-//      queueNames.add(randomString());
-//      queueNames.add(randomString());
-//      SessionBindingQueryResponseMessage message = new SessionBindingQueryResponseMessage(exists, queueNames);
-//
-//      AbstractPacketCodec codec = new SessionBindingQueryResponseMessageCodec();
-//      
-//      SimpleRemotingBuffer buffer = encode(message, codec);
-//      checkHeader(buffer, message);
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertTrue(decodedPacket instanceof SessionBindingQueryResponseMessage);
-//      SessionBindingQueryResponseMessage decodedMessage = (SessionBindingQueryResponseMessage)decodedPacket;
-//      assertEquals(SESS_BINDINGQUERY_RESP, decodedMessage.getType());
-//      
-//      assertEquals(message.isExists(), decodedMessage.isExists());
-//      
-//      List<String> decodedNames = decodedMessage.getQueueNames();
-//      assertEquals(queueNames.size(), decodedNames.size());
-//      for (int i = 0; i < queueNames.size(); i++)
-//      {
-//         assertEquals(queueNames.get(i), decodedNames.get(i));
-//      }
-//   }
-//   
-//   
-//   public void testDeleteQueueRequest() throws Exception
-//   {
-//      SessionDeleteQueueMessage message = new SessionDeleteQueueMessage(randomString());
-//
-//      AbstractPacketCodec codec = new SessionDeleteQueueMessageCodec();
-//      
-//      SimpleRemotingBuffer buffer = encode(message, codec);
-//      checkHeader(buffer, message);
-//      buffer.rewind();
-//
-//      Packet decodedPacket = codec.decode(buffer);
-//
-//      assertTrue(decodedPacket instanceof SessionDeleteQueueMessage);
-//      SessionDeleteQueueMessage decodedMessage = (SessionDeleteQueueMessage)decodedPacket;
-//      assertEquals(SESS_DELETE_QUEUE, decodedMessage.getType());
-//      
-//      assertEquals(message.getQueueName(), decodedMessage.getQueueName());        
-//   }
-//   
-//   
-   
-   // Package protected ---------------------------------------------
+   public void testPing() throws Exception
+   {
+      Ping ping = new Ping(randomLong());
+      int bodyLength = LONG_LENGTH;
+      AbstractPacketCodec<Ping> codec = new PingCodec();
 
-   // Protected -----------------------------------------------------
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(ping, codec, ping
+            .getSessionID());
 
-   // Private -------------------------------------------------------
+      assertTrue(decodedPacket instanceof Ping);
+      Ping decodedPing = (Ping) decodedPacket;
+      assertEquals(PING, decodedPing.getType());
+      assertEquals(ping.getCorrelationID(), decodedPacket.getCorrelationID());
+      assertEquals(ping.getTargetID(), decodedPacket.getTargetID());
+      assertEquals(ping.getExecutorID(), decodedPacket.getExecutorID());
+   }
 
-   private RemotingBuffer encode(final Packet packet, final AbstractPacketCodec codec) throws Exception
+   public void testPong() throws Exception
    {
-   	SimpleProtocolEncoderOutput out = new SimpleProtocolEncoderOutput();
-   	
-   	codec.encode(packet, out);
-   	
-   	Object encodedMessage = out.getEncodedMessage();
-   	
-   	assertNotNull(encodedMessage);
-   	
-   	log.info("encoded message is " + encodedMessage);
-   	
-   	assertTrue(encodedMessage instanceof IoBuffer);
-   	
-   	RemotingBuffer buff = new BufferWrapper((IoBuffer)encodedMessage);
-   	
-   	return buff;
+      Pong pong = new Pong(randomLong(), true);
+      AbstractPacketCodec<Pong> codec = new PongCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(pong, codec, pong
+            .getSessionID(), pong.isSessionFailed());
+
+      assertTrue(decodedPacket instanceof Pong);
+      Pong decodedPong = (Pong) decodedPacket;
+      assertEquals(PONG, decodedPong.getType());
+      assertEquals(pong.getSessionID(), decodedPong.getSessionID());
+      assertEquals(pong.isSessionFailed(), decodedPong.isSessionFailed());
    }
-   
-   private Packet decode(final RemotingBuffer buffer, final AbstractPacketCodec codec, final int len) throws Exception
+
+   public void testTextPacket() throws Exception
    {
-   	SimpleProtocolDencoderOutput out = new SimpleProtocolDencoderOutput();
-   	
-   	int length = buffer.getInt();
-   	
-   	assertEquals(len + HEADER_LENGTH, length);
-   	
-   	byte type = buffer.get();
-   	
-   	assertEquals(codec.getType().byteValue(), type);
-   	
-   	codec.decode(buffer, out);
-   	
-   	Object message = out.getMessage();
-   	
-   	assertNotNull(message);
-   	
-   	assertTrue(message instanceof Packet);
-   	
-   	return (Packet)message;	
+      TextPacket packet = new TextPacket("testTextPacket");
+      AbstractPacketCodec<TextPacket> codec = new TextPacketCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(packet, codec, packet
+            .getText());
+
+      assertTrue(decodedPacket instanceof TextPacket);
+      TextPacket p = (TextPacket) decodedPacket;
+
+      assertEquals(TEXT, p.getType());
+      assertEquals(packet.getText(), p.getText());
    }
-   
-   private class SimpleProtocolEncoderOutput implements ProtocolEncoderOutput
+
+   public void testBytesPacket() throws Exception
    {
-   	private Object encodedMessage;
-   	
-		public WriteFuture flush()
-		{
-			return null;
-		}
+      BytesPacket packet = new BytesPacket(randomBytes());
+      AbstractPacketCodec<BytesPacket> codec = new BytesPacketCodec();
 
-		public void mergeAll()
-		{
-		}
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(packet, codec, packet
+            .getBytes());
 
-		public void write(Object encodedMessage)
-		{
-			this.encodedMessage = encodedMessage;
-		}
-		
-		public Object getEncodedMessage()
-		{
-			return this.encodedMessage;
-		}
-   	
+      assertTrue(decodedPacket instanceof BytesPacket);
+      BytesPacket p = (BytesPacket) decodedPacket;
+
+      assertEquals(BYTES, p.getType());
+      assertEqualsByteArrays(packet.getBytes(), p.getBytes());
    }
-   
-   private class SimpleProtocolDencoderOutput implements ProtocolDecoderOutput
+
+   public void testCreateConnectionRequest() throws Exception
    {
-   	private Object message;
+      int version = randomInt();
+      long remotingSessionID = randomLong();
+      String clientVMID = randomString();
+      String username = null;
+      String password = null;
+      CreateConnectionRequest request = new CreateConnectionRequest(version,
+            remotingSessionID, clientVMID, username, password);
+      AbstractPacketCodec<CreateConnectionRequest> codec = new CreateConnectionMessageCodec();
 
-		public void flush()
-		{
-		}
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(request, codec,
+            version, remotingSessionID, clientVMID, username, password);
 
-		public void write(Object message)
-		{	
-			this.message = message;
-		}
-   	
-		public Object getMessage()
-		{
-			return message;
-		}
-   	
+      assertTrue(decodedPacket instanceof CreateConnectionRequest);
+      CreateConnectionRequest decodedRequest = (CreateConnectionRequest) decodedPacket;
+
+      assertEquals(CREATECONNECTION, decodedPacket.getType());
+      assertEquals(request.getVersion(), decodedRequest.getVersion());
+      assertEquals(request.getRemotingSessionID(), decodedRequest
+            .getRemotingSessionID());
+      assertEquals(request.getClientVMID(), decodedRequest.getClientVMID());
+      assertEquals(request.getUsername(), decodedRequest.getUsername());
+      assertEquals(request.getPassword(), decodedRequest.getPassword());
    }
 
-   private final class SimpleRemotingBuffer extends BufferWrapper
+   public void testCreateConnectionResponse() throws Exception
    {
+      CreateConnectionResponse response = new CreateConnectionResponse(
+            randomLong());
+      AbstractPacketCodec<CreateConnectionResponse> codec = new CreateConnectionResponseMessageCodec();
 
-      public SimpleRemotingBuffer(IoBuffer buffer)
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(response, codec,
+            response.getConnectionTargetID());
+
+      assertTrue(decodedPacket instanceof CreateConnectionResponse);
+      CreateConnectionResponse decodedResponse = (CreateConnectionResponse) decodedPacket;
+      assertEquals(PacketType.CREATECONNECTION_RESP, decodedResponse.getType());
+      assertEquals(response.getConnectionTargetID(), decodedResponse
+            .getConnectionTargetID());
+   }
+
+   public void testConnectionCreateSessionMessage() throws Exception
+   {
+      ConnectionCreateSessionMessage request = new ConnectionCreateSessionMessage(
+            randomBoolean(), randomBoolean(), randomBoolean());
+      AbstractPacketCodec<ConnectionCreateSessionMessage> codec = new ConnectionCreateSessionMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(request, codec,
+            request.isXA(), request.isAutoCommitSends(), request
+                  .isAutoCommitAcks());
+
+      assertTrue(decodedPacket instanceof ConnectionCreateSessionMessage);
+      ConnectionCreateSessionMessage decodedRequest = (ConnectionCreateSessionMessage) decodedPacket;
+      assertEquals(PacketType.CONN_CREATESESSION, decodedRequest.getType());
+      assertEquals(request.isXA(), decodedRequest.isXA());
+      assertEquals(request.isAutoCommitSends(), decodedRequest
+            .isAutoCommitSends());
+      assertEquals(request.isAutoCommitAcks(), decodedRequest
+            .isAutoCommitAcks());
+   }
+
+   public void testConnectionCreateSessionResponseMessage() throws Exception
+   {
+      ConnectionCreateSessionResponseMessage response = new ConnectionCreateSessionResponseMessage(
+            randomLong());
+      AbstractPacketCodec<ConnectionCreateSessionResponseMessage> codec = new ConnectionCreateSessionResponseMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(response, codec,
+            response.getSessionID());
+
+      assertTrue(decodedPacket instanceof ConnectionCreateSessionResponseMessage);
+      ConnectionCreateSessionResponseMessage decodedResponse = (ConnectionCreateSessionResponseMessage) decodedPacket;
+      assertEquals(PacketType.CONN_CREATESESSION_RESP, decodedResponse
+            .getType());
+      assertEquals(response.getSessionID(), decodedResponse.getSessionID());
+   }
+
+   public void testProducerSendMessage() throws Exception
+   {
+      ProducerSendMessage packet = new ProducerSendMessage(randomString(),
+            new MessageImpl());
+      byte[] messageBytes = StreamUtils.toBytes(packet.getMessage());
+      AbstractPacketCodec codec = new ProducerSendMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(packet, codec, packet
+            .getAddress(), StreamUtils.toBytes(packet.getMessage()));
+
+      assertTrue(decodedPacket instanceof ProducerSendMessage);
+      ProducerSendMessage decodedMessage = (ProducerSendMessage) decodedPacket;
+      assertEquals(PacketType.PROD_SEND, decodedPacket.getType());
+      assertEquals(packet.getAddress(), decodedMessage.getAddress());
+      assertEquals(packet.getMessage().getMessageID(), decodedMessage
+            .getMessage().getMessageID());
+   }
+
+   public void testSessionCreateConsumerMessage() throws Exception
+   {
+      String destination = "queue.SessionCreateConsumerMessage";
+      SessionCreateConsumerMessage request = new SessionCreateConsumerMessage(
+            destination, "color = 'red'", false, false, randomInt(),
+            randomInt());
+      AbstractPacketCodec codec = new SessionCreateConsumerMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(request, codec,
+            request.getQueueName(), request.getFilterString(), request
+                  .isNoLocal(), request.isAutoDeleteQueue(), request
+                  .getWindowSize(), request.getMaxRate());
+
+      assertTrue(decodedPacket instanceof SessionCreateConsumerMessage);
+      SessionCreateConsumerMessage decodedRequest = (SessionCreateConsumerMessage) decodedPacket;
+      assertEquals(PacketType.SESS_CREATECONSUMER, decodedRequest.getType());
+      assertEquals(request.getQueueName(), decodedRequest.getQueueName());
+      assertEquals(request.getFilterString(), decodedRequest.getFilterString());
+      assertEquals(request.isNoLocal(), decodedRequest.isNoLocal());
+      assertEquals(request.isAutoDeleteQueue(), decodedRequest
+            .isAutoDeleteQueue());
+      assertEquals(request.getWindowSize(), decodedRequest.getWindowSize());
+      assertEquals(request.getMaxRate(), decodedRequest.getMaxRate());
+   }
+
+   public void testSessionCreateConsumerResponseMessage() throws Exception
+   {
+      SessionCreateConsumerResponseMessage response = new SessionCreateConsumerResponseMessage(
+            randomLong(), randomInt());
+      AbstractPacketCodec codec = new SessionCreateConsumerResponseMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(response, codec,
+            response.getConsumerTargetID(), response.getWindowSize());
+
+      assertTrue(decodedPacket instanceof SessionCreateConsumerResponseMessage);
+      SessionCreateConsumerResponseMessage decodedResponse = (SessionCreateConsumerResponseMessage) decodedPacket;
+      assertEquals(SESS_CREATECONSUMER_RESP, decodedResponse.getType());
+
+      assertEquals(response.getConsumerTargetID(), decodedResponse
+            .getConsumerTargetID());
+      assertEquals(response.getWindowSize(), decodedResponse.getWindowSize());
+   }
+
+   public void testSessionCreateProducerMessage() throws Exception
+   {
+      String destination = "queue.testSessionCreateProducerMessage";
+      int windowSize = randomInt();
+      int maxRate = randomInt();
+      SessionCreateProducerMessage request = new SessionCreateProducerMessage(
+            destination, windowSize, maxRate);
+      AbstractPacketCodec codec = new SessionCreateProducerMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(request, codec,
+            request.getAddress(), request.getWindowSize(), request.getMaxRate());
+
+      assertTrue(decodedPacket instanceof SessionCreateProducerMessage);
+      SessionCreateProducerMessage decodedRequest = (SessionCreateProducerMessage) decodedPacket;
+      assertEquals(SESS_CREATEPRODUCER, decodedRequest.getType());
+      assertEquals(request.getAddress(), decodedRequest.getAddress());
+      assertEquals(request.getWindowSize(), decodedRequest.getWindowSize());
+      assertEquals(request.getMaxRate(), decodedRequest.getMaxRate());
+   }
+
+   public void testSessionCreateProducerResponseMessage() throws Exception
+   {
+      SessionCreateProducerResponseMessage response = new SessionCreateProducerResponseMessage(
+            randomLong(), randomInt(), randomInt());
+      AbstractPacketCodec codec = new SessionCreateProducerResponseMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(response, codec,
+            response.getProducerTargetID(), response.getWindowSize(), response
+                  .getMaxRate());
+
+      assertTrue(decodedPacket instanceof SessionCreateProducerResponseMessage);
+      SessionCreateProducerResponseMessage decodedResponse = (SessionCreateProducerResponseMessage) decodedPacket;
+      assertEquals(SESS_CREATEPRODUCER_RESP, decodedResponse.getType());
+      assertEquals(response.getProducerTargetID(), decodedResponse
+            .getProducerTargetID());
+      assertEquals(response.getWindowSize(), decodedResponse.getWindowSize());
+      assertEquals(response.getMaxRate(), decodedResponse.getMaxRate());
+   }
+
+   public void testStartConnectionMessage() throws Exception
+   {
+      PacketImpl packet = new PacketImpl(CONN_START);
+      AbstractPacketCodec codec = PacketCodecFactory
+            .createCodecForEmptyPacket(CONN_START);
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(packet, codec);
+
+      assertEquals(CONN_START, decodedPacket.getType());
+   }
+
+   public void testStopConnectionMessage() throws Exception
+   {
+      PacketImpl packet = new PacketImpl(CONN_STOP);
+      AbstractPacketCodec codec = PacketCodecFactory
+            .createCodecForEmptyPacket(CONN_STOP);
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(packet, codec);
+
+      assertEquals(CONN_STOP, decodedPacket.getType());
+   }
+
+   public void testConsumerFlowTokenMessage() throws Exception
+   {
+      ConsumerFlowTokenMessage message = new ConsumerFlowTokenMessage(
+            randomInt());
+      AbstractPacketCodec codec = new ConsumerFlowTokenMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(message, codec,
+            message.getTokens());
+
+      assertTrue(decodedPacket instanceof ConsumerFlowTokenMessage);
+      ConsumerFlowTokenMessage decodedMessage = (ConsumerFlowTokenMessage) decodedPacket;
+      assertEquals(CONS_FLOWTOKEN, decodedMessage.getType());
+      assertEquals(message.getTokens(), decodedMessage.getTokens());
+   }
+
+   public void testProducerReceiveTokensMessage() throws Exception
+   {
+      ProducerReceiveTokensMessage message = new ProducerReceiveTokensMessage(
+            randomInt());
+      AbstractPacketCodec codec = new ProducerReceiveTokensMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(message, codec,
+            message.getTokens());
+
+      assertTrue(decodedPacket instanceof ProducerReceiveTokensMessage);
+      ProducerReceiveTokensMessage decodedMessage = (ProducerReceiveTokensMessage) decodedPacket;
+      assertEquals(PROD_RECEIVETOKENS, decodedMessage.getType());
+      assertEquals(message.getTokens(), decodedMessage.getTokens());
+   }
+
+   public void testConsumerDeliverMessage() throws Exception
+   {
+      Message msg = new MessageImpl();
+      ConsumerDeliverMessage message = new ConsumerDeliverMessage(msg,
+            randomLong());
+      AbstractPacketCodec codec = new ConsumerDeliverMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(message, codec,
+            StreamUtils.toBytes(msg), message.getDeliveryID());
+
+      assertTrue(decodedPacket instanceof ConsumerDeliverMessage);
+      ConsumerDeliverMessage decodedMessage = (ConsumerDeliverMessage) decodedPacket;
+      assertEquals(CONS_DELIVER, decodedMessage.getType());
+      assertEquals(message.getMessage().getMessageID(), decodedMessage
+            .getMessage().getMessageID());
+      assertEquals(message.getDeliveryID(), decodedMessage.getDeliveryID());
+   }
+
+   public void testSessionAcknowledgeMessage() throws Exception
+   {
+      SessionAcknowledgeMessage message = new SessionAcknowledgeMessage(
+            randomLong(), randomBoolean());
+      AbstractPacketCodec codec = new SessionAcknowledgeMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(message, codec,
+            message.getDeliveryID(), message.isAllUpTo());
+
+      assertTrue(decodedPacket instanceof SessionAcknowledgeMessage);
+      SessionAcknowledgeMessage decodedMessage = (SessionAcknowledgeMessage) decodedPacket;
+      assertEquals(SESS_ACKNOWLEDGE, decodedMessage.getType());
+      assertEquals(message.getDeliveryID(), decodedMessage.getDeliveryID());
+      assertEquals(message.isAllUpTo(), decodedMessage.isAllUpTo());
+   }
+
+   public void testSessionCancelMessage() throws Exception
+   {
+      SessionCancelMessage message = new SessionCancelMessage(randomLong(),
+            randomBoolean());
+      AbstractPacketCodec codec = new SessionCancelMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(message, codec,
+            message.getDeliveryID(), message.isExpired());
+
+      assertTrue(decodedPacket instanceof SessionCancelMessage);
+      SessionCancelMessage decodedMessage = (SessionCancelMessage) decodedPacket;
+      assertEquals(SESS_CANCEL, decodedMessage.getType());
+      assertEquals(message.getDeliveryID(), decodedMessage.getDeliveryID());
+      assertEquals(message.isExpired(), decodedMessage.isExpired());
+   }
+
+   public void testSessionCommitMessage() throws Exception
+   {
+      PacketImpl message = new PacketImpl(SESS_COMMIT);
+      AbstractPacketCodec codec = PacketCodecFactory
+            .createCodecForEmptyPacket(SESS_COMMIT);
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(message, codec);
+
+      assertEquals(SESS_COMMIT, decodedPacket.getType());
+   }
+
+   public void testSessionRollbackMessage() throws Exception
+   {
+      PacketImpl message = new PacketImpl(SESS_ROLLBACK);
+      AbstractPacketCodec codec = PacketCodecFactory
+            .createCodecForEmptyPacket(SESS_ROLLBACK);
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(message, codec);
+
+      assertEquals(SESS_ROLLBACK, decodedPacket.getType());
+   }
+
+   public void testSessionRecoverMessage() throws Exception
+   {
+      PacketImpl message = new PacketImpl(SESS_RECOVER);
+      AbstractPacketCodec codec = PacketCodecFactory
+            .createCodecForEmptyPacket(SESS_RECOVER);
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(message, codec);
+
+      assertEquals(SESS_RECOVER, decodedPacket.getType());
+   }
+
+   public void testCloseMessage() throws Exception
+   {
+      PacketImpl message = new PacketImpl(CLOSE);
+      AbstractPacketCodec codec = PacketCodecFactory
+            .createCodecForEmptyPacket(CLOSE);
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(message, codec);
+
+      assertEquals(CLOSE, decodedPacket.getType());
+   }
+
+   public void testSessionCreateBrowserMessage() throws Exception
+   {
+      String destination = "queue.testCreateBrowserRequest";
+      SessionCreateBrowserMessage request = new SessionCreateBrowserMessage(
+            destination, "color = 'red'");
+      AbstractPacketCodec codec = new SessionCreateBrowserMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(request, codec,
+            request.getQueueName(), request.getFilterString());
+
+      assertTrue(decodedPacket instanceof SessionCreateBrowserMessage);
+      SessionCreateBrowserMessage decodedRequest = (SessionCreateBrowserMessage) decodedPacket;
+      assertEquals(SESS_CREATEBROWSER, decodedRequest.getType());
+      assertEquals(request.getQueueName(), decodedRequest.getQueueName());
+      assertEquals(request.getFilterString(), decodedRequest.getFilterString());
+   }
+
+   public void testSessionCreateBrowserResponseMessage() throws Exception
+   {
+      SessionCreateBrowserResponseMessage response = new SessionCreateBrowserResponseMessage(
+            randomLong());
+      AbstractPacketCodec codec = new SessionCreateBrowserResponseMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(response, codec,
+            response.getBrowserTargetID());
+
+      assertTrue(decodedPacket instanceof SessionCreateBrowserResponseMessage);
+      SessionCreateBrowserResponseMessage decodedResponse = (SessionCreateBrowserResponseMessage) decodedPacket;
+      assertEquals(SESS_CREATEBROWSER_RESP, decodedResponse.getType());
+      assertEquals(response.getBrowserTargetID(), decodedResponse
+            .getBrowserTargetID());
+   }
+
+   public void testBrowserResetMessage() throws Exception
+   {
+      PacketImpl message = new PacketImpl(SESS_BROWSER_RESET);
+      AbstractPacketCodec codec = PacketCodecFactory
+            .createCodecForEmptyPacket(SESS_BROWSER_RESET);
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(message, codec);
+
+      assertEquals(SESS_BROWSER_RESET, decodedPacket.getType());
+   }
+
+   public void testBrowserHasNextMessageRequest() throws Exception
+   {
+      PacketImpl request = new PacketImpl(SESS_BROWSER_HASNEXTMESSAGE);
+      AbstractPacketCodec codec = PacketCodecFactory
+            .createCodecForEmptyPacket(SESS_BROWSER_HASNEXTMESSAGE);
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(request, codec);
+
+      assertEquals(SESS_BROWSER_HASNEXTMESSAGE, decodedPacket.getType());
+   }
+
+   public void testSessionBrowserHasNextMessageResponseMessage()
+         throws Exception
+   {
+      SessionBrowserHasNextMessageResponseMessage response = new SessionBrowserHasNextMessageResponseMessage(
+            randomBoolean());
+      AbstractPacketCodec codec = new SessionBrowserHasNextMessageResponseMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(response, codec,
+            response.hasNext());
+
+      assertTrue(decodedPacket instanceof SessionBrowserHasNextMessageResponseMessage);
+      SessionBrowserHasNextMessageResponseMessage decodedResponse = (SessionBrowserHasNextMessageResponseMessage) decodedPacket;
+      assertEquals(SESS_BROWSER_HASNEXTMESSAGE_RESP, decodedResponse.getType());
+      assertEquals(response.hasNext(), decodedResponse.hasNext());
+   }
+
+   public void testBrowserNextMessageRequest() throws Exception
+   {
+      PacketImpl request = new PacketImpl(SESS_BROWSER_NEXTMESSAGE);
+      AbstractPacketCodec codec = PacketCodecFactory
+            .createCodecForEmptyPacket(SESS_BROWSER_NEXTMESSAGE);
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(request, codec);
+
+      assertEquals(SESS_BROWSER_NEXTMESSAGE, decodedPacket.getType());
+   }
+
+   public void testSessionBrowserNextMessageResponseMessage() throws Exception
+   {
+      SessionBrowserNextMessageResponseMessage response = new SessionBrowserNextMessageResponseMessage(
+            new MessageImpl());
+      AbstractPacketCodec codec = new SessionBrowserNextMessageResponseMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(response, codec,
+            StreamUtils.toBytes(response.getMessage()));
+
+      assertTrue(decodedPacket instanceof SessionBrowserNextMessageResponseMessage);
+      SessionBrowserNextMessageResponseMessage decodedResponse = (SessionBrowserNextMessageResponseMessage) decodedPacket;
+      assertEquals(SESS_BROWSER_NEXTMESSAGE_RESP, decodedResponse.getType());
+      assertEquals(response.getMessage().getMessageID(), decodedResponse
+            .getMessage().getMessageID());
+   }
+
+   public void testSessionBrowserNextMessageBlockMessage() throws Exception
+   {
+      SessionBrowserNextMessageBlockMessage request = new SessionBrowserNextMessageBlockMessage(
+            randomLong());
+      AbstractPacketCodec codec = new SessionBrowserNextMessageBlockMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(request, codec,
+            request.getMaxMessages());
+
+      assertTrue(decodedPacket instanceof SessionBrowserNextMessageBlockMessage);
+      SessionBrowserNextMessageBlockMessage decodedRequest = (SessionBrowserNextMessageBlockMessage) decodedPacket;
+      assertEquals(SESS_BROWSER_NEXTMESSAGEBLOCK, decodedPacket.getType());
+      assertEquals(request.getMaxMessages(), decodedRequest.getMaxMessages());
+   }
+
+   public void testSessionBrowserNextMessageBlockResponseMessage()
+         throws Exception
+   {
+      Message[] messages = new Message[] { new MessageImpl(), new MessageImpl() };
+      SessionBrowserNextMessageBlockResponseMessage response = new SessionBrowserNextMessageBlockResponseMessage(
+            messages);
+      AbstractPacketCodec codec = new SessionBrowserNextMessageBlockResponseMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(response, codec,
+            SessionBrowserNextMessageBlockResponseMessageCodec.encode(messages));
+
+      assertTrue(decodedPacket instanceof SessionBrowserNextMessageBlockResponseMessage);
+      SessionBrowserNextMessageBlockResponseMessage decodedResponse = (SessionBrowserNextMessageBlockResponseMessage) decodedPacket;
+      assertEquals(SESS_BROWSER_NEXTMESSAGEBLOCK_RESP, decodedResponse
+            .getType());
+      assertEquals(response.getMessages()[0].getMessageID(), decodedResponse
+            .getMessages()[0].getMessageID());
+      assertEquals(response.getMessages()[1].getMessageID(), decodedResponse
+            .getMessages()[1].getMessageID());
+   }
+
+   public void testSessionXACommitMessage() throws Exception
+   {
+      SessionXACommitMessage message = new SessionXACommitMessage(randomXid(),
+            randomBoolean());
+      AbstractPacketCodec codec = new SessionXACommitMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(message, codec,
+            message.getXid(), message.isOnePhase());
+
+      assertTrue(decodedPacket instanceof SessionXACommitMessage);
+      SessionXACommitMessage decodedMessage = (SessionXACommitMessage) decodedPacket;
+      assertEquals(SESS_XA_COMMIT, decodedMessage.getType());
+      assertEquals(message.getXid(), decodedMessage.getXid());
+      assertEquals(message.isOnePhase(), decodedMessage.isOnePhase());
+   }
+
+   public void testSessionXAEndMessage() throws Exception
+   {
+      SessionXAEndMessage message = new SessionXAEndMessage(randomXid(),
+            randomBoolean());
+      AbstractPacketCodec codec = new SessionXAEndMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(message, codec,
+            message.getXid(), message.isFailed());
+
+      assertTrue(decodedPacket instanceof SessionXAEndMessage);
+      SessionXAEndMessage decodedMessage = (SessionXAEndMessage) decodedPacket;
+      assertEquals(SESS_XA_END, decodedMessage.getType());
+      assertEquals(message.getXid(), decodedMessage.getXid());
+      assertEquals(message.isFailed(), decodedMessage.isFailed());
+   }
+
+   public void testSessionXAForgetMessage() throws Exception
+   {
+      SessionXAForgetMessage message = new SessionXAForgetMessage(randomXid());
+      AbstractPacketCodec codec = new SessionXAForgetMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(message, codec,
+            message.getXid());
+
+      assertTrue(decodedPacket instanceof SessionXAForgetMessage);
+      SessionXAForgetMessage decodedMessage = (SessionXAForgetMessage) decodedPacket;
+      assertEquals(SESS_XA_FORGET, decodedMessage.getType());
+      assertEquals(message.getXid(), decodedMessage.getXid());
+   }
+
+   public void testSessionXAGetInDoubtXidsMessage() throws Exception
+   {
+      PacketImpl request = new PacketImpl(SESS_XA_INDOUBT_XIDS);
+      AbstractPacketCodec codec = createCodecForEmptyPacket(SESS_XA_INDOUBT_XIDS);
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(request, codec);
+
+      assertEquals(SESS_XA_INDOUBT_XIDS, decodedPacket.getType());
+   }
+
+   public void testSessionXAGetInDoubtXidsResponseMessage() throws Exception
+   {
+      final int numXids = 10;
+      List<Xid> xids = new ArrayList<Xid>();
+      for (int i = 0; i < numXids; i++)
       {
-         super(buffer);
+         xids.add(randomXid());
       }
+      SessionXAGetInDoubtXidsResponseMessage message = new SessionXAGetInDoubtXidsResponseMessage(
+            xids);
+      AbstractPacketCodec codec = new SessionXAGetInDoubtXidsResponseMessageCodec();
 
-      IoBuffer buffer()
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(message, codec, xids);
+
+      assertTrue(decodedPacket instanceof SessionXAGetInDoubtXidsResponseMessage);
+      SessionXAGetInDoubtXidsResponseMessage decodedMessage = (SessionXAGetInDoubtXidsResponseMessage) decodedPacket;
+      assertEquals(SESS_XA_INDOUBT_XIDS_RESP, decodedMessage.getType());
+
+      assertSameXids(message.getXids(), decodedMessage.getXids());
+   }
+
+   public void testSessionXAGetTimeoutMessage() throws Exception
+   {
+      PacketImpl message = new PacketImpl(SESS_XA_GET_TIMEOUT);
+      AbstractPacketCodec codec = createCodecForEmptyPacket(PacketType.SESS_XA_GET_TIMEOUT);
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(message, codec);
+
+      assertEquals(SESS_XA_GET_TIMEOUT, decodedPacket.getType());
+   }
+
+   public void testSessionXAGetTimeoutResponseMessage() throws Exception
+   {
+      SessionXAGetTimeoutResponseMessage message = new SessionXAGetTimeoutResponseMessage(
+            randomInt());
+      AbstractPacketCodec codec = new SessionXAGetTimeoutResponseMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(message, codec,
+            message.getTimeoutSeconds());
+
+      assertTrue(decodedPacket instanceof SessionXAGetTimeoutResponseMessage);
+      SessionXAGetTimeoutResponseMessage decodedMessage = (SessionXAGetTimeoutResponseMessage) decodedPacket;
+      assertEquals(SESS_XA_GET_TIMEOUT_RESP, decodedMessage.getType());
+      assertEquals(message.getTimeoutSeconds(), decodedMessage
+            .getTimeoutSeconds());
+   }
+
+   public void testSessionXAJoinMessage() throws Exception
+   {
+      SessionXAJoinMessage message = new SessionXAJoinMessage(randomXid());
+      AbstractPacketCodec codec = new SessionXAJoinMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(message, codec,
+            message.getXid());
+
+      assertTrue(decodedPacket instanceof SessionXAJoinMessage);
+      SessionXAJoinMessage decodedMessage = (SessionXAJoinMessage) decodedPacket;
+      assertEquals(SESS_XA_JOIN, decodedMessage.getType());
+      assertEquals(message.getXid(), decodedMessage.getXid());
+   }
+
+   public void testSessionXAPrepareMessage() throws Exception
+   {
+      SessionXAPrepareMessage message = new SessionXAPrepareMessage(randomXid());
+      AbstractPacketCodec codec = new SessionXAPrepareMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(message, codec,
+            message.getXid());
+
+      assertTrue(decodedPacket instanceof SessionXAPrepareMessage);
+      SessionXAPrepareMessage decodedMessage = (SessionXAPrepareMessage) decodedPacket;
+      assertEquals(SESS_XA_PREPARE, decodedMessage.getType());
+      assertEquals(message.getXid(), decodedMessage.getXid());
+   }
+
+   public void testSessionXAResponseMessage() throws Exception
+   {
+      SessionXAResponseMessage message = new SessionXAResponseMessage(
+            randomBoolean(), randomInt(), randomString());
+      AbstractPacketCodec codec = new SessionXAResponseMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(message, codec,
+            message.isError(), message.getResponseCode(), message.getMessage());
+
+      assertTrue(decodedPacket instanceof SessionXAResponseMessage);
+      SessionXAResponseMessage decodedMessage = (SessionXAResponseMessage) decodedPacket;
+      assertEquals(SESS_XA_RESP, decodedMessage.getType());
+      assertEquals(message.isError(), decodedMessage.isError());
+      assertEquals(message.getResponseCode(), decodedMessage.getResponseCode());
+      assertEquals(message.getMessage(), decodedMessage.getMessage());
+   }
+
+   public void testSessionXAResumeMessage() throws Exception
+   {
+      SessionXAResumeMessage message = new SessionXAResumeMessage(randomXid());
+      AbstractPacketCodec codec = new SessionXAResumeMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(message, codec,
+            message.getXid());
+
+      assertTrue(decodedPacket instanceof SessionXAResumeMessage);
+      SessionXAResumeMessage decodedMessage = (SessionXAResumeMessage) decodedPacket;
+      assertEquals(SESS_XA_RESUME, decodedMessage.getType());
+      assertEquals(message.getXid(), decodedMessage.getXid());
+   }
+
+   public void testSessionXARollbackMessage() throws Exception
+   {
+      SessionXARollbackMessage message = new SessionXARollbackMessage(
+            randomXid());
+      AbstractPacketCodec codec = new SessionXARollbackMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(message, codec,
+            message.getXid());
+
+      assertTrue(decodedPacket instanceof SessionXARollbackMessage);
+      SessionXARollbackMessage decodedMessage = (SessionXARollbackMessage) decodedPacket;
+      assertEquals(SESS_XA_ROLLBACK, decodedMessage.getType());
+      assertEquals(message.getXid(), decodedMessage.getXid());
+   }
+
+   public void testSessionXASetTimeoutMessage() throws Exception
+   {
+      SessionXASetTimeoutMessage message = new SessionXASetTimeoutMessage(
+            randomInt());
+      AbstractPacketCodec codec = new SessionXASetTimeoutMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(message, codec,
+            message.getTimeoutSeconds());
+
+      assertTrue(decodedPacket instanceof SessionXASetTimeoutMessage);
+      SessionXASetTimeoutMessage decodedMessage = (SessionXASetTimeoutMessage) decodedPacket;
+      assertEquals(SESS_XA_SET_TIMEOUT, decodedMessage.getType());
+      assertEquals(message.getTimeoutSeconds(), decodedMessage
+            .getTimeoutSeconds());
+   }
+
+   public void testSessionXASetTimeoutResponseMessage() throws Exception
+   {
+      SessionXASetTimeoutResponseMessage message = new SessionXASetTimeoutResponseMessage(
+            randomBoolean());
+      AbstractPacketCodec codec = new SessionXASetTimeoutResponseMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(message, codec,
+            message.isOK());
+
+      assertTrue(decodedPacket instanceof SessionXASetTimeoutResponseMessage);
+      SessionXASetTimeoutResponseMessage decodedMessage = (SessionXASetTimeoutResponseMessage) decodedPacket;
+      assertEquals(SESS_XA_SET_TIMEOUT_RESP, decodedMessage.getType());
+      assertEquals(message.isOK(), decodedMessage.isOK());
+   }
+
+   public void testSessionXAStartMessage() throws Exception
+   {
+      SessionXAStartMessage message = new SessionXAStartMessage(randomXid());
+      AbstractPacketCodec codec = new SessionXAStartMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(message, codec,
+            message.getXid());
+
+      assertTrue(decodedPacket instanceof SessionXAStartMessage);
+      SessionXAStartMessage decodedMessage = (SessionXAStartMessage) decodedPacket;
+      assertEquals(SESS_XA_START, decodedMessage.getType());
+      assertEquals(message.getXid(), decodedMessage.getXid());
+   }
+
+   public void testSessionXASuspendMessage() throws Exception
+   {
+      PacketImpl message = new PacketImpl(SESS_XA_SUSPEND);
+      AbstractPacketCodec codec = PacketCodecFactory
+            .createCodecForEmptyPacket(PacketType.SESS_XA_SUSPEND);
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(message, codec);
+
+      assertEquals(SESS_XA_SUSPEND, decodedPacket.getType());
+   }
+
+   public void testSessionRemoveDestinationMessage() throws Exception
+   {
+      SessionRemoveDestinationMessage message = new SessionRemoveDestinationMessage(
+            randomString(), randomBoolean());
+      AbstractPacketCodec codec = new SessionRemoveDestinationMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(message, codec,
+            message.getAddress(), message.isTemporary());
+
+      assertTrue(decodedPacket instanceof SessionRemoveDestinationMessage);
+      SessionRemoveDestinationMessage decodedMessage = (SessionRemoveDestinationMessage) decodedPacket;
+      assertEquals(SESS_REMOVE_DESTINATION, decodedMessage.getType());
+      assertEquals(message.getAddress(), decodedMessage.getAddress());
+      assertEquals(message.isTemporary(), decodedMessage.isTemporary());
+   }
+
+   public void testSessionCreateQueueMessage() throws Exception
+   {
+      SessionCreateQueueMessage message = new SessionCreateQueueMessage(
+            randomString(), randomString(), randomString(), randomBoolean(),
+            randomBoolean());
+      AbstractPacketCodec codec = new SessionCreateQueueMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(message, codec,
+            message.getAddress(), message.getQueueName(), message
+                  .getFilterString(), message.isDurable(), message
+                  .isTemporary());
+
+      assertTrue(decodedPacket instanceof SessionCreateQueueMessage);
+      SessionCreateQueueMessage decodedMessage = (SessionCreateQueueMessage) decodedPacket;
+      assertEquals(SESS_CREATEQUEUE, decodedMessage.getType());
+
+      assertEquals(message.getAddress(), decodedMessage.getAddress());
+      assertEquals(message.getQueueName(), decodedMessage.getQueueName());
+      assertEquals(message.getFilterString(), decodedMessage.getFilterString());
+      assertEquals(message.isDurable(), decodedMessage.isDurable());
+      assertEquals(message.isTemporary(), decodedMessage.isTemporary());
+
+   }
+
+   public void testSessionQueueQueryMessage() throws Exception
+   {
+      SessionQueueQueryMessage message = new SessionQueueQueryMessage(
+            randomString());
+      AbstractPacketCodec codec = new SessionQueueQueryMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(message, codec,
+            message.getQueueName());
+
+      assertTrue(decodedPacket instanceof SessionQueueQueryMessage);
+      SessionQueueQueryMessage decodedMessage = (SessionQueueQueryMessage) decodedPacket;
+      assertEquals(SESS_QUEUEQUERY, decodedMessage.getType());
+      assertEquals(message.getQueueName(), decodedMessage.getQueueName());
+   }
+
+   public void testSessionQueueQueryResponseMessage() throws Exception
+   {
+      SessionQueueQueryResponseMessage message = new SessionQueueQueryResponseMessage(
+            randomBoolean(), randomBoolean(), randomInt(), randomInt(),
+            randomInt(), randomString(), randomString());
+      AbstractPacketCodec codec = new SessionQueueQueryResponseMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(message, codec,
+            message.isExists(), message.isDurable(), message.isTemporary(),
+            message.getMaxSize(), message.getConsumerCount(), message
+                  .getMessageCount(), message.getFilterString(), message
+                  .getAddress());
+
+      assertTrue(decodedPacket instanceof SessionQueueQueryResponseMessage);
+      SessionQueueQueryResponseMessage decodedMessage = (SessionQueueQueryResponseMessage) decodedPacket;
+      assertEquals(SESS_QUEUEQUERY_RESP, decodedMessage.getType());
+
+      assertEquals(message.isExists(), decodedMessage.isExists());
+      assertEquals(message.isDurable(), decodedMessage.isDurable());
+      assertEquals(message.isTemporary(), decodedMessage.isTemporary());
+      assertEquals(message.getConsumerCount(), decodedMessage
+            .getConsumerCount());
+      assertEquals(message.getMessageCount(), decodedMessage.getMessageCount());
+      assertEquals(message.getFilterString(), decodedMessage.getFilterString());
+      assertEquals(message.getAddress(), decodedMessage.getAddress());
+   }
+
+   public void testSessionAddAddressMessage() throws Exception
+   {
+      SessionAddDestinationMessage message = new SessionAddDestinationMessage(
+            randomString(), randomBoolean());
+      AbstractPacketCodec<SessionAddDestinationMessage> codec = new SessionAddDestinationMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(message, codec,
+            message.getAddress(), message.isTemporary());
+
+      assertTrue(decodedPacket instanceof SessionAddDestinationMessage);
+      SessionAddDestinationMessage decodedMessage = (SessionAddDestinationMessage) decodedPacket;
+      assertEquals(SESS_ADD_DESTINATION, decodedMessage.getType());
+      assertEquals(message.getAddress(), decodedMessage.getAddress());
+      assertEquals(message.isTemporary(), decodedMessage.isTemporary());
+   }
+
+   public void testSessionBindingQueryMessage() throws Exception
+   {
+      SessionBindingQueryMessage message = new SessionBindingQueryMessage(
+            randomString());
+      AbstractPacketCodec codec = new SessionBindingQueryMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(message, codec,
+            message.getAddress());
+
+      assertTrue(decodedPacket instanceof SessionBindingQueryMessage);
+      SessionBindingQueryMessage decodedMessage = (SessionBindingQueryMessage) decodedPacket;
+      assertEquals(SESS_BINDINGQUERY, decodedMessage.getType());
+
+      assertEquals(message.getAddress(), decodedMessage.getAddress());
+   }
+
+   public void testSessionBindingQueryResponseMessage() throws Exception
+   {
+      boolean exists = true;
+      List<String> queueNames = new ArrayList<String>();
+      queueNames.add(randomString());
+      queueNames.add(randomString());
+      queueNames.add(randomString());
+      SessionBindingQueryResponseMessage message = new SessionBindingQueryResponseMessage(
+            exists, queueNames);
+      AbstractPacketCodec codec = new SessionBindingQueryResponseMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(message, codec,
+            message.isExists(), message.getQueueNames());
+
+      assertTrue(decodedPacket instanceof SessionBindingQueryResponseMessage);
+      SessionBindingQueryResponseMessage decodedMessage = (SessionBindingQueryResponseMessage) decodedPacket;
+      assertEquals(SESS_BINDINGQUERY_RESP, decodedMessage.getType());
+      assertEquals(message.isExists(), decodedMessage.isExists());
+
+      List<String> decodedNames = decodedMessage.getQueueNames();
+      assertEquals(queueNames.size(), decodedNames.size());
+      for (int i = 0; i < queueNames.size(); i++)
       {
-         return buffer;
+         assertEquals(queueNames.get(i), decodedNames.get(i));
       }
+   }
 
-      public void flip()
+   public void testDeleteQueueRequest() throws Exception
+   {
+      SessionDeleteQueueMessage message = new SessionDeleteQueueMessage(
+            randomString());
+      AbstractPacketCodec codec = new SessionDeleteQueueMessageCodec();
+
+      Packet decodedPacket = encodeAndCheckBytesAndDecode(message, codec,
+            message.getQueueName());
+
+      assertTrue(decodedPacket instanceof SessionDeleteQueueMessage);
+      SessionDeleteQueueMessage decodedMessage = (SessionDeleteQueueMessage) decodedPacket;
+      assertEquals(SESS_DELETE_QUEUE, decodedMessage.getType());
+      assertEquals(message.getQueueName(), decodedMessage.getQueueName());
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   private static class SimpleProtocolEncoderOutput implements
+         ProtocolEncoderOutput
+   {
+      private Object encodedMessage;
+
+      public WriteFuture flush()
       {
-         buffer.flip();
+         return null;
       }
 
-      public void rewind()
+      public void mergeAll()
       {
-         buffer.rewind();
       }
 
-      public int remaining()
+      public void write(Object encodedMessage)
       {
-         return buffer.remaining();
+         this.encodedMessage = encodedMessage;
       }
+
+      public Object getEncodedMessage()
+      {
+         return this.encodedMessage;
+      }
+
    }
+
+   private static class SimpleProtocolDencoderOutput implements
+         ProtocolDecoderOutput
+   {
+      private Object message;
+
+      public void flush()
+      {
+      }
+
+      public void write(Object message)
+      {
+         this.message = message;
+      }
+
+      public Object getMessage()
+      {
+         return message;
+      }
+
+   }
 }

Modified: trunk/tests/src/org/jboss/messaging/tests/unit/core/transaction/impl/TransactionTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/core/transaction/impl/TransactionTest.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/transaction/impl/TransactionTest.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -1,5 +1,7 @@
 package org.jboss.messaging.tests.unit.core.transaction.impl;
 
+import static org.jboss.messaging.tests.util.RandomUtil.randomXid;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.Executors;
@@ -81,7 +83,7 @@
    	
       EasyMock.replay(sm);
       
-      Xid xid = generateXid();
+      Xid xid = randomXid();
       
    	Transaction tx = new TransactionImpl(xid, sm, po);
    	
@@ -627,7 +629,7 @@
    	
       EasyMock.replay(sm);
       
-      Xid xid = this.generateXid();
+      Xid xid = randomXid();
       
       Transaction tx = new TransactionImpl(xid, sm, po);
       

Modified: trunk/tests/src/org/jboss/messaging/tests/util/RandomUtil.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/util/RandomUtil.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/tests/src/org/jboss/messaging/tests/util/RandomUtil.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -10,6 +10,10 @@
 
 import java.util.Random;
 
+import javax.transaction.xa.Xid;
+
+import org.jboss.messaging.core.transaction.impl.XidImpl;
+
 /**
  * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
  * 
@@ -45,11 +49,22 @@
    {
       return Integer.valueOf(random.nextInt()).byteValue();
    }
+   
+   public static boolean randomBoolean()
+   {
+      return random.nextBoolean();
+   }
 
    public static byte[] randomBytes()
    {
       return randomString().getBytes();
    }
+   
+   
+   public static Xid randomXid()
+   {      
+      return new XidImpl(randomBytes(), randomInt(), randomBytes());
+   }
 
    // Constructors --------------------------------------------------
 

Modified: trunk/tests/src/org/jboss/messaging/tests/util/UnitTestCase.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/util/UnitTestCase.java	2008-04-16 09:23:02 UTC (rev 4065)
+++ trunk/tests/src/org/jboss/messaging/tests/util/UnitTestCase.java	2008-04-16 15:15:09 UTC (rev 4066)
@@ -264,19 +264,7 @@
          assertEquals(entry.getValue(), headers2.get(entry.getKey()));
       }
    }
+
    
-   protected XidImpl generateXid()
-   {      
-      String id1 = java.util.UUID.randomUUID().toString();
-      
-      String id2 = java.util.UUID.randomUUID().toString();
-      
-      int id = (int)(Math.random() * 100);
-      
-      XidImpl xid = new XidImpl(id1.getBytes(), id, id2.getBytes());
-      
-      return xid;
-   }
-   
 
 }




More information about the jboss-cvs-commits mailing list