@Test public void testWriteThreadSafety() { final MockedTime time = new MockedTime(); final HystrixRollingPercentile p = new HystrixRollingPercentile(time, 100, 25, 1000, HystrixProperty.Factory.asProperty(true)); final int NUM_THREADS = 10; final int NUM_ITERATIONS = 1000; final CountDownLatch latch = new CountDownLatch(NUM_THREADS); final Random r = new Random(); final AtomicInteger added = new AtomicInteger(0); for (int i = 0; i < NUM_THREADS; i++) { threadPool.submit(new Runnable() { @Override public void run() { for (int j = 1; j < NUM_ITERATIONS / NUM_THREADS + 1; j++) { int nextInt = r.nextInt(100); p.addValue(nextInt); added.getAndIncrement(); } latch.countDown(); } }); } try { latch.await(100, TimeUnit.SECONDS); assertEquals(added.get(), p.buckets.peekLast().data.length()); } catch (InterruptedException ex) { fail("Timeout on all threads writing percentiles"); } }
@Test public void testThreadSafety() { final MockedTime time = new MockedTime(); final HystrixRollingPercentile p = new HystrixRollingPercentile(time, 100, 25, 1000, HystrixProperty.Factory.asProperty(true));
@Test public void testSampleDataOverTime2() { System.out.println("\n\n***************************** testSampleDataOverTime2 \n"); MockedTime time = new MockedTime(); int previousTime = 0; HystrixRollingPercentile p = new HystrixRollingPercentile(time, timeInMilliseconds, numberOfBuckets, bucketDataLength, enabled); for (int i = 0; i < SampleDataHolder2.data.length; i++) { int timeInMillisecondsSinceStart = SampleDataHolder2.data[i][0]; int latency = SampleDataHolder2.data[i][1]; time.increment(timeInMillisecondsSinceStart - previousTime); previousTime = timeInMillisecondsSinceStart; p.addValue(latency); } System.out.println("0.01: " + p.getPercentile(0.01)); System.out.println("Median: " + p.getPercentile(50)); System.out.println("90th: " + p.getPercentile(90)); System.out.println("99th: " + p.getPercentile(99)); System.out.println("99.5th: " + p.getPercentile(99.5)); System.out.println("99.99: " + p.getPercentile(99.99)); if (p.getPercentile(50) > 90 || p.getPercentile(50) < 50) { fail("We expect around 60-70 but got: " + p.getPercentile(50)); } if (p.getPercentile(99) < 400) { fail("We expect to see some high values over 400 but got: " + p.getPercentile(99)); } }
HystrixRollingPercentile p = new HystrixRollingPercentile(time, timeInMilliseconds, numberOfBuckets, bucketDataLength, enabled); int previousTime = 0; for (int i = 0; i < SampleDataHolder1.data.length; i++) {
/** * This code should work without throwing exceptions but the data returned will all be -1 since the rolling percentile is disabled. */ @Test public void testDoesNothingWhenDisabled() { MockedTime time = new MockedTime(); int previousTime = 0; HystrixRollingPercentile p = new HystrixRollingPercentile(time, timeInMilliseconds, numberOfBuckets, bucketDataLength, HystrixProperty.Factory.asProperty(false)); for (int i = 0; i < SampleDataHolder2.data.length; i++) { int timeInMillisecondsSinceStart = SampleDataHolder2.data[i][0]; int latency = SampleDataHolder2.data[i][1]; time.increment(timeInMillisecondsSinceStart - previousTime); previousTime = timeInMillisecondsSinceStart; p.addValue(latency); } assertEquals(-1, p.getPercentile(50)); assertEquals(-1, p.getPercentile(75)); assertEquals(-1, p.getMean()); }
@Test public void testValueIsZeroAfterRollingWindowPassesAndNoTraffic() { MockedTime time = new MockedTime(); HystrixRollingPercentile p = new HystrixRollingPercentile(time, timeInMilliseconds, numberOfBuckets, bucketDataLength, enabled); p.addValue(1000); p.addValue(1000); p.addValue(1000); p.addValue(2000); p.addValue(4000); assertEquals(1, p.buckets.size()); // no bucket turnover yet so percentile not yet generated assertEquals(0, p.getPercentile(50)); time.increment(6000); // still only 1 bucket until we touch it again assertEquals(1, p.buckets.size()); // a bucket has been created so we have a new percentile assertEquals(1500, p.getPercentile(50)); // let 1 minute pass time.increment(60000); // no data in a minute should mean all buckets are empty (or reset) so we should not have any percentiles assertEquals(0, p.getPercentile(50)); }
@Test public void testRolling() { MockedTime time = new MockedTime(); HystrixRollingPercentile p = new HystrixRollingPercentile(time, timeInMilliseconds, numberOfBuckets, bucketDataLength, enabled); p.addValue(1000); p.addValue(1000);