in systests/src/main/java/org/apache/qpid/systest/core/brokerj/SpawnQpidBrokerAdmin.java [205:288]
protected ProcessBuilder createBrokerProcessBuilder(String _currentWorkDirectory, final Class testClass) throws IOException
{
String initialConfiguration = System.getProperty(SYSTEST_PROPERTY_INITIAL_CONFIGURATION_LOCATION);
if (initialConfiguration == null)
{
throw new BrokerAdminException(
String.format("No initial configuration is found: JVM property '%s' is not set.",
SYSTEST_PROPERTY_INITIAL_CONFIGURATION_LOCATION));
}
File testInitialConfiguration = new File(_currentWorkDirectory, "initial-configuration.json");
if (!testInitialConfiguration.createNewFile())
{
throw new BrokerAdminException("Failed to create a file for a copy of initial configuration");
}
if (initialConfiguration.startsWith("classpath:"))
{
String config = initialConfiguration.substring("classpath:".length());
try (InputStream is = getClass().getClassLoader().getResourceAsStream(config);
OutputStream os = new FileOutputStream(testInitialConfiguration))
{
ByteStreams.copy(is, os);
}
}
else
{
Files.copy(new File(initialConfiguration).toPath(), testInitialConfiguration.toPath());
}
String classpath;
File file = new File(System.getProperty(SYSTEST_PROPERTY_BUILD_CLASSPATH_FILE));
if (!file.exists())
{
String dependencies = System.getProperty(SYSTEST_PROPERTY_BROKERJ_DEPENDENCIES);
final ClasspathQuery classpathQuery = new ClasspathQuery(SpawnQpidBrokerAdmin.class,
Arrays.asList(dependencies.split(",")));
classpath = classpathQuery.getClasspath();
Files.write(file.toPath(), Collections.singleton(classpath), UTF_8);
}
else
{
classpath = new String(Files.readAllBytes(file.toPath()), UTF_8);
}
// grab Qpid related JVM settings
List<String> jvmArguments = new ArrayList<>();
Properties jvmProperties = System.getProperties();
for (String jvmProperty : jvmProperties.stringPropertyNames())
{
if (jvmProperty.startsWith(SYSTEST_PROPERTY_PREFIX)
|| jvmProperty.equalsIgnoreCase("java.io.tmpdir"))
{
jvmArguments.add(String.format("-D%s=%s", jvmProperty, jvmProperties.getProperty(jvmProperty)));
}
}
jvmArguments.add(0, System.getProperty(SYSTEST_PROPERTY_JAVA_EXECUTABLE, "java"));
jvmArguments.add(1, "-cp");
jvmArguments.add(2, classpath);
jvmArguments.add(String.format("-D%s=%d",
SYSTEST_PROPERTY_LOGBACK_SOCKET_PORT,
LogbackSocketPortNumberDefiner.getLogbackSocketPortNumber()));
jvmArguments.add(String.format("-D%s=%s-%s",
SYSTEST_PROPERTY_LOGBACK_ORIGIN,
BROKER_LOG_PREFIX,
testClass.getSimpleName()));
jvmArguments.add(String.format("-D%s=%s", SYSTEST_PROPERTY_LOGBACK_CONTEXT, testClass.getName()));
if (System.getProperty(SYSTEST_PROPERTY_REMOTE_DEBUGGER) != null)
{
jvmArguments.add(System.getProperty(SYSTEST_PROPERTY_REMOTE_DEBUGGER));
}
jvmArguments.add("org.apache.qpid.server.Main");
jvmArguments.add("-prop");
jvmArguments.add(String.format("qpid.work_dir=%s", escapePath(_currentWorkDirectory)));
jvmArguments.add("--store-type");
jvmArguments.add("JSON");
jvmArguments.add("--initial-config-path");
jvmArguments.add(escapePath(testInitialConfiguration.toString()));
LOGGER.debug("Spawning broker JVM : {}", jvmArguments);
String[] cmd = jvmArguments.toArray(new String[jvmArguments.size()]);
return new ProcessBuilder(cmd);
}