From b09b179dd7bc5537373b063ee943411de6e52967 Mon Sep 17 00:00:00 2001 From: "Rafael H. Schloming" Date: Mon, 3 Mar 2008 16:35:19 +0000 Subject: 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 git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@633164 13f79535-47bb-0310-9956-ffa450edef68 --- .../client/connection/ConnectionCloseTest.java | 29 ++++++++++++++++++++++ .../org/apache/qpid/testutil/QpidTestCase.java | 2 +- 2 files changed, 30 insertions(+), 1 deletion(-) (limited to 'java/client/src/test') diff --git a/java/client/src/test/java/org/apache/qpid/test/unit/client/connection/ConnectionCloseTest.java b/java/client/src/test/java/org/apache/qpid/test/unit/client/connection/ConnectionCloseTest.java index 20443944d2..7df8c87300 100644 --- a/java/client/src/test/java/org/apache/qpid/test/unit/client/connection/ConnectionCloseTest.java +++ b/java/client/src/test/java/org/apache/qpid/test/unit/client/connection/ConnectionCloseTest.java @@ -23,6 +23,9 @@ package org.apache.qpid.test.unit.client.connection; 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 class ConnectionCloseTest extends QpidTestCase public void testSendReceiveClose() throws Exception { + Map before = Thread.getAllStackTraces(); + for (int i = 0; i < 500; i++) { if ((i % 10) == 0) @@ -67,6 +72,30 @@ public class ConnectionCloseTest extends QpidTestCase assertEquals(m.getText(), "test"); receiver.close(); } + + Map after = Thread.getAllStackTraces(); + + Map delta = new HashMap(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 map) + { + for (Map.Entry entry : map.entrySet()) + { + Throwable t = new Throwable(); + t.setStackTrace(entry.getValue()); + log.warn(t, entry.getKey().toString()); + } } } diff --git a/java/client/src/test/java/org/apache/qpid/testutil/QpidTestCase.java b/java/client/src/test/java/org/apache/qpid/testutil/QpidTestCase.java index 60b1b70d67..4a8d74ff87 100644 --- a/java/client/src/test/java/org/apache/qpid/testutil/QpidTestCase.java +++ b/java/client/src/test/java/org/apache/qpid/testutil/QpidTestCase.java @@ -270,7 +270,7 @@ public class QpidTestCase extends TestCase 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; -- cgit v1.2.1