summaryrefslogtreecommitdiff
path: root/java/systests/src/main/java/org/apache/qpid/test/utils/SpawnedBrokerHolder.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/systests/src/main/java/org/apache/qpid/test/utils/SpawnedBrokerHolder.java')
-rw-r--r--java/systests/src/main/java/org/apache/qpid/test/utils/SpawnedBrokerHolder.java44
1 files changed, 43 insertions, 1 deletions
diff --git a/java/systests/src/main/java/org/apache/qpid/test/utils/SpawnedBrokerHolder.java b/java/systests/src/main/java/org/apache/qpid/test/utils/SpawnedBrokerHolder.java
index 787fc164d5..bce97a574a 100644
--- a/java/systests/src/main/java/org/apache/qpid/test/utils/SpawnedBrokerHolder.java
+++ b/java/systests/src/main/java/org/apache/qpid/test/utils/SpawnedBrokerHolder.java
@@ -20,7 +20,10 @@
*/
package org.apache.qpid.test.utils;
+import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import java.io.InputStream;
+import java.util.Set;
import org.apache.log4j.Logger;
@@ -32,8 +35,9 @@ public class SpawnedBrokerHolder implements BrokerHolder
private final Process _process;
private final Integer _pid;
private final String _workingDirectory;
+ private Set<Integer> _portsUsedByBroker;
- public SpawnedBrokerHolder(final Process process, final String workingDirectory)
+ public SpawnedBrokerHolder(final Process process, final String workingDirectory, Set<Integer> portsUsedByBroker)
{
if(process == null)
{
@@ -43,6 +47,7 @@ public class SpawnedBrokerHolder implements BrokerHolder
_process = process;
_pid = retrieveUnixPidIfPossible();
_workingDirectory = workingDirectory;
+ _portsUsedByBroker = portsUsedByBroker;
}
@Override
@@ -57,6 +62,8 @@ public class SpawnedBrokerHolder implements BrokerHolder
_process.destroy();
reapChildProcess();
+
+ waitUntilPortsAreFree();
}
@Override
@@ -74,6 +81,8 @@ public class SpawnedBrokerHolder implements BrokerHolder
}
reapChildProcess();
+
+ waitUntilPortsAreFree();
}
private void sendSigkillForImmediateShutdown(Integer pid)
@@ -146,4 +155,37 @@ public class SpawnedBrokerHolder implements BrokerHolder
}
}
+ private void waitUntilPortsAreFree()
+ {
+ new PortHelper().waitUntilPortsAreFree(_portsUsedByBroker);
+ }
+
+ @Override
+ public String dumpThreads()
+ {
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ try
+ {
+ Process process = Runtime.getRuntime().exec("jstack " + _pid);
+ InputStream is = process.getInputStream();
+ byte[] buffer = new byte[1024];
+ int length = -1;
+ while ((length = is.read(buffer)) != -1)
+ {
+ baos.write(buffer, 0, length);
+ }
+ }
+ catch (Exception e)
+ {
+ LOGGER.error("Error whilst collecting thread dump for " + _pid, e);
+ }
+ return new String(baos.toByteArray());
+ }
+
+ @Override
+ public String toString()
+ {
+ return "SpawnedBrokerHolder [_pid=" + _pid + ", _portsUsedByBroker="
+ + _portsUsedByBroker + "]";
+ }
}