[jboss-cvs] JBoss Messaging SVN: r4443 - in trunk: tests/src/org/jboss/messaging/tests/unit/core/client/impl and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Jun 12 07:25:16 EDT 2008


Author: timfox
Date: 2008-06-12 07:25:16 -0400 (Thu, 12 Jun 2008)
New Revision: 4443

Modified:
   trunk/src/main/org/jboss/messaging/core/client/impl/ClientConnectionImpl.java
   trunk/src/main/org/jboss/messaging/core/client/impl/ClientSessionImpl.java
   trunk/src/main/org/jboss/messaging/core/client/impl/ClientSessionInternal.java
   trunk/tests/src/org/jboss/messaging/tests/unit/core/client/impl/ClientSessionImplTest.java
Log:
More tests


Modified: trunk/src/main/org/jboss/messaging/core/client/impl/ClientConnectionImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/client/impl/ClientConnectionImpl.java	2008-06-12 10:23:04 UTC (rev 4442)
+++ trunk/src/main/org/jboss/messaging/core/client/impl/ClientConnectionImpl.java	2008-06-12 11:25:16 UTC (rev 4443)
@@ -222,7 +222,6 @@
        
       for (ClientSession session: childrenClone)
       {
-         log.info("closing session");
          session.close(); 
       }
    }

Modified: trunk/src/main/org/jboss/messaging/core/client/impl/ClientSessionImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/client/impl/ClientSessionImpl.java	2008-06-12 10:23:04 UTC (rev 4442)
+++ trunk/src/main/org/jboss/messaging/core/client/impl/ClientSessionImpl.java	2008-06-12 11:25:16 UTC (rev 4443)
@@ -579,7 +579,7 @@
    
    public void removeConsumer(final ClientConsumerInternal consumer) throws MessagingException
    {
-      consumers.remove(consumer.getClientTargetID());
+      consumers.remove(consumer);
             
       //1. flush any unacked message to the server
       
@@ -605,6 +605,26 @@
       browsers.remove(browser);
    }
    
+   public Set<ClientProducerInternal> getProducers()
+   {
+      return new HashSet<ClientProducerInternal>(producers);
+   }
+   
+   public Set<ClientConsumerInternal> getConsumers()
+   {
+      return new HashSet<ClientConsumerInternal>(consumers);
+   }
+   
+   public Set<ClientBrowser> getBrowsers()
+   {
+      return new HashSet<ClientBrowser>(browsers);
+   }
+   
+   public Map<SimpleString, ClientProducerInternal> getProducerCache()
+   {
+      return new HashMap<SimpleString, ClientProducerInternal>(producerCache);
+   }
+   
    // XAResource implementation --------------------------------------------------------------------
    
    public void commit(final Xid xid, final boolean onePhase) throws XAException

Modified: trunk/src/main/org/jboss/messaging/core/client/impl/ClientSessionInternal.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/client/impl/ClientSessionInternal.java	2008-06-12 10:23:04 UTC (rev 4442)
+++ trunk/src/main/org/jboss/messaging/core/client/impl/ClientSessionInternal.java	2008-06-12 11:25:16 UTC (rev 4443)
@@ -6,9 +6,13 @@
  */
 package org.jboss.messaging.core.client.impl;
 
+import java.util.Map;
+import java.util.Set;
+
 import org.jboss.messaging.core.client.ClientBrowser;
 import org.jboss.messaging.core.client.ClientSession;
 import org.jboss.messaging.core.exception.MessagingException;
