diff options
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.java | 44 |
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 + "]"; + } } |