package uk.ac.imperial.lsds.seepworker.core.output.routing; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.junit.Test; public class ConsistentHashingRoutingTest { @Test public void test() { int connections = 5000; List<Integer> opIds = new ArrayList<>(); // Build a router for(int i = 0; i < connections; i++){ opIds.add(i); } Router r = RouterFactory.buildRouterFor(opIds, true); // Try router Map<Integer, Integer> distribution = new HashMap<>(); int iter = 100000; for(int key = 0; key < iter; key++){ int opId = r.route(key); routeTo(distribution, opId, key); } printDistribution(distribution, iter); assert(true); } @Test public void testTime(){ int connections = 5; List<Integer> opIds = new ArrayList<>(); // Build a router for(int i = 0; i < connections; i++){ opIds.add(i); } Router r = RouterFactory.buildRouterFor(opIds, true); // Try router int iter = 10000000; long start = System.nanoTime(); for(int key = 0; key < iter; key++){ int opId = r.route(key); } long stop = System.nanoTime(); long totalMillis = (stop-start)/1000000; System.out.println("Time to route: "+iter+" to "+connections+" downstreams is: "+totalMillis+" ms"); assert(true); } private void routeTo(Map<Integer, Integer> distribution, int opId, int key){ int newValue = 1; if(distribution.containsKey(opId)){ newValue = distribution.get(opId) + 1; } distribution.put(opId, newValue); } private void printDistribution(Map<Integer, Integer> distribution, int iter){ int keySet = distribution.size(); int avgDistribution = iter/keySet; System.out.println("Expected average distro per key: "+avgDistribution); for(Entry<Integer, Integer> entry : distribution.entrySet()){ System.out.println("id: "+entry.getKey()+" #:"+entry.getValue()); } } }