package com.tacitknowledge.slowlight.proxyserver.systest;
import com.google.common.collect.Lists;
import com.tacitknowledge.slowlight.proxyserver.config.HandlerConfig;
import com.tacitknowledge.slowlight.proxyserver.handler.DelayChannelHandler;
import com.tacitknowledge.slowlight.proxyserver.systest.util.client.TestClient;
import org.junit.Test;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.greaterThan;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.lessThanOrEqualTo;
import static org.junit.Assert.assertThat;
/**
* @author Alexandr Donciu (adonciu@tacitknowledge.com)
*/
public class DelayProxyServerIT extends AbstractProxyServerIT
{
@Test(timeout = 2500)
public void proxyServerShouldSplitAndDelayResponseBySpecifiedParams() throws Throwable
{
createProxyServer(getDelayHandlerConfigs(5, 500));
final String request = "12345678901234567890";
final TestClient client = createClient(20);
long startTime = System.currentTimeMillis();
final List<byte[]> response = client.sendMessage(request);
long endTime = System.currentTimeMillis();
assertThat(endTime - startTime, is(greaterThan(2000L)));
assertThat(convertResponseToString(response), is(equalTo(request)));
for (final byte[] responseBytes : response)
{
assertThat(responseBytes.length, is(lessThanOrEqualTo(5)));
}
}
@Test(timeout = 1000)
public void proxyServerShouldNotDelayResponseIfDelayParamIsSetToZero() throws Throwable
{
createProxyServer(getDelayHandlerConfigs(5, 0));
final String request = "12345678901234567890";
final TestClient client = createClient(20);
client.sendMessage(request);
}
@Test
public void proxyServerShouldNotSplitResponseIfMaxDataSizeParamIsSetToZero() throws Throwable
{
createProxyServer(getDelayHandlerConfigs(0, 0));
final String request = "12345678901234567890";
final TestClient client = createClient(20);
final List<byte[]> response = client.sendMessage(request);
for (final byte[] responseBytes : response)
{
assertThat(responseBytes.length, is(greaterThan(0)));
}
}
private List<HandlerConfig> getDelayHandlerConfigs(final int dataSize, final long delay)
{
final HandlerConfig delayHandlerConfig = new HandlerConfig();
delayHandlerConfig.setName("delayHandler");
delayHandlerConfig.setType(DelayChannelHandler.class.getName());
final Map<String, String> handlerParam = new HashMap<String, String>() {{
put("maxDataSize", Integer.toString(dataSize));
put("delay", Long.toString(delay));
}};
delayHandlerConfig.setParams(handlerParam);
return Lists.newArrayList(delayHandlerConfig);
}
}