[jboss-cvs] JBoss Messaging SVN: r4637 - in trunk/tests/src/org/jboss/messaging/tests/unit/jms/bridge/impl: timing and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Jul 7 04:12:53 EDT 2008


Author: jmesnil
Date: 2008-07-07 04:12:53 -0400 (Mon, 07 Jul 2008)
New Revision: 4637

Modified:
   trunk/tests/src/org/jboss/messaging/tests/unit/jms/bridge/impl/BridgeImplTest.java
   trunk/tests/src/org/jboss/messaging/tests/unit/jms/bridge/impl/timing/BridgeImplTest.java
Log:
moved tests to timing.BridgeImplTest

Modified: trunk/tests/src/org/jboss/messaging/tests/unit/jms/bridge/impl/BridgeImplTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/jms/bridge/impl/BridgeImplTest.java	2008-07-07 08:07:49 UTC (rev 4636)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/jms/bridge/impl/BridgeImplTest.java	2008-07-07 08:12:53 UTC (rev 4637)
@@ -517,143 +517,6 @@
       verify(tm);
    }
 
-   public void testStartWithRepeatedFailure() throws Exception
-   {
-      ConnectionFactoryFactory sourceCFF = createStrictMock(ConnectionFactoryFactory.class);
-      ConnectionFactory sourceCF = createStrictMock(ConnectionFactory.class);
-      Connection sourceConn = createStrictMock(Connection.class);
-      Session sourceSession = createStrictMock(Session.class);
-      MessageConsumer sourceConsumer = createStrictMock(MessageConsumer.class);
-      DestinationFactory sourceDF = createStrictMock(DestinationFactory.class);
-      Destination sourceDest = createStrictMock(Destination.class);
-      ConnectionFactoryFactory targetCFF = createStrictMock(ConnectionFactoryFactory.class);
-      ConnectionFactory targetCF = createStrictMock(ConnectionFactory.class);
-      Connection targetConn = createStrictMock(Connection.class);
-      Session targetSession = createStrictMock(Session.class);
-      MessageProducer targetProducer = createStrictMock(MessageProducer.class);
-      DestinationFactory targetDF = createStrictMock(DestinationFactory.class);
-      Destination targetDest = createStrictMock(Destination.class);
-      TransactionManager tm = createStrictMock(TransactionManager.class);
-
-      expect(tm.suspend()).andReturn(null);
-      expect(sourceDF.createDestination()).andStubReturn(sourceDest);
-      expect(targetDF.createDestination()).andStubReturn(targetDest);
-      expect(sourceCFF.createConnectionFactory()).andStubReturn(sourceCF);
-      // the source connection can not be created
-      expect(sourceCF.createConnection()).andStubThrow(
-            new JMSException("unable to create a conn"));
-
-      replay(sourceCFF, sourceCF, sourceConn, sourceSession, sourceConsumer,
-            sourceDF, sourceDest);
-      replay(targetCFF, targetCF, targetConn, targetSession, targetProducer,
-            targetDF, targetDest);
-      replay(tm);
-
-      BridgeImpl bridge = new BridgeImpl();
-
-      bridge.setSourceConnectionFactoryFactory(sourceCFF);
-      bridge.setSourceDestinationFactory(sourceDF);
-      bridge.setTargetConnectionFactoryFactory(targetCFF);
-      bridge.setTargetDestinationFactory(targetDF);
-      // retry after 10 ms
-      bridge.setFailureRetryInterval(10);
-      // retry only once
-      bridge.setMaxRetries(1);
-      bridge.setMaxBatchSize(1);
-      bridge.setMaxBatchTime(-1);
-      bridge.setTransactionManager(tm);
-      bridge.setQualityOfServiceMode(QualityOfServiceMode.AT_MOST_ONCE);
-
-      assertFalse(bridge.isStarted());
-      bridge.start();
-
-      Thread.sleep(50);
-      assertFalse(bridge.isStarted());
-      assertTrue(bridge.isFailed());
-
-      verify(sourceCFF, sourceCF, sourceConn, sourceSession, sourceConsumer,
-            sourceDF, sourceDest);
-      verify(targetCFF, targetCF, targetConn, targetSession, targetProducer,
-            targetDF, targetDest);
-      verify(tm);
-   }
-
-   public void testStartWithFailureThenSuccess() throws Exception
-   {
-      ConnectionFactoryFactory sourceCFF = createStrictMock(ConnectionFactoryFactory.class);
-      ConnectionFactory sourceCF = createStrictMock(ConnectionFactory.class);
-      Connection sourceConn = createStrictMock(Connection.class);
-      Session sourceSession = createStrictMock(Session.class);
-      MessageConsumer sourceConsumer = createStrictMock(MessageConsumer.class);
-      DestinationFactory sourceDF = createStrictMock(DestinationFactory.class);
-      Destination sourceDest = createStrictMock(Destination.class);
-      ConnectionFactoryFactory targetCFF = createStrictMock(ConnectionFactoryFactory.class);
-      ConnectionFactory targetCF = createStrictMock(ConnectionFactory.class);
-      Connection targetConn = createStrictMock(Connection.class);
-      Session targetSession = createStrictMock(Session.class);
-      MessageProducer targetProducer = createStrictMock(MessageProducer.class);
-      DestinationFactory targetDF = createStrictMock(DestinationFactory.class);
-      Destination targetDest = createStrictMock(Destination.class);
-      TransactionManager tm = createStrictMock(TransactionManager.class);
-
-      expect(tm.suspend()).andReturn(null);
-      expect(sourceDF.createDestination()).andStubReturn(sourceDest);
-      expect(targetDF.createDestination()).andStubReturn(targetDest);
-      expect(sourceCFF.createConnectionFactory()).andStubReturn(sourceCF);
-      // the source connection can not be created the 1st time...
-      expect(sourceCF.createConnection()).andThrow(
-            new JMSException("unable to create a conn"));
-      // ... and it succeeds the 2nd time
-      expect(sourceCF.createConnection()).andReturn(sourceConn);
-      sourceConn.setExceptionListener(isA(ExceptionListener.class));
-      expect(sourceConn.createSession(anyBoolean(), anyInt())).andReturn(
-            sourceSession);
-      expect(sourceSession.createConsumer(sourceDest))
-            .andReturn(sourceConsumer);
-      sourceConsumer.setMessageListener(isA(MessageListener.class));
-      expect(targetCFF.createConnectionFactory()).andReturn(targetCF);
-      expect(targetCF.createConnection()).andReturn(targetConn);
-      targetConn.setExceptionListener(isA(ExceptionListener.class));
-      expect(targetConn.createSession(anyBoolean(), anyInt())).andReturn(
-            targetSession);
-      expect(targetSession.createProducer(null)).andReturn(targetProducer);
-      sourceConn.start();
-
-      replay(sourceCFF, sourceCF, sourceConn, sourceSession, sourceConsumer,
-            sourceDF, sourceDest);
-      replay(targetCFF, targetCF, targetConn, targetSession, targetProducer,
-            targetDF, targetDest);
-      replay(tm);
-
-      BridgeImpl bridge = new BridgeImpl();
-
-      bridge.setSourceConnectionFactoryFactory(sourceCFF);
-      bridge.setSourceDestinationFactory(sourceDF);
-      bridge.setTargetConnectionFactoryFactory(targetCFF);
-      bridge.setTargetDestinationFactory(targetDF);
-      // retry after 10 ms
-      bridge.setFailureRetryInterval(10);
-      // retry only once
-      bridge.setMaxRetries(1);
-      bridge.setMaxBatchSize(1);
-      bridge.setMaxBatchTime(-1);
-      bridge.setTransactionManager(tm);
-      bridge.setQualityOfServiceMode(QualityOfServiceMode.AT_MOST_ONCE);
-
-      assertFalse(bridge.isStarted());
-      bridge.start();
-
-      Thread.sleep(50);
-      assertTrue(bridge.isStarted());
-      assertFalse(bridge.isFailed());
-
-      verify(sourceCFF, sourceCF, sourceConn, sourceSession, sourceConsumer,
-            sourceDF, sourceDest);
-      verify(targetCFF, targetCF, targetConn, targetSession, targetProducer,
-            targetDF, targetDest);
-      verify(tm);
-   }
-
    public void testStop() throws Exception
    {
       ConnectionFactoryFactory sourceCFF = createStrictMock(ConnectionFactoryFactory.class);
@@ -875,200 +738,7 @@
       // with batch size of 2, receive 1 messages and do not send any
       doSendMessagesByBatchInXA(2, 1, 0, 0);
    }
