package com.netflix.niws.client.http;
import static org.junit.Assert.*;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import org.apache.commons.configuration.Configuration;
import org.junit.*;
import com.netflix.client.ClientFactory;
import com.netflix.client.PrimeConnections.PrimeConnectionEndStats;
//import com.netflix.client.PrimeConnections.PrimeConnectionEndStats;
import com.netflix.client.config.IClientConfig;
import com.netflix.config.ConfigurationManager;
import com.netflix.loadbalancer.AbstractServerList;
import com.netflix.loadbalancer.DynamicServerListLoadBalancer;
import com.netflix.loadbalancer.Server;
import com.sun.jersey.api.container.httpserver.HttpServerFactory;
import com.sun.jersey.api.core.PackagesResourceConfig;
import com.sun.net.httpserver.HttpServer;
public class PrimeConnectionsTest {
private static String SERVICE_URI;
private static int port = (new Random()).nextInt(1000) + 4000;
private static HttpServer server = null;
private static final int SMALL_FIXED_SERVER_LIST_SIZE = 10;
private static final int LARGE_FIXED_SERVER_LIST_SIZE = 200;
public static class LargeFixedServerList extends FixedServerList {
public LargeFixedServerList() {
super(200);
}
}
public static class SmallFixedServerList extends FixedServerList {
public SmallFixedServerList() {
super(10);
}
}
public static class FixedServerList extends AbstractServerList<Server> {
private Server testServer = new Server("localhost", port);
private List<Server> testServers;
public FixedServerList(int repeatCount) {
Server list[] = new Server[repeatCount];
for (int ii = 0; ii < list.length; ii++) {
list[ii] = testServer;
}
testServers = Arrays.asList(list);
}
@Override
public void initWithNiwsConfig(IClientConfig clientConfig) {
}
@Override
public List<Server> getInitialListOfServers() {
return testServers;
}
@Override
public List<Server> getUpdatedListOfServers() {
return testServers;
}
}
@BeforeClass
public static void setup(){
PackagesResourceConfig resourceConfig = new PackagesResourceConfig("com.netflix.niws.client.http");
SERVICE_URI = "http://localhost:" + port + "/";
try{
server = HttpServerFactory.create(SERVICE_URI, resourceConfig);
server.start();
} catch (Exception e) {
e.printStackTrace();
fail(e.getMessage());
}
}
@Test
public void testPrimeConnectionsSmallPool() throws Exception {
Configuration config = ConfigurationManager.getConfigInstance();
config.setProperty("PrimeConnectionsTest1.ribbon.NFLoadBalancerClassName",
com.netflix.loadbalancer.DynamicServerListLoadBalancer.class.getName());
config.setProperty("PrimeConnectionsTest1.ribbon.NIWSServerListClassName", SmallFixedServerList.class.getName());
config.setProperty("PrimeConnectionsTest1.ribbon.EnablePrimeConnections", "true");
DynamicServerListLoadBalancer<Server> lb = (DynamicServerListLoadBalancer<Server>) ClientFactory.getNamedLoadBalancer("PrimeConnectionsTest1");
PrimeConnectionEndStats stats = lb.getPrimeConnections().getEndStats();
assertEquals(stats.success, SMALL_FIXED_SERVER_LIST_SIZE);
}
@Test
public void testPrimeConnectionsLargePool() throws Exception {
Configuration config = ConfigurationManager.getConfigInstance();
config.setProperty("PrimeConnectionsTest2.ribbon.NFLoadBalancerClassName",
com.netflix.loadbalancer.DynamicServerListLoadBalancer.class.getName());
config.setProperty("PrimeConnectionsTest2.ribbon.NIWSServerListClassName", LargeFixedServerList.class.getName());
config.setProperty("PrimeConnectionsTest2.ribbon.EnablePrimeConnections", "true");
DynamicServerListLoadBalancer<Server> lb = (DynamicServerListLoadBalancer<Server>) ClientFactory.getNamedLoadBalancer("PrimeConnectionsTest2");
PrimeConnectionEndStats stats = lb.getPrimeConnections().getEndStats();
assertEquals(stats.success, LARGE_FIXED_SERVER_LIST_SIZE);
}
@AfterClass
public static void shutDown() {
server.stop(0);
}
}