package com.tacitknowledge.slowlight.proxyserver.systest;
import com.tacitknowledge.slowlight.proxyserver.config.HandlerConfig;
import com.tacitknowledge.slowlight.proxyserver.config.ServerConfig;
import com.tacitknowledge.slowlight.proxyserver.server.Server;
import com.tacitknowledge.slowlight.proxyserver.server.proxy.ProxyServer;
import com.tacitknowledge.slowlight.proxyserver.systest.util.client.TestClient;
import com.tacitknowledge.slowlight.proxyserver.systest.util.server.TestServer;
import org.apache.commons.lang.ArrayUtils;
import org.junit.Before;
import org.junit.BeforeClass;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author Alexandr Donciu (adonciu@tacitknowledge.com)
*/
public class AbstractProxyServerIT
{
protected static final int SERVER_PORT = 8080;
private static int nextClientPort = 8081;
protected int clientPort;
@BeforeClass
public static void setupClass() throws Exception
{
final TestServer testServer = new TestServer(SERVER_PORT);
testServer.start();
}
@Before
public void setup()
{
clientPort = nextPort();
}
protected Server createProxyServer(final List<HandlerConfig> handlerConfig) throws InterruptedException
{
final ServerConfig serverConfig = new ServerConfig();
serverConfig.setId("test proxy server");
serverConfig.setType("proxy");
serverConfig.setLocalPort(clientPort);
serverConfig.setHandlers(handlerConfig);
final Map<String, String> serverParams = new HashMap<String, String>() {{
put("host", "localhost");
put("port", Integer.toString(SERVER_PORT));
}};
serverConfig.setParams(serverParams);
final Server server = new ProxyServer(serverConfig);
server.start();
return server;
}
protected TestClient createClient(final int responseSize) throws InterruptedException
{
final TestClient testClient = new TestClient(clientPort, responseSize);
testClient.start();
return testClient;
}
protected String convertResponseToString(final List<byte[]> responseBytesList)
{
byte[] response = new byte[0];
for (final byte[] responseBytes : responseBytesList)
{
response = ArrayUtils.addAll(response, responseBytes);
}
return new String(response);
}
private static synchronized int nextPort()
{
return nextClientPort++;
}
}