-   
-   public void testExceptionOnSourceAndRetrySucceeds() throws Exception
-   {
-      ConnectionFactoryFactory sourceCFF = createStrictMock(ConnectionFactoryFactory.class);
-      ConnectionFactory sourceCF = createStrictMock(ConnectionFactory.class);
-      Connection sourceConn = createStrictMock(Connection.class);
-      Session sourceSession = createStrictMock(Session.class);
-      MessageConsumer sourceConsumer = createStrictMock(MessageConsumer.class);
-      DestinationFactory sourceDF = createStrictMock(DestinationFactory.class);
-      Destination sourceDest = createStrictMock(Destination.class);
-      ConnectionFactoryFactory targetCFF = createStrictMock(ConnectionFactoryFactory.class);
-      ConnectionFactory targetCF = createStrictMock(ConnectionFactory.class);
-      Connection targetConn = createStrictMock(Connection.class);
-      Session targetSession = createStrictMock(Session.class);
-      MessageProducer targetProducer = createStrictMock(MessageProducer.class);
-      DestinationFactory targetDF = createStrictMock(DestinationFactory.class);
-      Destination targetDest = createStrictMock(Destination.class);
-      TransactionManager tm = createStrictMock(TransactionManager.class);
-      Message message = createNiceMock(Message.class);
-
-      expect(tm.suspend()).andReturn(null);
-      expect(sourceDF.createDestination()).andReturn(sourceDest);
-      expect(targetDF.createDestination()).andReturn(targetDest);
-      expect(sourceCFF.createConnectionFactory()).andReturn(sourceCF);
-      expect(sourceCF.createConnection()).andReturn(sourceConn);
-      SetExceptionListenerAnswer exceptionListenerAnswer = new SetExceptionListenerAnswer();
-      sourceConn.setExceptionListener(isA(ExceptionListener.class));
-      expectLastCall().andAnswer(exceptionListenerAnswer);
-      expect(sourceConn.createSession(anyBoolean(), anyInt())).andReturn(
-            sourceSession);
-      expect(sourceSession.createConsumer(sourceDest))
-            .andReturn(sourceConsumer);
-      sourceConsumer.setMessageListener(isA(MessageListener.class));
-      expect(targetCFF.createConnectionFactory()).andReturn(targetCF);
-      expect(targetCF.createConnection()).andReturn(targetConn);
-      targetConn.setExceptionListener(isA(ExceptionListener.class));
-      expect(targetConn.createSession(anyBoolean(), anyInt())).andReturn(
-            targetSession);
-      expect(targetSession.createProducer(null)).andReturn(targetProducer);
-      sourceConn.start();
-
-      //after failure detection, we retry to start the bridge:
-      expect(sourceDF.createDestination()).andReturn(sourceDest);
-      expect(targetDF.createDestination()).andReturn(targetDest);
-      expect(sourceCFF.createConnectionFactory()).andReturn(sourceCF);
-      expect(sourceCF.createConnection()).andReturn(sourceConn);
-      sourceConn.setExceptionListener(isA(ExceptionListener.class));
-      expectLastCall().andAnswer(exceptionListenerAnswer);
-      expect(sourceConn.createSession(anyBoolean(), anyInt())).andReturn(
-            sourceSession);
-      expect(sourceSession.createConsumer(sourceDest))
-            .andReturn(sourceConsumer);
-      sourceConsumer.setMessageListener(isA(MessageListener.class));
-      expect(targetCFF.createConnectionFactory()).andReturn(targetCF);
-      expect(targetCF.createConnection()).andReturn(targetConn);
-      targetConn.setExceptionListener(isA(ExceptionListener.class));
-      expect(targetConn.createSession(anyBoolean(), anyInt())).andReturn(
-            targetSession);
-      expect(targetSession.createProducer(null)).andReturn(targetProducer);
-      sourceConn.start();
       
-      
-      replay(sourceCFF, sourceCF, sourceConn, sourceSession, sourceConsumer,
-            sourceDF, sourceDest);
-      replay(targetCFF, targetCF, targetConn, targetSession, targetProducer,
-            targetDF, targetDest);
-      replay(tm);
-      replay(message);
-
-      BridgeImpl bridge = new BridgeImpl();
-      assertNotNull(bridge);
-
-      bridge.setSourceConnectionFactoryFactory(sourceCFF);
-      bridge.setSourceDestinationFactory(sourceDF);
-      bridge.setTargetConnectionFactoryFactory(targetCFF);
-      bridge.setTargetDestinationFactory(targetDF);
-      bridge.setFailureRetryInterval(10);
-      bridge.setMaxRetries(2);
-      bridge.setMaxBatchSize(1);
-      bridge.setMaxBatchTime(-1);
-      bridge.setTransactionManager(tm);
-      bridge.setQualityOfServiceMode(QualityOfServiceMode.AT_MOST_ONCE);
-
-      assertFalse(bridge.isStarted());
-      bridge.start();
-      assertTrue(bridge.isStarted());
-      
-      exceptionListenerAnswer.listener.onException(new JMSException("exception on the source"));
-      Thread.sleep(4 * bridge.getFailureRetryInterval());
-      // reconnection must have succeded
-      assertTrue(bridge.isStarted());
-      
-      verify(sourceCFF, sourceCF, sourceConn, sourceSession, sourceConsumer,
-            sourceDF, sourceDest);
-      verify(targetCFF, targetCF, targetConn, targetSession, targetProducer,
-            targetDF, targetDest);
-      verify(tm);
-      verify(message);
-   }
-
-   public void testExceptionOnSourceAndRetryFails() throws Exception
-   {
-      ConnectionFactoryFactory sourceCFF = createStrictMock(ConnectionFactoryFactory.class);
-      ConnectionFactory sourceCF = createStrictMock(ConnectionFactory.class);
-      Connection sourceConn = createStrictMock(Connection.class);
-      Session sourceSession = createStrictMock(Session.class);
-      MessageConsumer sourceConsumer = createStrictMock(MessageConsumer.class);
-      DestinationFactory sourceDF = createStrictMock(DestinationFactory.class);
-      Destination sourceDest = createStrictMock(Destination.class);
-      ConnectionFactoryFactory targetCFF = createStrictMock(ConnectionFactoryFactory.class);
-      ConnectionFactory targetCF = createStrictMock(ConnectionFactory.class);
-      Connection targetConn = createStrictMock(Connection.class);
-      Session targetSession = createStrictMock(Session.class);
-      MessageProducer targetProducer = createStrictMock(MessageProducer.class);
-      DestinationFactory targetDF = createStrictMock(DestinationFactory.class);
-      Destination targetDest = createStrictMock(Destination.class);
-      TransactionManager tm = createStrictMock(TransactionManager.class);
-      Message message = createNiceMock(Message.class);
-
-      expect(tm.suspend()).andReturn(null);
-      expect(sourceDF.createDestination()).andReturn(sourceDest);
-      expect(targetDF.createDestination()).andReturn(targetDest);
-      expect(sourceCFF.createConnectionFactory()).andReturn(sourceCF);
-      expect(sourceCF.createConnection()).andReturn(sourceConn);
-      SetExceptionListenerAnswer exceptionListenerAnswer = new SetExceptionListenerAnswer();
-      sourceConn.setExceptionListener(isA(ExceptionListener.class));
-      expectLastCall().andAnswer(exceptionListenerAnswer);
-      expect(sourceConn.createSession(anyBoolean(), anyInt())).andReturn(
-            sourceSession);
-      expect(sourceSession.createConsumer(sourceDest))
-            .andReturn(sourceConsumer);
-      sourceConsumer.setMessageListener(isA(MessageListener.class));
-      expect(targetCFF.createConnectionFactory()).andReturn(targetCF);
-      expect(targetCF.createConnection()).andReturn(targetConn);
-      targetConn.setExceptionListener(isA(ExceptionListener.class));
-      expect(targetConn.createSession(anyBoolean(), anyInt())).andReturn(
-            targetSession);
-      expect(targetSession.createProducer(null)).andReturn(targetProducer);
-      sourceConn.start();
-
-      //after failure detection, we clean up...
-      // and it is stopped
-      sourceConn.close();
-      targetConn.close();
-      // ...retry to start the bridge but it fails...
-      expect(sourceDF.createDestination()).andReturn(sourceDest);
-      expect(targetDF.createDestination()).andReturn(targetDest);
-      expect(sourceCFF.createConnectionFactory()).andReturn(sourceCF);
-      expect(sourceCF.createConnection()).andThrow(new JMSException("exception while retrying to connect"));
-      // ... so we clean up again...
-      sourceConn.close();
-      targetConn.close();
-      // ... and finally stop the bridge
-      sourceConn.close();
-      targetConn.close();
-      
-      replay(sourceCFF, sourceCF, sourceConn, sourceSession, sourceConsumer,
-            sourceDF, sourceDest);
-      replay(targetCFF, targetCF, targetConn, targetSession, targetProducer,
-            targetDF, targetDest);
-      replay(tm);
-      replay(message);
-
-      BridgeImpl bridge = new BridgeImpl();
-      assertNotNull(bridge);
-
-      bridge.setSourceConnectionFactoryFactory(sourceCFF);
-      bridge.setSourceDestinationFactory(sourceDF);
-      bridge.setTargetConnectionFactoryFactory(targetCFF);
-      bridge.setTargetDestinationFactory(targetDF);
-      bridge.setFailureRetryInterval(10);
-      bridge.setMaxRetries(1);
-      bridge.setMaxBatchSize(1);
-      bridge.setMaxBatchTime(-1);
-      bridge.setTransactionManager(tm);
-      bridge.setQualityOfServiceMode(QualityOfServiceMode.AT_MOST_ONCE);
-
-      assertFalse(bridge.isStarted());
-      bridge.start();
-      assertTrue(bridge.isStarted());
-      
-      exceptionListenerAnswer.listener.onException(new JMSException("exception on the source"));
-      Thread.sleep(4 * bridge.getFailureRetryInterval());
-      // reconnection must have failed
-      assertFalse(bridge.isStarted());
-      
-      verify(sourceCFF, sourceCF, sourceConn, sourceSession, sourceConsumer,
-            sourceDF, sourceDest);
-      verify(targetCFF, targetCF, targetConn, targetSession, targetProducer,
-            targetDF, targetDest);
-      verify(tm);
-      verify(message);
-   }
-   
    public void testAddMessageIDInHeader() throws Exception
    {
       String messageID = randomString();
@@ -1470,18 +1140,7 @@
          return null;
       }
    }
