[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