Author: rhs
Date: Mon Mar  3 08:35:19 2008
New Revision: 633164

URL: http://svn.apache.org/viewvc?rev=633164&view=rev
Log:
added an assert to verify that no threads are leaked on connection open/close; 
this should detect problems with dispatcher threads not dieing as described 
inQPID-823

Modified:
    
incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/connection/ConnectionCloseTest.java
    
incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/testutil/QpidTestCase.java

Modified: 
incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/connection/ConnectionCloseTest.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/connection/ConnectionCloseTest.java?rev=633164&r1=633163&r2=633164&view=diff
==============================================================================
--- 
incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/connection/ConnectionCloseTest.java
 (original)
+++ 
incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/test/unit/client/connection/ConnectionCloseTest.java
 Mon Mar  3 08:35:19 2008
@@ -23,6 +23,9 @@
 import org.apache.qpid.testutil.QpidTestCase;
 import org.apache.qpidity.transport.util.Logger;
 
+import java.util.HashMap;
+import java.util.Map;
+
 import javax.jms.Connection;
 import javax.jms.MessageConsumer;
 import javax.jms.MessageProducer;
@@ -42,6 +45,8 @@
 
     public void testSendReceiveClose() throws Exception
     {
+        Map<Thread,StackTraceElement[]> before = Thread.getAllStackTraces();
+
         for (int i = 0; i < 500; i++)
         {
             if ((i % 10) == 0)
@@ -66,6 +71,30 @@
             assertNotNull("message was lost", m);
             assertEquals(m.getText(), "test");
             receiver.close();
+        }
+
+        Map<Thread,StackTraceElement[]> after = Thread.getAllStackTraces();
+
+        Map<Thread,StackTraceElement[]> delta = new 
HashMap<Thread,StackTraceElement[]>(after);
+        for (Thread t : before.keySet())
+        {
+            delta.remove(t);
+        }
+
+        dumpStacks(delta);
+
+        assertTrue("Spurious thread creation exceeded threshold, " +
+                   delta.size() + " threads created.",
+                   delta.size() < 10);
+    }
+
+    private void dumpStacks(Map<Thread,StackTraceElement[]> map)
+    {
+        for (Map.Entry<Thread,StackTraceElement[]> entry : map.entrySet())
+        {
+            Throwable t = new Throwable();
+            t.setStackTrace(entry.getValue());
+            log.warn(t, entry.getKey().toString());
         }
     }
 

Modified: 
incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/testutil/QpidTestCase.java
URL: 
http://svn.apache.org/viewvc/incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/testutil/QpidTestCase.java?rev=633164&r1=633163&r2=633164&view=diff
==============================================================================
--- 
incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/testutil/QpidTestCase.java
 (original)
+++ 
incubator/qpid/trunk/qpid/java/client/src/test/java/org/apache/qpid/testutil/QpidTestCase.java
 Mon Mar  3 08:35:19 2008
@@ -270,7 +270,7 @@
         return con;
     }
 
-     public Connection getConnection(String username, String password, String 
id) throws Exception
+    public Connection getConnection(String username, String password, String 
id) throws Exception
     {
         _logger.info("get Connection");
         Connection con;


Reply via email to