[jboss-cvs] JBoss Messaging SVN: r2850 - trunk/tests/src/org/jboss/test/messaging/jms/clustering.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Fri Jul 6 14:15:18 EDT 2007
Author: clebert.suconic at jboss.com
Date: 2007-07-06 14:15:18 -0400 (Fri, 06 Jul 2007)
New Revision: 2850
Modified:
trunk/tests/src/org/jboss/test/messaging/jms/clustering/NoFailoverTest.java
Log:
http://jira.jboss.com/jira/browse/JBMESSAGING-761
Modified: trunk/tests/src/org/jboss/test/messaging/jms/clustering/NoFailoverTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/clustering/NoFailoverTest.java 2007-07-06 17:57:55 UTC (rev 2849)
+++ trunk/tests/src/org/jboss/test/messaging/jms/clustering/NoFailoverTest.java 2007-07-06 18:15:18 UTC (rev 2850)
@@ -24,6 +24,16 @@
import org.jboss.jms.client.JBossConnectionFactory;
import org.jboss.jms.client.delegate.ClientClusteredConnectionFactoryDelegate;
+import org.jboss.test.messaging.tools.ServerManagement;
+import javax.jms.ConnectionFactory;
+import javax.jms.Connection;
+import javax.jms.JMSException;
+import javax.jms.Session;
+import javax.jms.MessageProducer;
+import javax.jms.MessageConsumer;
+import javax.jms.TextMessage;
+import javax.jms.ExceptionListener;
+import EDU.oswego.cs.dl.util.concurrent.Latch;
/**
* Test situations where supports failover is marked false
@@ -49,12 +59,109 @@
// Public ---------------------------------------------------------------------------------------
- public void testConnectionFactory()
+ public void testCrashNoFailover() throws Exception
{
- JBossConnectionFactory cfLocal = (JBossConnectionFactory)cf;
- assertFalse(((ClientClusteredConnectionFactoryDelegate)cfLocal.getDelegate()).isSupportsFailover());
+ Connection conn = null;
+ try
+ {
+ assertFalse(((ClientClusteredConnectionFactoryDelegate)((JBossConnectionFactory)cf).getDelegate()).isSupportsFailover());
+
+ conn = createConnectionOnServer(cf, 1);
+
+ MyListener listener = new MyListener();
+
+ conn.setExceptionListener(listener);
+
+ assertEquals(1, getServerId(conn));
+
+ Session sess = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+
+ MessageProducer prod = sess.createProducer(queue[1]);
+
+ prod.send(sess.createTextMessage("Before Crash"));
+
+ //Now kill server 1
+
+ log.info("KILLING SERVER 1");
+ ServerManagement.kill(1);
+ log.info("KILLED SERVER 1");
+
+ JMSException e = listener.waitForException(20000);
+
+ assertNotNull(e);
+
+ assertTrue(e.getMessage().equals("Failure on underlying remoting connection"));
+
+ // Connection should still be on server 1 (no client failover taken)
+ assertEquals(1, getServerId(conn));
+
+ //Now try and recreate connection on different node
+
+ conn.close();
+
+ conn = createConnectionOnServer(cf, 2);
+ cf.createConnection();
+
+ sess = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+
+ prod = sess.createProducer(queue[2]);
+
+ MessageConsumer cons = sess.createConsumer(queue[2]);
+
+ conn.start();
+
+ TextMessage tm = sess.createTextMessage("After Crash");
+
+ prod.send(tm);
+
+ TextMessage rm = (TextMessage)cons.receive(1000);
+
+ assertNotNull(rm);
+
+ assertEquals(tm.getText(), rm.getText());
+
+ rm = (TextMessage)cons.receive(1000);
+
+ assertNull(rm);
+
+ conn.close();
+
+ // Restarting the server
+ ServerManagement.start(1, "all-failover", false);
+ ServerManagement.deployQueue("testDistributedQueue", 1);
+ ServerManagement.deployTopic("testDistributedTopic", 1);
+
+
+ // Since there is no active connection, the cf won't be notified about the change on nodes
+ lookups();
+
+ conn = createConnectionOnServer(cf, 1);
+ cf.createConnection();
+
+ sess = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+
+ cons = sess.createConsumer(queue[2]);
+
+ conn.start();
+
+ // message should still be on server.. no server failover taken
+ rm = (TextMessage) cons.receive(1000);
+
+ assertEquals(rm.getText(), "Before Crash");
+
+
+ }
+ finally
+ {
+ if (conn != null)
+ {
+ conn.close();
+ }
+ }
}
+
+
// Package protected ----------------------------------------------------------------------------
// Protected ------------------------------------------------------------------------------------
@@ -74,5 +181,28 @@
// Private --------------------------------------------------------------------------------------
// Inner classes --------------------------------------------------------------------------------
+ // Inner classes --------------------------------------------------------------------------------
+ private class MyListener implements ExceptionListener
+ {
+ private JMSException e;
+
+ Latch l = new Latch();
+
+ public void onException(JMSException e)
+ {
+ this.e = e;
+
+ l.release();
+ }
+
+ JMSException waitForException(long timeout) throws Exception
+ {
+ l.attempt(timeout);
+
+ return e;
+ }
+
+ }
+
}
More information about the jboss-cvs-commits
mailing list