[hornetq-commits] JBoss hornetq SVN: r7935 - in trunk: tests/src/org/hornetq/tests/integration/client and 1 other directory.

do-not-reply at jboss.org do-not-reply at jboss.org
Thu Sep 3 13:38:44 EDT 2009


Author: clebert.suconic at jboss.com
Date: 2009-09-03 13:38:43 -0400 (Thu, 03 Sep 2009)
New Revision: 7935

Modified:
   trunk/src/main/org/hornetq/core/client/impl/LargeMessageBufferImpl.java
   trunk/tests/src/org/hornetq/tests/integration/client/LargeMessageTest.java
Log:
Adding exception check on closed consumers and large message

Modified: trunk/src/main/org/hornetq/core/client/impl/LargeMessageBufferImpl.java
===================================================================
--- trunk/src/main/org/hornetq/core/client/impl/LargeMessageBufferImpl.java	2009-09-02 10:18:43 UTC (rev 7934)
+++ trunk/src/main/org/hornetq/core/client/impl/LargeMessageBufferImpl.java	2009-09-03 17:38:43 UTC (rev 7935)
@@ -63,6 +63,8 @@
    private final long totalSize;
 
    private boolean streamEnded = false;
+   
+   private boolean streamClosed = false;
 
    private final int readTimeout;
 
@@ -213,6 +215,7 @@
    {
       packets.offer(new SessionReceiveContinuationMessage());
       streamEnded = true;
+      streamClosed = true;
 
       notifyAll();
    }
@@ -1262,6 +1265,11 @@
       {
          throw new IndexOutOfBoundsException();
       }
+      
+      if (streamClosed)
+      {
+         throw new IllegalAccessError("The consumer associated with this large message was closed before the body was read");
+      }
 
       if (fileCache == null)
       {

Modified: trunk/tests/src/org/hornetq/tests/integration/client/LargeMessageTest.java
===================================================================
--- trunk/tests/src/org/hornetq/tests/integration/client/LargeMessageTest.java	2009-09-02 10:18:43 UTC (rev 7934)
+++ trunk/tests/src/org/hornetq/tests/integration/client/LargeMessageTest.java	2009-09-03 17:38:43 UTC (rev 7935)
@@ -67,7 +67,83 @@
    // Constructors --------------------------------------------------
 
    // Public --------------------------------------------------------
+   
+   
+   public void testCloseConsumer() throws Exception
+   {
+      final int messageSize = (int)(3.5 * ClientSessionFactoryImpl.DEFAULT_MIN_LARGE_MESSAGE_SIZE);
 
+      ClientSession session = null;           
+
+      try
+      {
+         server = createServer(true);
+
+         server.start();
+         
+         log.info("*********** starting test");
+
+         ClientSessionFactory sf = createInVMFactory();
+
+         session = sf.createSession(false, false, false);
+
+         session.createTemporaryQueue(ADDRESS, ADDRESS);
+
+         ClientProducer producer = session.createProducer(ADDRESS);
+
+         Message clientFile = createLargeClientMessage(session, messageSize, true);
+
+         log.info("*********** sending large message");
+         
+         producer.send(clientFile);
+
+         session.commit();
+
+         session.start();
+
+         ClientConsumer consumer = session.createConsumer(ADDRESS);
+         ClientMessage msg1 = consumer.receive(1000);
+         msg1.acknowledge();
+         session.commit();
+         assertNotNull(msg1);
+         
+         consumer.close();
+
+         try
+         {
+            msg1.getBody().readByte();
+            fail ("Exception was expected");
+         }
+         catch (Throwable ignored)
+         {
+         }
+
+         session.close();
+
+         validateNoFilesOnLargeDir();
+      }
+      finally
+      {
+         try
+         {
+            server.stop();
+         }
+         catch (Throwable ignored)
+         {
+         }
+
+         try
+         {
+            session.close();
+         }
+         catch (Throwable ignored)
+         {
+         }
+      }
+   }
+
+
+
    public void testDLALargeMessage() throws Exception
    {
       final int messageSize = (int)(3.5 * ClientSessionFactoryImpl.DEFAULT_MIN_LARGE_MESSAGE_SIZE);



More information about the hornetq-commits mailing list