[jboss-cvs] JBoss Messaging SVN: r4546 - trunk/tests/src/org/jboss/messaging/tests/unit/core/server/impl.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Jun 23 05:14:28 EDT 2008


Author: timfox
Date: 2008-06-23 05:14:28 -0400 (Mon, 23 Jun 2008)
New Revision: 4546

Added:
   trunk/tests/src/org/jboss/messaging/tests/unit/core/server/impl/ServerSessionImplTest.java
Log:
Added test


Added: trunk/tests/src/org/jboss/messaging/tests/unit/core/server/impl/ServerSessionImplTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/core/server/impl/ServerSessionImplTest.java	                        (rev 0)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/core/server/impl/ServerSessionImplTest.java	2008-06-23 09:14:28 UTC (rev 4546)
@@ -0,0 +1,625 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005-2008, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */ 
+package org.jboss.messaging.tests.unit.core.server.impl;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.concurrent.Executor;
+
+import org.easymock.EasyMock;
+import org.jboss.messaging.core.exception.MessagingException;
+import org.jboss.messaging.core.persistence.StorageManager;
+import org.jboss.messaging.core.postoffice.PostOffice;
+import org.jboss.messaging.core.remoting.PacketDispatcher;
+import org.jboss.messaging.core.remoting.PacketReturner;
+import org.jboss.messaging.core.remoting.impl.wireformat.ReceiveMessage;
+import org.jboss.messaging.core.security.CheckType;
+import org.jboss.messaging.core.security.SecurityStore;
+import org.jboss.messaging.core.server.Delivery;
+import org.jboss.messaging.core.server.HandleStatus;
+import org.jboss.messaging.core.server.MessageReference;
+import org.jboss.messaging.core.server.Queue;
+import org.jboss.messaging.core.server.ServerConnection;
+import org.jboss.messaging.core.server.ServerConsumer;
+import org.jboss.messaging.core.server.ServerMessage;
+import org.jboss.messaging.core.server.impl.ServerSessionImpl;
+import org.jboss.messaging.core.settings.HierarchicalRepository;
+import org.jboss.messaging.core.settings.impl.QueueSettings;
+import org.jboss.messaging.core.transaction.ResourceManager;
+import org.jboss.messaging.core.transaction.Transaction;
+import org.jboss.messaging.tests.util.UnitTestCase;
+import org.jboss.messaging.util.SimpleString;
+
+/**
+ * 
+ * A ServerSessionImplTest
+ * 
+ * Think of the things you can do with a session
+ * 
+ * test open close
+ * test start stop
+ * test constructor
+ * test send some messages - both tx and not
+ * 
+ * 
+ * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ *
+ */
+public class ServerSessionImplTest extends UnitTestCase
+{
+   public void testConstructor() throws Exception
+   {
+      testConstructor(false);
+      testConstructor(true);
+   }
+   
+   public void testAutoCommitSend() throws Exception
+   {
+      testAutoCommitSend(false);
+      
+      testAutoCommitSend(true);
+   }
+   
+   public void testNotAutoCommitSend() throws Exception
+   {
+      testNotAutoCommitSend(false);
+      
+      testNotAutoCommitSend(true);
+   }
+         
+   public void testAutoCommitSendFailsSecurity() throws Exception
+   {
+      ServerConnection conn = EasyMock.createStrictMock(ServerConnection.class);      
+      PacketReturner returner = EasyMock.createStrictMock(PacketReturner.class);
+      StorageManager sm = EasyMock.createStrictMock(StorageManager.class);
+      PostOffice po = EasyMock.createStrictMock(PostOffice.class);
+      HierarchicalRepository<QueueSettings> qs = EasyMock.createStrictMock(HierarchicalRepository.class);
+      ResourceManager rm = EasyMock.createStrictMock(ResourceManager.class);
+      SecurityStore ss = EasyMock.createStrictMock(SecurityStore.class);
+      PacketDispatcher pd = EasyMock.createStrictMock(PacketDispatcher.class);
+      Executor executor = EasyMock.createStrictMock(Executor.class);
+      ServerMessage msg = EasyMock.createStrictMock(ServerMessage.class);
+                 
+      final long sessionID = 102981029;
+      
+      EasyMock.expect(pd.generateID()).andReturn(sessionID);
+      EasyMock.expect(sm.generateTransactionID()).andReturn(71626L);
+      
+      final SimpleString dest = new SimpleString("blah");
+      EasyMock.expect(msg.getDestination()).andReturn(dest);
+      ss.check(dest, CheckType.WRITE, conn);
+      EasyMock.expectLastCall().andThrow(new MessagingException(MessagingException.SECURITY_EXCEPTION));
+            
+      EasyMock.replay(conn, returner, sm, po, qs, rm, ss, pd, executor, msg);
+                  
+      ServerSessionImpl session = new ServerSessionImpl(conn, true, false, false,
+                                                        returner, sm, po, qs, rm, ss, pd, executor);
+      
+      try
+      {
+         session.send(msg);
+         fail("Should throw exception");
+      }
+      catch (MessagingException e)
+      {
+         //Ok
+      }
+      
+      EasyMock.verify(conn, returner, sm, po, qs, rm, ss, pd, executor, msg);          
+   }
+   
+   public void testNotAutoCommitSendFailsSecurity() throws Exception
+   {
+      ServerConnection conn = EasyMock.createStrictMock(ServerConnection.class);      
+      PacketReturner returner = EasyMock.createStrictMock(PacketReturner.class);
+      StorageManager sm = EasyMock.createStrictMock(StorageManager.class);
+      PostOffice po = EasyMock.createStrictMock(PostOffice.class);
+      HierarchicalRepository<QueueSettings> qs = EasyMock.createStrictMock(HierarchicalRepository.class);
+      ResourceManager rm = EasyMock.createStrictMock(ResourceManager.class);
+      SecurityStore ss = EasyMock.createStrictMock(SecurityStore.class);
+      PacketDispatcher pd = EasyMock.createStrictMock(PacketDispatcher.class);
+      Executor executor = EasyMock.createStrictMock(Executor.class);
+      ServerMessage msg = EasyMock.createStrictMock(ServerMessage.class);
+                 
+      final long sessionID = 102981029;
+      
+      EasyMock.expect(pd.generateID()).andReturn(sessionID);
+      EasyMock.expect(sm.generateTransactionID()).andReturn(71626L);
+      
+      final SimpleString dest = new SimpleString("blah");
+      EasyMock.expect(msg.getDestination()).andReturn(dest);
+      ss.check(dest, CheckType.WRITE, conn);
+      EasyMock.expectLastCall().andThrow(new MessagingException(MessagingException.SECURITY_EXCEPTION));
+            
+                  
+      EasyMock.replay(conn, returner, sm, po, qs, rm, ss, pd, executor, msg);
+                  
+      ServerSessionImpl session = new ServerSessionImpl(conn, false, false, false,
+                                                        returner, sm, po, qs, rm, ss, pd, executor);
+      
+      try
+      {
+         session.send(msg);
+         fail("Should throw exception");
+      }
+      catch (MessagingException e)
+      {
+         //Ok
+      }
+      
+      EasyMock.verify(conn, returner, sm, po, qs, rm, ss, pd, executor, msg); 
+      
+      assertEquals(Transaction.State.ROLLBACK_ONLY, session.getTransaction().getState());
+   }
+   
+   public void testAcknowledgeAllUpToAutoCommitAck() throws Exception
+   {
+      testAcknowledgeAllUpToAutoCommitAck(false, false);
+      testAcknowledgeAllUpToAutoCommitAck(false, true);
+      testAcknowledgeAllUpToAutoCommitAck(true, false);
+      testAcknowledgeAllUpToAutoCommitAck(true, true);
+   }
+    
+   public void testAcknowledgeAllUpToNotAutoCommitAck() throws Exception
+   {
+      testAcknowledgeAllUpToNotAutoCommitAck(false, false);
+      testAcknowledgeAllUpToNotAutoCommitAck(false, true);
+      testAcknowledgeAllUpToNotAutoCommitAck(true, false);
+      testAcknowledgeAllUpToNotAutoCommitAck(true, true);
+   }
+   
+   // Private -----------------------------------------------------------------------------------
+   
+   private void testAcknowledgeAllUpToNotAutoCommitAck(final boolean durableMsg, final boolean durableQueue) throws Exception
+   {
+      ServerConnection conn = EasyMock.createStrictMock(ServerConnection.class);      
+      PacketReturner returner = EasyMock.createStrictMock(PacketReturner.class);
+      StorageManager sm = EasyMock.createStrictMock(StorageManager.class);
+      PostOffice po = EasyMock.createStrictMock(PostOffice.class);
+      HierarchicalRepository<QueueSettings> qs = EasyMock.createStrictMock(HierarchicalRepository.class);
+      ResourceManager rm = EasyMock.createStrictMock(ResourceManager.class);
+      SecurityStore ss = EasyMock.createStrictMock(SecurityStore.class);
+      PacketDispatcher pd = EasyMock.createStrictMock(PacketDispatcher.class);
+      Executor executor = EasyMock.createStrictMock(Executor.class);
+      ServerConsumer consumer = EasyMock.createStrictMock(ServerConsumer.class);
+      
+      final long sessionID = 102981029;
+      
+      EasyMock.expect(pd.generateID()).andReturn(sessionID);
+      
+      final long txID = 918291;
+      EasyMock.expect(sm.generateTransactionID()).andReturn(txID);
+      
+      final int numRefs = 10;
+      
+      List<MessageReference> refs = new ArrayList<MessageReference>();
+      for (int i = 0; i < numRefs; i++)
+      {
+         MessageReference ref = EasyMock.createStrictMock(MessageReference.class);
+         
+         EasyMock.expect(consumer.getClientTargetID()).andReturn(76767L);
+         EasyMock.expect(ref.getMessage()).andReturn(EasyMock.createMock(ServerMessage.class));
+         EasyMock.expect(ref.getDeliveryCount()).andReturn(0);
+         returner.send(EasyMock.isA(ReceiveMessage.class));
+         refs.add(ref);
+      }
+      
+      EasyMock.replay(conn, returner, sm, po, qs, rm, ss, pd, executor, consumer);
+      EasyMock.replay(refs.toArray());
+      
+      ServerSessionImpl session = new ServerSessionImpl(conn, false, false, false,
+            returner, sm, po, qs, rm, ss, pd, executor);
+
+      for (MessageReference ref: refs)
+      {
+         session.handleDelivery(ref, consumer);
+      }
+      
+      EasyMock.verify(conn, returner, sm, po, qs, rm, ss, pd, executor, consumer);
+      EasyMock.verify(refs.toArray());
+      
+      assertEquals(numRefs, session.getDeliveries().size());
+      
+      int i = 0;
+      for (Delivery del: session.getDeliveries())
+      {
+         assertEquals(i++, del.getDeliveryID());
+      }
+      
+      //Now ack half of them
+      
+      EasyMock.reset(conn, returner, sm, po, qs, rm, ss, pd, executor, consumer);
+      EasyMock.reset(refs.toArray());
+      
+      Queue queue = EasyMock.createMock(Queue.class); 
+      for (i = 0; i < numRefs / 2; i++)
+      {
+         MessageReference ref = refs.get(i);
+         ServerMessage msg = EasyMock.createMock(ServerMessage.class);
+                 
+         EasyMock.expect(ref.getMessage()).andStubReturn(msg);
+         EasyMock.expect(ref.getQueue()).andStubReturn(queue);
+         EasyMock.expect(msg.isDurable()).andStubReturn(durableMsg);
+         if (durableMsg)
+         {
+            EasyMock.expect(queue.isDurable()).andStubReturn(durableQueue);
+            if (durableQueue)
+            {
+               EasyMock.expect(msg.decrementDurableRefCount()).andStubReturn(numRefs);
+               final long queueID = 1929012;
+               EasyMock.expect(queue.getPersistenceID()).andReturn(queueID);
+               EasyMock.expect(msg.getMessageID()).andStubReturn(i);        
+               sm.storeAcknowledgeTransactional(txID, queueID, i);
+            }
+         }
+         EasyMock.replay(msg);
+         ref.incrementDeliveryCount();
+         if (i == numRefs / 2)
+         {
+            break;
+         }
+      }
+      
+      EasyMock.replay(conn, returner, sm, po, qs, rm, ss, pd, executor, consumer, queue);
+      EasyMock.replay(refs.toArray());
+      
+      session.acknowledge(numRefs / 2 - 1, true);
+      
+      EasyMock.verify(conn, returner, sm, po, qs, rm, ss, pd, executor, consumer, queue);
+      EasyMock.verify(refs.toArray());
+      
+      assertEquals(numRefs / 2, session.getDeliveries().size());
+      
+      i = numRefs / 2;
+      for (Delivery del: session.getDeliveries())
+      {
+         assertEquals(i++, del.getDeliveryID());
+      }
+      
+      //Now ack the rest
+      
+      EasyMock.reset(conn, returner, sm, po, qs, rm, ss, pd, executor, consumer, queue);
+      EasyMock.reset(refs.toArray());
+            
+      for (i = numRefs / 2; i < numRefs; i++)
+      {
+         MessageReference ref = refs.get(i);
+         ServerMessage msg = EasyMock.createMock(ServerMessage.class);
+                 
+         EasyMock.expect(ref.getMessage()).andStubReturn(msg);
+         EasyMock.expect(ref.getQueue()).andStubReturn(queue);
+         EasyMock.expect(msg.isDurable()).andStubReturn(true);
+         EasyMock.expect(queue.isDurable()).andStubReturn(true);
+         EasyMock.expect(msg.decrementDurableRefCount()).andStubReturn(numRefs);
+         final long queueID = 1929012;
+         EasyMock.expect(queue.getPersistenceID()).andReturn(queueID);
+         EasyMock.expect(msg.getMessageID()).andStubReturn(i);        
+         sm.storeAcknowledgeTransactional(txID, queueID, i);
+         EasyMock.replay(msg);
+         ref.incrementDeliveryCount();
+         if (i == numRefs)
+         {
+            break;
+         }
+      }
+      
+      EasyMock.replay(conn, returner, sm, po, qs, rm, ss, pd, executor, consumer, queue);
+      EasyMock.replay(refs.toArray());
+      
+      session.acknowledge(numRefs - 1, true);
+      
+      EasyMock.verify(conn, returner, sm, po, qs, rm, ss, pd, executor, consumer, queue);
+      EasyMock.verify(refs.toArray());
+      
+      assertEquals(0, session.getDeliveries().size());           
+   }
+   
+   private void testAcknowledgeAllUpToAutoCommitAck(final boolean durableMsg, final boolean durableQueue) throws Exception
+   {
+      ServerConnection conn = EasyMock.createStrictMock(ServerConnection.class);      
+      PacketReturner returner = EasyMock.createStrictMock(PacketReturner.class);
+      StorageManager sm = EasyMock.createStrictMock(StorageManager.class);
+      PostOffice po = EasyMock.createStrictMock(PostOffice.class);
+      HierarchicalRepository<QueueSettings> qs = EasyMock.createStrictMock(HierarchicalRepository.class);
+      ResourceManager rm = EasyMock.createStrictMock(ResourceManager.class);
+      SecurityStore ss = EasyMock.createStrictMock(SecurityStore.class);
+      PacketDispatcher pd = EasyMock.createStrictMock(PacketDispatcher.class);
+      Executor executor = EasyMock.createStrictMock(Executor.class);
+      ServerConsumer consumer = EasyMock.createStrictMock(ServerConsumer.class);
+      
+      final long sessionID = 102981029;
+      
+      EasyMock.expect(pd.generateID()).andReturn(sessionID);
+      EasyMock.expect(sm.generateTransactionID()).andReturn(71626L);
+      
+      final int numRefs = 10;
+      
+      List<MessageReference> refs = new ArrayList<MessageReference>();
+      for (int i = 0; i < numRefs; i++)
+      {
+         MessageReference ref = EasyMock.createStrictMock(MessageReference.class);
+         
+         EasyMock.expect(consumer.getClientTargetID()).andReturn(76767L);
+         EasyMock.expect(ref.getMessage()).andReturn(EasyMock.createMock(ServerMessage.class));
+         EasyMock.expect(ref.getDeliveryCount()).andReturn(0);
+         returner.send(EasyMock.isA(ReceiveMessage.class));
+         refs.add(ref);
+      }
+      
+      EasyMock.replay(conn, returner, sm, po, qs, rm, ss, pd, executor, consumer);
+      EasyMock.replay(refs.toArray());
+      
+      ServerSessionImpl session = new ServerSessionImpl(conn, false, true, false,
+            returner, sm, po, qs, rm, ss, pd, executor);
+
+      for (MessageReference ref: refs)
+      {
+         session.handleDelivery(ref, consumer);
+      }
+      
+      EasyMock.verify(conn, returner, sm, po, qs, rm, ss, pd, executor, consumer);
+      EasyMock.verify(refs.toArray());
+      
+      assertEquals(numRefs, session.getDeliveries().size());
+      
+      int i = 0;
+      for (Delivery del: session.getDeliveries())
+      {
+         assertEquals(i++, del.getDeliveryID());
+      }
+      
+      //Now ack half of them
+      
+      EasyMock.reset(conn, returner, sm, po, qs, rm, ss, pd, executor, consumer);
+      EasyMock.reset(refs.toArray());
+      
+      Queue queue = EasyMock.createMock(Queue.class); 
+      for (i = 0; i < numRefs / 2; i++)
+      {
+         MessageReference ref = refs.get(i);
+         ServerMessage msg = EasyMock.createMock(ServerMessage.class);
+                 
+         EasyMock.expect(ref.getMessage()).andStubReturn(msg);
+         EasyMock.expect(ref.getQueue()).andStubReturn(queue);
+         EasyMock.expect(msg.isDurable()).andStubReturn(durableMsg);
+         EasyMock.expect(queue.isDurable()).andStubReturn(durableQueue);
+         if (durableMsg && durableQueue)
+         {
+            EasyMock.expect(msg.decrementDurableRefCount()).andStubReturn(numRefs);
+            final long queueID = 1929012;
+            EasyMock.expect(queue.getPersistenceID()).andReturn(queueID);
+            EasyMock.expect(msg.getMessageID()).andStubReturn(i);        
+            sm.storeAcknowledge(queueID, i);
+         }
+         EasyMock.replay(msg);
+         queue.referenceAcknowledged(ref);
+         if (i == numRefs / 2)
+         {
+            break;
+         }
+      }
+      
+      EasyMock.replay(conn, returner, sm, po, qs, rm, ss, pd, executor, consumer, queue);
+      EasyMock.replay(refs.toArray());
+      
+      session.acknowledge(numRefs / 2 - 1, true);
+      
+      EasyMock.verify(conn, returner, sm, po, qs, rm, ss, pd, executor, consumer, queue);
+      EasyMock.verify(refs.toArray());
+      
+      assertEquals(numRefs / 2, session.getDeliveries().size());
+      
+      i = numRefs / 2;
+      for (Delivery del: session.getDeliveries())
+      {
+         assertEquals(i++, del.getDeliveryID());
+      }
+      
+      //Now ack the rest
+      
+      EasyMock.reset(conn, returner, sm, po, qs, rm, ss, pd, executor, consumer, queue);
+      EasyMock.reset(refs.toArray());
+            
+      for (i = numRefs / 2; i < numRefs; i++)
+      {
+         MessageReference ref = refs.get(i);
+         ServerMessage msg = EasyMock.createMock(ServerMessage.class);
+                 
+         EasyMock.expect(ref.getMessage()).andStubReturn(msg);
+         EasyMock.expect(ref.getQueue()).andStubReturn(queue);
+         EasyMock.expect(msg.isDurable()).andStubReturn(true);
+         EasyMock.expect(queue.isDurable()).andStubReturn(true);
+         EasyMock.expect(msg.decrementDurableRefCount()).andStubReturn(numRefs);
+         final long queueID = 1929012;
+         EasyMock.expect(queue.getPersistenceID()).andReturn(queueID);
+         EasyMock.expect(msg.getMessageID()).andStubReturn(i);        
+         sm.storeAcknowledge(queueID, i);
+         EasyMock.replay(msg);
+         queue.referenceAcknowledged(ref);
+         if (i == numRefs)
+         {
+            break;
+         }
+      }
+      
+      EasyMock.replay(conn, returner, sm, po, qs, rm, ss, pd, executor, consumer, queue);
+      EasyMock.replay(refs.toArray());
+      
+      session.acknowledge(numRefs - 1, true);
+      
+      EasyMock.verify(conn, returner, sm, po, qs, rm, ss, pd, executor, consumer, queue);
+      EasyMock.verify(refs.toArray());
+      
+      assertEquals(0, session.getDeliveries().size());           
+   }
+   
+   private void testAutoCommitSend(final boolean persistent) throws Exception
+   {
+      ServerConnection conn = EasyMock.createStrictMock(ServerConnection.class);      
+      PacketReturner returner = EasyMock.createStrictMock(PacketReturner.class);
+      StorageManager sm = EasyMock.createStrictMock(StorageManager.class);
+      PostOffice po = EasyMock.createStrictMock(PostOffice.class);
+      HierarchicalRepository<QueueSettings> qs = EasyMock.createStrictMock(HierarchicalRepository.class);
+      ResourceManager rm = EasyMock.createStrictMock(ResourceManager.class);
+      SecurityStore ss = EasyMock.createStrictMock(SecurityStore.class);
+      PacketDispatcher pd = EasyMock.createStrictMock(PacketDispatcher.class);
+      Executor executor = EasyMock.createStrictMock(Executor.class);
+      ServerMessage msg = EasyMock.createStrictMock(ServerMessage.class);
+      MessageReference ref1 = EasyMock.createStrictMock(MessageReference.class);
+      MessageReference ref2 = EasyMock.createStrictMock(MessageReference.class);
+      MessageReference ref3 = EasyMock.createStrictMock(MessageReference.class);
+      Queue queue1 = EasyMock.createStrictMock(Queue.class);
+      Queue queue2 = EasyMock.createStrictMock(Queue.class);
+      Queue queue3 = EasyMock.createStrictMock(Queue.class);
+            
+      final long sessionID = 102981029;
+      
+      EasyMock.expect(pd.generateID()).andReturn(sessionID);
+      EasyMock.expect(sm.generateTransactionID()).andReturn(71626L);
+      
+      final SimpleString dest = new SimpleString("blah");
+      EasyMock.expect(msg.getDestination()).andReturn(dest);
+      ss.check(dest, CheckType.WRITE, conn);
+      
+      final long messageID = 81129873;
+      EasyMock.expect(sm.generateMessageID()).andReturn(messageID);
+      msg.setMessageID(messageID);
+      
+      final long connectionID = 12734450;
+      EasyMock.expect(conn.getID()).andReturn(connectionID);
+      msg.setConnectionID(connectionID);
+      
+      List<MessageReference> refs = new ArrayList<MessageReference>();
+      refs.add(ref1);
+      refs.add(ref2);
+      refs.add(ref3);
+      EasyMock.expect(po.route(msg)).andReturn(refs);
+      EasyMock.expect(msg.getDurableRefCount()).andReturn(persistent ? 3 : 0);
+      if (persistent)
+      {
+         sm.storeMessage(msg);         
+      }
+      EasyMock.expect(ref1.getQueue()).andReturn(queue1);
+      EasyMock.expect(ref2.getQueue()).andReturn(queue2);
+      EasyMock.expect(ref3.getQueue()).andReturn(queue3);
+      EasyMock.expect(queue1.addLast(ref1)).andReturn(HandleStatus.HANDLED);
+      EasyMock.expect(queue2.addLast(ref2)).andReturn(HandleStatus.HANDLED);
+      EasyMock.expect(queue3.addLast(ref3)).andReturn(HandleStatus.HANDLED);
+      
+      EasyMock.replay(conn, returner, sm, po, qs, rm, ss, pd, executor, msg, ref1, ref2, ref3, queue1, queue2, queue3);
+                  
+      ServerSessionImpl session = new ServerSessionImpl(conn, true, false, false,
+                                                        returner, sm, po, qs, rm, ss, pd, executor);
+      
+      session.send(msg);
+      
+      EasyMock.verify(conn, returner, sm, po, qs, rm, ss, pd, executor, msg, ref1, ref2, ref3, queue1, queue2, queue3);          
+   }
+   
+   private void testNotAutoCommitSend(final boolean persistent) throws Exception
+   {
+      ServerConnection conn = EasyMock.createStrictMock(ServerConnection.class);      
+      PacketReturner returner = EasyMock.createStrictMock(PacketReturner.class);
+      StorageManager sm = EasyMock.createStrictMock(StorageManager.class);
+      PostOffice po = EasyMock.createStrictMock(PostOffice.class);
+      HierarchicalRepository<QueueSettings> qs = EasyMock.createStrictMock(HierarchicalRepository.class);
+      ResourceManager rm = EasyMock.createStrictMock(ResourceManager.class);
+      SecurityStore ss = EasyMock.createStrictMock(SecurityStore.class);
+      PacketDispatcher pd = EasyMock.createStrictMock(PacketDispatcher.class);
+      Executor executor = EasyMock.createStrictMock(Executor.class);
+      ServerMessage msg = EasyMock.createStrictMock(ServerMessage.class);
+      MessageReference ref1 = EasyMock.createStrictMock(MessageReference.class);
+      MessageReference ref2 = EasyMock.createStrictMock(MessageReference.class);
+      MessageReference ref3 = EasyMock.createStrictMock(MessageReference.class);
+
+      final long sessionID = 102981029;
+      
+      EasyMock.expect(pd.generateID()).andReturn(sessionID);
+      
+      final long transactionID = 27334;
+      EasyMock.expect(sm.generateTransactionID()).andReturn(transactionID);
+      
+      final SimpleString dest = new SimpleString("blah");
+      EasyMock.expect(msg.getDestination()).andReturn(dest);
+      ss.check(dest, CheckType.WRITE, conn);
+      
+      final long messageID = 81129873;
+      EasyMock.expect(sm.generateMessageID()).andReturn(messageID);
+      msg.setMessageID(messageID);
+      
+      final long connectionID = 12734450;
+      EasyMock.expect(conn.getID()).andReturn(connectionID);
+      msg.setConnectionID(connectionID);
+      
+      List<MessageReference> refs = new ArrayList<MessageReference>();
+      refs.add(ref1);
+      refs.add(ref2);
+      refs.add(ref3);
+      EasyMock.expect(po.route(msg)).andReturn(refs);
+      EasyMock.expect(msg.getDurableRefCount()).andReturn(persistent ? 3 : 0);
+      if (persistent)
+      {
+         sm.storeMessageTransactional(transactionID, msg);         
+      }
+
+      EasyMock.replay(conn, returner, sm, po, qs, rm, ss, pd, executor, msg, ref1, ref2, ref3);
+                  
+      ServerSessionImpl session = new ServerSessionImpl(conn, false, false, false,
+                                                        returner, sm, po, qs, rm, ss, pd, executor);
+      
+      session.send(msg);
+      
+      EasyMock.verify(conn, returner, sm, po, qs, rm, ss, pd, executor, msg, ref1, ref2, ref3);            
+   }
+   
+   
+   private void testConstructor(final boolean xa) throws Exception
+   {     
+      ServerConnection conn = EasyMock.createStrictMock(ServerConnection.class);      
+      PacketReturner returner = EasyMock.createStrictMock(PacketReturner.class);
+      StorageManager sm = EasyMock.createStrictMock(StorageManager.class);
+      PostOffice po = EasyMock.createStrictMock(PostOffice.class);
+      HierarchicalRepository<QueueSettings> qs = EasyMock.createStrictMock(HierarchicalRepository.class);
+      ResourceManager rm = EasyMock.createStrictMock(ResourceManager.class);
+      SecurityStore ss = EasyMock.createStrictMock(SecurityStore.class);
+      PacketDispatcher pd = EasyMock.createStrictMock(PacketDispatcher.class);
+      Executor executor = EasyMock.createStrictMock(Executor.class);
+            
+      final long id = 102981029;
+      
+      EasyMock.expect(pd.generateID()).andReturn(id);
+      
+      if (!xa)
+      {        
+         EasyMock.expect(sm.generateTransactionID()).andReturn(71626L);
+      }
+      
+      EasyMock.replay(conn, returner, sm, po, qs, rm, ss, pd, executor);
+      
+      ServerSessionImpl session = new ServerSessionImpl(conn, false, false, xa,
+                                                        returner, sm, po, qs, rm, ss, pd, executor);
+      
+      EasyMock.verify(conn, returner, sm, po, qs, rm, ss, pd, executor);
+      
+      assertEquals(id, session.getID());
+   }
+}




More information about the jboss-cvs-commits mailing list