-   
-   class SetExceptionListenerAnswer implements IAnswer
-   {
-      ExceptionListener listener = null;
 
-      public Object answer() throws Throwable
-      {
-         listener = (ExceptionListener) getCurrentArguments()[0];
-         return null;
-      }
-   }
-   
    /*
     * A stub which implements both XAConnectionFactory & ConnectionFactory
     */

Modified: trunk/tests/src/org/jboss/messaging/tests/unit/jms/bridge/impl/timing/BridgeImplTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/unit/jms/bridge/impl/timing/BridgeImplTest.java	2008-07-07 08:07:49 UTC (rev 4636)
+++ trunk/tests/src/org/jboss/messaging/tests/unit/jms/bridge/impl/timing/BridgeImplTest.java	2008-07-07 08:12:53 UTC (rev 4637)
@@ -37,6 +37,7 @@
 import javax.jms.ConnectionFactory;
 import javax.jms.Destination;
 import javax.jms.ExceptionListener;
+import javax.jms.JMSException;
 import javax.jms.Message;
 import javax.jms.MessageConsumer;
 import javax.jms.MessageListener;
@@ -70,6 +71,143 @@
 
    // Public --------------------------------------------------------
 
+   public void testStartWithRepeatedFailure() throws Exception
+   {
+      ConnectionFactoryFactory sourceCFF = createStrictMock(ConnectionFactoryFactory.class);
+      ConnectionFactory sourceCF = createStrictMock(ConnectionFactory.class);
+      Connection sourceConn = createStrictMock(Connection.class);
+      Session sourceSession = createStrictMock(Session.class);
+      MessageConsumer sourceConsumer = createStrictMock(MessageConsumer.class);
+      DestinationFactory sourceDF = createStrictMock(DestinationFactory.class);
+      Destination sourceDest = createStrictMock(Destination.class);
+      ConnectionFactoryFactory targetCFF = createStrictMock(ConnectionFactoryFactory.class);
+      ConnectionFactory targetCF = createStrictMock(ConnectionFactory.class);
+      Connection targetConn = createStrictMock(Connection.class);
+      Session targetSession = createStrictMock(Session.class);
+      MessageProducer targetProducer = createStrictMock(MessageProducer.class);
+      DestinationFactory targetDF = createStrictMock(DestinationFactory.class);
+      Destination targetDest = createStrictMock(Destination.class);
+      TransactionManager tm = createStrictMock(TransactionManager.class);
+
+      expect(tm.suspend()).andReturn(null);
+      expect(sourceDF.createDestination()).andStubReturn(sourceDest);
+      expect(targetDF.createDestination()).andStubReturn(targetDest);
+      expect(sourceCFF.createConnectionFactory()).andStubReturn(sourceCF);
+      // the source connection can not be created
+      expect(sourceCF.createConnection()).andStubThrow(
+            new JMSException("unable to create a conn"));
+
+      replay(sourceCFF, sourceCF, sourceConn, sourceSession, sourceConsumer,
+            sourceDF, sourceDest);
+      replay(targetCFF, targetCF, targetConn, targetSession, targetProducer,
+            targetDF, targetDest);
+      replay(tm);
+
+      BridgeImpl bridge = new BridgeImpl();
+
+      bridge.setSourceConnectionFactoryFactory(sourceCFF);
+      bridge.setSourceDestinationFactory(sourceDF);
+      bridge.setTargetConnectionFactoryFactory(targetCFF);
+      bridge.setTargetDestinationFactory(targetDF);
+      // retry after 10 ms
+      bridge.setFailureRetryInterval(10);
+      // retry only once
+      bridge.setMaxRetries(1);
+      bridge.setMaxBatchSize(1);
+      bridge.setMaxBatchTime(-1);
+      bridge.setTransactionManager(tm);
+      bridge.setQualityOfServiceMode(QualityOfServiceMode.AT_MOST_ONCE);
+
+      assertFalse(bridge.isStarted());
+      bridge.start();
+
+      Thread.sleep(50);
+      assertFalse(bridge.isStarted());
+      assertTrue(bridge.isFailed());
+
+      verify(sourceCFF, sourceCF, sourceConn, sourceSession, sourceConsumer,
+            sourceDF, sourceDest);
+      verify(targetCFF, targetCF, targetConn, targetSession, targetProducer,
+            targetDF, targetDest);
+      verify(tm);
+   }
+
+   public void testStartWithFailureThenSuccess() throws Exception
+   {
+      ConnectionFactoryFactory sourceCFF = createStrictMock(ConnectionFactoryFactory.class);
+      ConnectionFactory sourceCF = createStrictMock(ConnectionFactory.class);
+      Connection sourceConn = createStrictMock(Connection.class);
+      Session sourceSession = createStrictMock(Session.class);
+      MessageConsumer sourceConsumer = createStrictMock(MessageConsumer.class);
+      DestinationFactory sourceDF = createStrictMock(DestinationFactory.class);
+      Destination sourceDest = createStrictMock(Destination.class);
+      ConnectionFactoryFactory targetCFF = createStrictMock(ConnectionFactoryFactory.class);
+      ConnectionFactory targetCF = createStrictMock(ConnectionFactory.class);
+      Connection targetConn = createStrictMock(Connection.class);
+      Session targetSession = createStrictMock(Session.class);
+      MessageProducer targetProducer = createStrictMock(MessageProducer.class);
+      DestinationFactory targetDF = createStrictMock(DestinationFactory.class);
+      Destination targetDest = createStrictMock(Destination.class);
+      TransactionManager tm = createStrictMock(TransactionManager.class);
+
+      expect(tm.suspend()).andReturn(null);
+      expect(sourceDF.createDestination()).andStubReturn(sourceDest);
+      expect(targetDF.createDestination()).andStubReturn(targetDest);
+      expect(sourceCFF.createConnectionFactory()).andStubReturn(sourceCF);
+      // the source connection can not be created the 1st time...
+      expect(sourceCF.createConnection()).andThrow(
+            new JMSException("unable to create a conn"));
+      // ... and it succeeds the 2nd time
+      expect(sourceCF.createConnection()).andReturn(sourceConn);
+      sourceConn.setExceptionListener(isA(ExceptionListener.class));
+      expect(sourceConn.createSession(anyBoolean(), anyInt())).andReturn(
+            sourceSession);
+      expect(sourceSession.createConsumer(sourceDest))
+            .andReturn(sourceConsumer);
+      sourceConsumer.setMessageListener(isA(MessageListener.class));
+      expect(targetCFF.createConnectionFactory()).andReturn(targetCF);
+      expect(targetCF.createConnection()).andReturn(targetConn);
+      targetConn.setExceptionListener(isA(ExceptionListener.class));
+      expect(targetConn.createSession(anyBoolean(), anyInt())).andReturn(
+            targetSession);
+      expect(targetSession.createProducer(null)).andReturn(targetProducer);
+      sourceConn.start();
+
+      replay(sourceCFF, sourceCF, sourceConn, sourceSession, sourceConsumer,
+            sourceDF, sourceDest);
+      replay(targetCFF, targetCF, targetConn, targetSession, targetProducer,
+            targetDF, targetDest);
+      replay(tm);
+
+      BridgeImpl bridge = new BridgeImpl();
+
+      bridge.setSourceConnectionFactoryFactory(sourceCFF);
+      bridge.setSourceDestinationFactory(sourceDF);
+      bridge.setTargetConnectionFactoryFactory(targetCFF);
+      bridge.setTargetDestinationFactory(targetDF);
+      // retry after 10 ms
+      bridge.setFailureRetryInterval(10);
+      // retry only once
+      bridge.setMaxRetries(1);
+      bridge.setMaxBatchSize(1);
+      bridge.setMaxBatchTime(-1);
+      bridge.setTransactionManager(tm);
+      bridge.setQualityOfServiceMode(QualityOfServiceMode.AT_MOST_ONCE);
+
+      assertFalse(bridge.isStarted());
+      bridge.start();
+
+      Thread.sleep(50);
+      assertTrue(bridge.isStarted());
+      assertFalse(bridge.isFailed());
+
+      verify(sourceCFF, sourceCF, sourceConn, sourceSession, sourceConsumer,
+            sourceDF, sourceDest);
+      verify(targetCFF, targetCF, targetConn, targetSession, targetProducer,
+            targetDF, targetDest);
+      verify(tm);
+   }
+
    /*
     * we receive only 1 message. The message is sent when the maxBatchTime
     * expires even if the maxBatchSize is not reached
@@ -157,6 +295,199 @@
       verify(message);
    }
 
+   public void testExceptionOnSourceAndRetrySucceeds() throws Exception
+   {
+      ConnectionFactoryFactory sourceCFF = createStrictMock(ConnectionFactoryFactory.class);
+      ConnectionFactory sourceCF = createStrictMock(ConnectionFactory.class);
+      Connection sourceConn = createStrictMock(Connection.class);
+      Session sourceSession = createStrictMock(Session.class);
+      MessageConsumer sourceConsumer = createStrictMock(MessageConsumer.class);
+      DestinationFactory sourceDF = createStrictMock(DestinationFactory.class);
+      Destination sourceDest = createStrictMock(Destination.class);
+      ConnectionFactoryFactory targetCFF = createStrictMock(ConnectionFactoryFactory.class);
+      ConnectionFactory targetCF = createStrictMock(ConnectionFactory.class);
+      Connection targetConn = createStrictMock(Connection.class);
+      Session targetSession = createStrictMock(Session.class);
+      MessageProducer targetProducer = createStrictMock(MessageProducer.class);
+      DestinationFactory targetDF = createStrictMock(DestinationFactory.class);
+      Destination targetDest = createStrictMock(Destination.class);
+      TransactionManager tm = createStrictMock(TransactionManager.class);
+      Message message = createNiceMock(Message.class);
+
+      expect(tm.suspend()).andReturn(null);
+      expect(sourceDF.createDestination()).andReturn(sourceDest);
+      expect(targetDF.createDestination()).andReturn(targetDest);
+      expect(sourceCFF.createConnectionFactory()).andReturn(sourceCF);
+      expect(sourceCF.createConnection()).andReturn(sourceConn);
+      SetExceptionListenerAnswer exceptionListenerAnswer = new SetExceptionListenerAnswer();
+      sourceConn.setExceptionListener(isA(ExceptionListener.class));
+      expectLastCall().andAnswer(exceptionListenerAnswer);
+      expect(sourceConn.createSession(anyBoolean(), anyInt())).andReturn(
+            sourceSession);
+      expect(sourceSession.createConsumer(sourceDest))
+            .andReturn(sourceConsumer);
+      sourceConsumer.setMessageListener(isA(MessageListener.class));
+      expect(targetCFF.createConnectionFactory()).andReturn(targetCF);
+      expect(targetCF.createConnection()).andReturn(targetConn);
+      targetConn.setExceptionListener(isA(ExceptionListener.class));
+      expect(targetConn.createSession(anyBoolean(), anyInt())).andReturn(
+            targetSession);
+      expect(targetSession.createProducer(null)).andReturn(targetProducer);
+      sourceConn.start();
+
+      //after failure detection, we retry to start the bridge:
+      expect(sourceDF.createDestination()).andReturn(sourceDest);
+      expect(targetDF.createDestination()).andReturn(targetDest);
+      expect(sourceCFF.createConnectionFactory()).andReturn(sourceCF);
+      expect(sourceCF.createConnection()).andReturn(sourceConn);
+      sourceConn.setExceptionListener(isA(ExceptionListener.class));
+      expectLastCall().andAnswer(exceptionListenerAnswer);
+      expect(sourceConn.createSession(anyBoolean(), anyInt())).andReturn(
+            sourceSession);
+      expect(sourceSession.createConsumer(sourceDest))
+            .andReturn(sourceConsumer);
+      sourceConsumer.setMessageListener(isA(MessageListener.class));
+      expect(targetCFF.createConnectionFactory()).andReturn(targetCF);
+      expect(targetCF.createConnection()).andReturn(targetConn);
+      targetConn.setExceptionListener(isA(ExceptionListener.class));
+      expect(targetConn.createSession(anyBoolean(), anyInt())).andReturn(
+            targetSession);
+      expect(targetSession.createProducer(null)).andReturn(targetProducer);
+      sourceConn.start();
+      
+      
+      replay(sourceCFF, sourceCF, sourceConn, sourceSession, sourceConsumer,
+            sourceDF, sourceDest);
+      replay(targetCFF, targetCF, targetConn, targetSession, targetProducer,
+            targetDF, targetDest);
+      replay(tm);
+      replay(message);
+
+      BridgeImpl bridge = new BridgeImpl();
+      assertNotNull(bridge);
+
+      bridge.setSourceConnectionFactoryFactory(sourceCFF);
+      bridge.setSourceDestinationFactory(sourceDF);
+      bridge.setTargetConnectionFactoryFactory(targetCFF);
+      bridge.setTargetDestinationFactory(targetDF);
+      bridge.setFailureRetryInterval(10);
+      bridge.setMaxRetries(2);
+      bridge.setMaxBatchSize(1);
+      bridge.setMaxBatchTime(-1);
+      bridge.setTransactionManager(tm);
+      bridge.setQualityOfServiceMode(QualityOfServiceMode.AT_MOST_ONCE);
+
+      assertFalse(bridge.isStarted());
+      bridge.start();
+      assertTrue(bridge.isStarted());
+      
+      exceptionListenerAnswer.listener.onException(new JMSException("exception on the source"));
+      Thread.sleep(4 * bridge.getFailureRetryInterval());
+      // reconnection must have succeded
+      assertTrue(bridge.isStarted());
+      
+      verify(sourceCFF, sourceCF, sourceConn, sourceSession, sourceConsumer,
+            sourceDF, sourceDest);
+      verify(targetCFF, targetCF, targetConn, targetSession, targetProducer,
+            targetDF, targetDest);
+      verify(tm);
+      verify(message);
+   }
+   
+   public void testExceptionOnSourceAndRetryFails() throws Exception
+   {
+      ConnectionFactoryFactory sourceCFF = createStrictMock(ConnectionFactoryFactory.class);
+      ConnectionFactory sourceCF = createStrictMock(ConnectionFactory.class);
+      Connection sourceConn = createStrictMock(Connection.class);
+      Session sourceSession = createStrictMock(Session.class);
+      MessageConsumer sourceConsumer = createStrictMock(MessageConsumer.class);
+      DestinationFactory sourceDF = createStrictMock(DestinationFactory.class);
+      Destination sourceDest = createStrictMock(Destination.class);
+      ConnectionFactoryFactory targetCFF = createStrictMock(ConnectionFactoryFactory.class);
+      ConnectionFactory targetCF = createStrictMock(ConnectionFactory.class);
+      Connection targetConn = createStrictMock(Connection.class);
+      Session targetSession = createStrictMock(Session.class);
+      MessageProducer targetProducer = createStrictMock(MessageProducer.class);
+      DestinationFactory targetDF = createStrictMock(DestinationFactory.class);
+      Destination targetDest = createStrictMock(Destination.class);
+      TransactionManager tm = createStrictMock(TransactionManager.class);
+      Message message = createNiceMock(Message.class);
+
+      expect(tm.suspend()).andReturn(null);
+      expect(sourceDF.createDestination()).andReturn(sourceDest);
+      expect(targetDF.createDestination()).andReturn(targetDest);
+      expect(sourceCFF.createConnectionFactory()).andReturn(sourceCF);
+      expect(sourceCF.createConnection()).andReturn(sourceConn);
+      SetExceptionListenerAnswer exceptionListenerAnswer = new SetExceptionListenerAnswer();
+      sourceConn.setExceptionListener(isA(ExceptionListener.class));
+      expectLastCall().andAnswer(exceptionListenerAnswer);
+      expect(sourceConn.createSession(anyBoolean(), anyInt())).andReturn(
+            sourceSession);
+      expect(sourceSession.createConsumer(sourceDest))
+            .andReturn(sourceConsumer);
+      sourceConsumer.setMessageListener(isA(MessageListener.class));
+      expect(targetCFF.createConnectionFactory()).andReturn(targetCF);
+      expect(targetCF.createConnection()).andReturn(targetConn);
+      targetConn.setExceptionListener(isA(ExceptionListener.class));
+      expect(targetConn.createSession(anyBoolean(), anyInt())).andReturn(
+            targetSession);
+      expect(targetSession.createProducer(null)).andReturn(targetProducer);
+      sourceConn.start();
+
+      //after failure detection, we clean up...
+      // and it is stopped
+      sourceConn.close();
+      targetConn.close();
+      // ...retry to start the bridge but it fails...
+      expect(sourceDF.createDestination()).andReturn(sourceDest);
+      expect(targetDF.createDestination()).andReturn(targetDest);
+      expect(sourceCFF.createConnectionFactory()).andReturn(sourceCF);
+      expect(sourceCF.createConnection()).andThrow(new JMSException("exception while retrying to connect"));
+      // ... so we clean up again...
+      sourceConn.close();
+      targetConn.close();
+      // ... and finally stop the bridge
+      sourceConn.close();
+      targetConn.close();
+      
+      replay(sourceCFF, sourceCF, sourceConn, sourceSession, sourceConsumer,
+            sourceDF, sourceDest);
+      replay(targetCFF, targetCF, targetConn, targetSession, targetProducer,
+            targetDF, targetDest);
+      replay(tm);
+      replay(message);
+
+      BridgeImpl bridge = new BridgeImpl();
+      assertNotNull(bridge);
+
+      bridge.setSourceConnectionFactoryFactory(sourceCFF);
+      bridge.setSourceDestinationFactory(sourceDF);
+      bridge.setTargetConnectionFactoryFactory(targetCFF);
+      bridge.setTargetDestinationFactory(targetDF);
+      bridge.setFailureRetryInterval(10);
+      bridge.setMaxRetries(1);
+      bridge.setMaxBatchSize(1);
+      bridge.setMaxBatchTime(-1);
+      bridge.setTransactionManager(tm);
+      bridge.setQualityOfServiceMode(QualityOfServiceMode.AT_MOST_ONCE);
+
+      assertFalse(bridge.isStarted());
+      bridge.start();
+      assertTrue(bridge.isStarted());
+      
+      exceptionListenerAnswer.listener.onException(new JMSException("exception on the source"));
+      Thread.sleep(4 * bridge.getFailureRetryInterval());
+      // reconnection must have failed
+      assertFalse(bridge.isStarted());
+      
+      verify(sourceCFF, sourceCF, sourceConn, sourceSession, sourceConsumer,
+            sourceDF, sourceDest);
+      verify(targetCFF, targetCF, targetConn, targetSession, targetProducer,
+            targetDF, targetDest);
+      verify(tm);
+      verify(message);
+   }
+   
    // Package protected ---------------------------------------------
 
    // Protected -----------------------------------------------------
@@ -164,7 +495,18 @@
    // Private -------------------------------------------------------
 
    // Inner classes -------------------------------------------------
+   
+   class SetExceptionListenerAnswer implements IAnswer
+   {
+      ExceptionListener listener = null;
 
+      public Object answer() throws Throwable
+      {
+         listener = (ExceptionListener) getCurrentArguments()[0];
+         return null;
+      }
+   }
+   
    class SetMessageListenerAnswer implements IAnswer
    {
       MessageListener listener = null;




More information about the jboss-cvs-commits mailing list