blob: ca1c17ba70e0ff2801a684670b1e745177d2001e [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package flex.messaging.util;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* Simple little wrapper starting up a BlazeDS server in a separate VM useful for unit testing the
* features that need different singletons in client and server.
*/
public class TestServerWrapper {
private Process serverProcess;
public int startServer(String configPath) {
// We can only start one server per instance of TestServer.
if(serverProcess != null) {
return -1;
}
final String separator = System.getProperty("file.separator");
final String classpath = System.getProperty("java.class.path");
final String path = System.getProperty("java.home") + separator + "bin" + separator + "java";
System.out.print("Starting test-server");
final ProcessBuilder processBuilder = new ProcessBuilder(path,
//"-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005",
"-cp", /*"\"" +*/ classpath /*+ "\""*/,
TestServer.class.getCanonicalName(), /*"\"" +*/ configPath /*+ "\""*/);
processBuilder.redirectErrorStream(true);
try {
serverProcess = processBuilder.start();
BufferedReader in = new BufferedReader(new InputStreamReader(serverProcess.getInputStream()));
String line;
while((line = in.readLine()) != null) {
if(line.startsWith("Port:")) {
// Read the process output and extract the port
// number the server started on.
int port = Integer.parseInt(line.substring(5));
System.out.println("STARTED on port " + port);
return port;
}
}
return -1;
} catch (IOException e) {
System.out.println("ERROR: " + e.toString());
return -1;
}
}
public void stopServer() {
if(serverProcess != null) {
System.out.print("Stopping test-server ... ");
// Send a signal to the server process to make itself shut down.
serverProcess.destroy();
System.out.println("STOPPED");
}
}
}