package me.prettyprint.cassandra.connection; import static org.junit.Assert.assertTrue; import me.prettyprint.cassandra.BaseEmbededServerSetupTest; import me.prettyprint.cassandra.connection.factory.HClientFactory; import me.prettyprint.cassandra.connection.factory.HThriftClientFactoryImpl; import me.prettyprint.cassandra.service.CassandraHost; import me.prettyprint.cassandra.service.CassandraClientMonitor; import org.junit.Before; import org.junit.Test; public class LatencyAwareHClientPoolTest extends BaseEmbededServerSetupTest { private static final double DYNAMIC_BADNESS_THRESHOLD = 0.24; private CassandraHost cassandraHost; private LatencyAwareHClientPool clientPool; @Before public void setupTest() { setupClient(); cassandraHost = cassandraHostConfigurator.buildCassandraHosts()[0]; HClientFactory factory = new HThriftClientFactoryImpl(); clientPool = new LatencyAwareHClientPool(factory, cassandraHost, new CassandraClientMonitor(connectionManager)); } @Test public void testScore() { clientPool.add(120); clientPool.add(121); clientPool.add(122); clientPool.add(123); clientPool.add(124); double score1 = clientPool.score(); clientPool.clear(); clientPool.add(150); clientPool.add(151); clientPool.add(152); clientPool.add(152); clientPool.add(1530); double score2 = clientPool.score(); clientPool.clear(); System.out.println((score2 - score1) / score2); assertTrue("Error... score 2 is bigger than score 1...", (score2 - score1) / score2 > 0); } @Test public void testReverse() { clientPool.add(100); clientPool.add(101); clientPool.add(102); clientPool.add(103); clientPool.add(104); double score3 = clientPool.score(); clientPool.clear(); clientPool.add(10000); clientPool.add(10000); clientPool.add(10020); clientPool.add(11030); clientPool.add(1604); double score4 = clientPool.score(); clientPool.clear(); assertTrue("Error the latencies are not taken into account!", (score3 - score4) / score3 < 0); } @Test public void testThreshhold() { for (int i = 50; i < 150; i++) { clientPool.add(i); } double score1 = clientPool.score(); clientPool.clear(); System.out.println(score1); for (int i = 450; i < 550; i++) { clientPool.add(i); } double score2 = clientPool.score(); clientPool.clear(); System.out.println(score2); System.out.println((score2 - score1) / score2); // score 2 has things around 500 and score 1 has things around 100 so it is approx 25% bad assertTrue("Error The Badness threshold value is not taken into account!", (score2 - score1) / score2 > DYNAMIC_BADNESS_THRESHOLD); } }