package com.github.jaceko.circuitswitcher.it.util.mock;
import static java.text.MessageFormat.format;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;
public class MockServer {
Server jettyServer;
private int port;
public MockServer(int port) {
this.port = port;
jettyServer = new Server(port);
WebAppContext soapRestMockWebApp = new WebAppContext();
soapRestMockWebApp.setExtraClasspath("src/test/resources/mock-config");
soapRestMockWebApp.setWar("../external-wars/soaprest-mock-service.war");
soapRestMockWebApp.setContextPath("/mock");
jettyServer.setHandler(soapRestMockWebApp);
}
public void start() throws Exception {
System.out.println("Starting server on port "+port);
jettyServer.start();
System.out.println("Server started on port "+port);
}
public void stop() throws Exception {
jettyServer.stop();
jettyServer.join();
}
public static Process startNewProcess(String port) throws IOException {
List<String> argumentsList = new ArrayList<String>();
argumentsList.add("java");
argumentsList.add("-classpath");
argumentsList
.add(format(
".{0}../jetty/jetty-all.jar{0}../jetty/javax.servlet-api.jar{0}../../src/test/resources/mock-config/",
System.getProperty("path.separator")));
argumentsList.add("com.github.jaceko.circuitswitcher.it.util.mock.MockServer");
argumentsList.add(port);
ProcessBuilder processBuilder = new ProcessBuilder(argumentsList.toArray(new String[argumentsList.size()]));
processBuilder.redirectErrorStream(true);
processBuilder.directory(new File("target/test-classes"));
Process process = processBuilder.start();
InputStream inputStream = process.getInputStream();
BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
String line = null;
int lineCounter = 0;
while((line = in.readLine()) != null) {
lineCounter ++;
System.out.println(line);
if (line.contains("Server started")) {
in.close();
break;
}
if (lineCounter > 200) {
in.close();
System.out.println("Error starting mock server");
break;
}
}
return process;
}
public static void main(String[] args) throws Exception {
MockServer mockServer = new MockServer(Integer.valueOf(args[0]));
mockServer.start();
}
}