+import org.jboss.messaging.util.SimpleString;
 
 /**
  * 
@@ -36,4 +40,12 @@
    void removeProducer(ClientProducerInternal producer);
    
    void removeBrowser(ClientBrowser browser);  
+   
+   Set<ClientProducerInternal> getProducers();
+   
+   Set<ClientConsumerInternal> getConsumers();
+   
+   Set<ClientBrowser> getBrowsers();
+   
+   Map<SimpleString, ClientProducerInternal> getProducerCache();
 }

Modified: trunk/tests/src/org/jboss/messaging/tests/unit/core/client/impl/ClientSessionImplTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/core/client/impl/ClientSessionImplTest.java	2008-06-12 10:23:04 UTC (rev 4442)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/client/impl/ClientSessionImplTest.java	2008-06-12 11:25:16 UTC (rev 4443)
@@ -26,8 +26,6 @@
 import org.easymock.EasyMock;
 import org.jboss.messaging.core.client.ClientBrowser;
 import org.jboss.messaging.core.client.ClientConnectionFactory;
-import org.jboss.messaging.core.client.ClientConsumer;
-import org.jboss.messaging.core.client.ClientProducer;
 import org.jboss.messaging.core.client.ClientSession;
 import org.jboss.messaging.core.client.impl.ClientConnectionInternal;
 import org.jboss.messaging.core.client.impl.ClientConsumerInternal;
@@ -46,8 +44,6 @@
 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.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;
@@ -452,24 +448,46 @@
       //Create three with address1 - only one should be actually created
       
       ClientSessionInternal session = new ClientSessionImpl(conn, sessionTargetID, false, -1, true, false, false, false);
-
+      
+      assertEquals(0, session.getProducerCache().size());
+      
       ClientProducerInternal producer1 = (ClientProducerInternal)session.createProducer(address1, windowSize, maxRate,
                                                                                         false, false);
+      
+      assertEquals(0, session.getProducerCache().size());
+      
       session.removeProducer(producer1);  
       
+      assertEquals(1, session.getProducerCache().size());
+      
       ClientProducerInternal producer2 = (ClientProducerInternal)session.createProducer(address1, windowSize, maxRate,
                                                                                        false, false);      
+      
+      assertEquals(0, session.getProducerCache().size());
+      
       session.removeProducer(producer2);
       
+      assertEquals(1, session.getProducerCache().size());
+      
       ClientProducerInternal producer3 = (ClientProducerInternal)session.createProducer(address1, windowSize, maxRate,
                                                                                         false, false);
+      
+      assertEquals(0, session.getProducerCache().size());
+      
       session.removeProducer(producer3);
       
+      assertEquals(1, session.getProducerCache().size());
+      
       //Create another with a different address
       
       ClientProducerInternal producer4 = (ClientProducerInternal)session.createProducer(address2, windowSize, maxRate,
                                                                                         false, false);
+      
+      assertEquals(1, session.getProducerCache().size());
+      
       session.removeProducer(producer4); 
+      
+      assertEquals(2, session.getProducerCache().size());
             
       EasyMock.verify(conn, rc, pd);     
       
@@ -575,16 +593,27 @@
 
       EasyMock.expect(rc.sendBlocking(sessionTargetID, sessionTargetID, new EmptyPacket(EmptyPacket.SESS_COMMIT))).andReturn(null);
       
+      //Create some consumers
+      
+      ClientConsumerInternal cons1 = EasyMock.createStrictMock(ClientConsumerInternal.class);
+      ClientConsumerInternal cons2 = EasyMock.createStrictMock(ClientConsumerInternal.class);
+      
+      cons1.recover(numMessages);
+      cons2.recover(numMessages);
+            
       SessionAcknowledgeMessage message2 = new SessionAcknowledgeMessage(numMessages * 2 - 1, true);
       
       rc.sendOneWay(sessionTargetID, sessionTargetID, message2);
 
       EasyMock.expect(rc.sendBlocking(sessionTargetID, sessionTargetID, new EmptyPacket(EmptyPacket.SESS_ROLLBACK))).andReturn(null);
                   
-      EasyMock.replay(conn, rc, pd);
+      EasyMock.replay(conn, rc, pd, cons1, cons2);
       
       ClientSessionInternal session = new ClientSessionImpl(conn, sessionTargetID, false, -1, false, false, false, false);
       
+      session.addConsumer(cons1);
+      session.addConsumer(cons2);
+      
       //Simulate some messages being delivered in a non broken sequence (i.e. what would happen with a single consumer
       //on the session)
             
@@ -607,7 +636,7 @@
       
       session.rollback();
       
-      EasyMock.verify(conn, rc, pd);
+      EasyMock.verify(conn, rc, pd, cons1, cons2);
    }
    
    public void testAutoCommitSessionAcknowledge() throws Exception
@@ -800,8 +829,158 @@
       assertTrue(session.isClosed());
    }
    
+   public void testAddRemoveConsumer() throws Exception
+   {
+      testAddRemoveConsumer(true);
+      testAddRemoveConsumer(false);
+   }
+   
+   public void testAddRemoveProducer() throws Exception
+   {
+      ClientConnectionInternal conn = EasyMock.createStrictMock(ClientConnectionInternal.class);
+      
+      RemotingConnection rc = EasyMock.createStrictMock(RemotingConnection.class);
+          
+      //In ClientSessionImpl constructor
+      EasyMock.expect(conn.getRemotingConnection()).andReturn(rc);
+        
+      final long sessionTargetID = 9121892;
+                  
+      EasyMock.replay(conn, rc);
+      
+      ClientSessionInternal session = new ClientSessionImpl(conn, sessionTargetID, false, -1, false, false, false, false);
+      
+      EasyMock.verify(conn, rc);
+      
+      EasyMock.reset(conn, rc);
+                                      
+      ClientProducerInternal prod1 = EasyMock.createStrictMock(ClientProducerInternal.class);
+      ClientProducerInternal prod2 = EasyMock.createStrictMock(ClientProducerInternal.class);
+      
+      session.addProducer(prod1);
+      session.addProducer(prod2);
+      
+      assertEquals(2, session.getProducers().size());
+      assertTrue(session.getProducers().contains(prod1));
+      assertTrue(session.getProducers().contains(prod2));
+       
+      session.removeProducer(prod1);
+      
+      assertEquals(1, session.getProducers().size());
+      assertTrue(session.getProducers().contains(prod2));   
+      
+      session.removeProducer(prod2);
+      
+      assertEquals(0, session.getProducers().size()); 
+   }
+   
+   public void testAddRemoveBrowser() throws Exception
+   {
+      ClientConnectionInternal conn = EasyMock.createStrictMock(ClientConnectionInternal.class);
+      
+      RemotingConnection rc = EasyMock.createStrictMock(RemotingConnection.class);
+          
+      //In ClientSessionImpl constructor
+      EasyMock.expect(conn.getRemotingConnection()).andReturn(rc);
+        
+      final long sessionTargetID = 9121892;
+                  
+      EasyMock.replay(conn, rc);
+      
+      ClientSessionInternal session = new ClientSessionImpl(conn, sessionTargetID, false, -1, false, false, false, false);
+      
+      EasyMock.verify(conn, rc);
+      
+      EasyMock.reset(conn, rc);
+                                      
+      ClientBrowser browser1 = EasyMock.createStrictMock(ClientBrowser.class);
+      ClientBrowser browser2 = EasyMock.createStrictMock(ClientBrowser.class);
+      
+      session.addBrowser(browser1);
+      session.addBrowser(browser2);
+      
+      assertEquals(2, session.getBrowsers().size());
+      assertTrue(session.getBrowsers().contains(browser1));
+      assertTrue(session.getBrowsers().contains(browser2));
+       
+      session.removeBrowser(browser1);
+      
+      assertEquals(1, session.getBrowsers().size());
+      assertTrue(session.getBrowsers().contains(browser2));   
+      
+      session.removeBrowser(browser2);
+      
+      assertEquals(0, session.getBrowsers().size()); 
+   }
+   
+   
    // Private -------------------------------------------------------------------------------------------
 
+   private void testAddRemoveConsumer(boolean delivered) throws Exception
+   {
+      ClientConnectionInternal conn = EasyMock.createStrictMock(ClientConnectionInternal.class);
+      
+      RemotingConnection rc = EasyMock.createStrictMock(RemotingConnection.class);
+          
+      //In ClientSessionImpl constructor
+      EasyMock.expect(conn.getRemotingConnection()).andReturn(rc);
+        
+      final long sessionTargetID = 9121892;
+                  
+      EasyMock.replay(conn, rc);
+      
+      ClientSessionInternal session = new ClientSessionImpl(conn, sessionTargetID, false, -1, false, false, false, false);
+      
+      EasyMock.verify(conn, rc);
+      
+      EasyMock.reset(conn, rc);
+         
+      final int numDeliveries = 10;
+      
+      if (delivered)
+      {
+         SessionAcknowledgeMessage message = new SessionAcknowledgeMessage(numDeliveries - 1, true);
+         
+         rc.sendOneWay(sessionTargetID, sessionTargetID, message);
+      }
+            
+      rc.sendOneWay(sessionTargetID, sessionTargetID, new SessionCancelMessage(-1, false));
+      
+      rc.sendOneWay(sessionTargetID, sessionTargetID, new SessionCancelMessage(-1, false));
+                       
+      EasyMock.replay(conn, rc);
+                       
+      ClientConsumerInternal cons1 = EasyMock.createStrictMock(ClientConsumerInternal.class);
+      ClientConsumerInternal cons2 = EasyMock.createStrictMock(ClientConsumerInternal.class);
+      
+      session.addConsumer(cons1);
+      session.addConsumer(cons2);
+      
+      assertEquals(2, session.getConsumers().size());
+      assertTrue(session.getConsumers().contains(cons1));
+      assertTrue(session.getConsumers().contains(cons2));
+      
+      if (delivered)
+      {
+         //Simulate there being some undelivered messages
+         for (int i = 0; i < numDeliveries; i++)
+         {
+            session.delivered(i, false);
+            session.acknowledge();
+         }
+      }
+            
+      session.removeConsumer(cons1);
+      
+      assertEquals(1, session.getConsumers().size());
+      assertTrue(session.getConsumers().contains(cons2));  
+      
+      session.removeConsumer(cons2);
+      assertEquals(0, session.getConsumers().size());
+      
+      EasyMock.verify(conn, rc);          
+   }
+   
    private void testAutoCommitSessionAcknowledge(boolean blockOnAcknowledge) throws Exception
    {
       ClientConnectionInternal conn = EasyMock.createStrictMock(ClientConnectionInternal.class);
@@ -834,13 +1013,36 @@
 
       EasyMock.expect(rc.sendBlocking(sessionTargetID, sessionTargetID, new EmptyPacket(EmptyPacket.SESS_COMMIT))).andReturn(null);
       
-                    
-      EasyMock.replay(conn);
-      EasyMock.replay(rc);
-      EasyMock.replay(pd);
+      ClientConsumerInternal cons1 = EasyMock.createStrictMock(ClientConsumerInternal.class);
+      ClientConsumerInternal cons2 = EasyMock.createStrictMock(ClientConsumerInternal.class);
+      
+      for (int i = 0; i < numMessages / batchSize; i++)
+      {
+         SessionAcknowledgeMessage message = new SessionAcknowledgeMessage(numMessages + (i + 1) * batchSize - 1, true);
+               
+         if (blockOnAcknowledge)
+         {
+            EasyMock.expect(rc.sendBlocking(sessionTargetID, sessionTargetID, message)).andReturn(null);
+         }
+         else
+         {
+            rc.sendOneWay(sessionTargetID, sessionTargetID, message);
+         }
+      }
+      
+      cons1.recover(numMessages * 2);
+      cons2.recover(numMessages * 2);
             
+      EasyMock.expect(rc.sendBlocking(sessionTargetID, sessionTargetID, new EmptyPacket(EmptyPacket.SESS_ROLLBACK))).andReturn(null);
+                                     
+      EasyMock.replay(conn, rc, pd, cons1, cons2);
+            
       ClientSessionInternal session = new ClientSessionImpl(conn, sessionTargetID, false, batchSize, false, false, true, blockOnAcknowledge);
       
+      session.addConsumer(cons1);
+      
+      session.addConsumer(cons2);
+      
       //Simulate some messages being delivered in a non broken sequence (i.e. what would happen with a single consumer
       //on the session)
             
@@ -854,10 +1056,16 @@
       //Then commit
       session.commit();
       
+      for (int i = numMessages; i < numMessages * 2; i++)
+      {
+         session.delivered(i, false);
+         
+         session.acknowledge();
+      }
       
-      EasyMock.verify(conn);
-      EasyMock.verify(rc);
-      EasyMock.verify(pd); 
+      session.rollback();
+      
+      EasyMock.verify(conn, rc, pd, cons1, cons2);
    }
    
    private void testTransactedSessionAcknowledgeBroken(boolean blockOnAcknowledge) throws Exception
@@ -889,13 +1097,39 @@
       }
       
       EasyMock.expect(rc.sendBlocking(sessionTargetID, sessionTargetID, new EmptyPacket(EmptyPacket.SESS_COMMIT))).andReturn(null);
-                  
-      EasyMock.replay(conn);
-      EasyMock.replay(rc);
-      EasyMock.replay(pd);
       
+      final int[] messages2 = new int[] { 43, 44, 50, 47, 48, 60, 45, 61, 62, 64 };
+      
+      ClientConsumerInternal cons1 = EasyMock.createStrictMock(ClientConsumerInternal.class);
+      ClientConsumerInternal cons2 = EasyMock.createStrictMock(ClientConsumerInternal.class);
+      
+      for (int i = 0; i < messages2.length; i++)
+      {
+         SessionAcknowledgeMessage message = new SessionAcknowledgeMessage(messages2[i], false);
+         
+         if (blockOnAcknowledge)
+         {
+            EasyMock.expect(rc.sendBlocking(sessionTargetID, sessionTargetID, message)).andReturn(null);
+         }
+         else
+         {
+            rc.sendOneWay(sessionTargetID, sessionTargetID, message);
+         }
+      }
+      
+      //Recover back to the last committed
+      cons1.recover(36);
+      cons2.recover(36);
+            
+      EasyMock.expect(rc.sendBlocking(sessionTargetID, sessionTargetID, new EmptyPacket(EmptyPacket.SESS_ROLLBACK))).andReturn(null);
+                        
+      EasyMock.replay(conn, rc, pd, cons1, cons2);
+      
       ClientSessionInternal session = new ClientSessionImpl(conn, sessionTargetID, false, -1, false, false, false, blockOnAcknowledge);
       
+      session.addConsumer(cons1);
+      session.addConsumer(cons2);
+      
       //Simulate some messages being delivered in a broken sequence (i.e. what would happen with a single consumer
       //on the session)
             
@@ -909,9 +1143,16 @@
       //Then commit
       session.commit();
       
-      EasyMock.verify(conn);
-      EasyMock.verify(rc);
-      EasyMock.verify(pd); 
+      for (int i = 0; i < messages2.length; i++)
+      {
+         session.delivered(messages2[i], false);
+         
+         session.acknowledge();
+      }
+      
+      session.rollback();
+      
+      EasyMock.verify(conn, rc, pd, cons1, cons2); 
    }
    
    private void testCreateProducerWithWindowSizeMethod(final SimpleString address,




More information about the jboss-cvs-commits mailing list