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;