|
@@ -0,0 +1,83 @@
|
|
|
+/*
|
|
|
+ * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
|
|
|
+ * or more contributor license agreements. Licensed under the Elastic License
|
|
|
+ * 2.0 and the Server Side Public License, v 1; you may not use this file except
|
|
|
+ * in compliance with, at your election, the Elastic License 2.0 or the Server
|
|
|
+ * Side Public License, v 1.
|
|
|
+ */
|
|
|
+
|
|
|
+package org.elasticsearch.common.network;
|
|
|
+
|
|
|
+import org.elasticsearch.test.ESTestCase;
|
|
|
+
|
|
|
+import static org.hamcrest.Matchers.greaterThan;
|
|
|
+
|
|
|
+public class HandlingTimeTrackerTests extends ESTestCase {
|
|
|
+
|
|
|
+ public void testHistogram() {
|
|
|
+ final HandlingTimeTracker handlingTimeTracker = new HandlingTimeTracker();
|
|
|
+
|
|
|
+ assertArrayEquals(new long[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, handlingTimeTracker.getHistogram());
|
|
|
+
|
|
|
+ handlingTimeTracker.addHandlingTime(0L);
|
|
|
+ assertArrayEquals(new long[] { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, handlingTimeTracker.getHistogram());
|
|
|
+
|
|
|
+ handlingTimeTracker.addHandlingTime(1L);
|
|
|
+ assertArrayEquals(new long[] { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, handlingTimeTracker.getHistogram());
|
|
|
+
|
|
|
+ handlingTimeTracker.addHandlingTime(2L);
|
|
|
+ assertArrayEquals(new long[] { 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, handlingTimeTracker.getHistogram());
|
|
|
+
|
|
|
+ handlingTimeTracker.addHandlingTime(3L);
|
|
|
+ assertArrayEquals(new long[] { 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, handlingTimeTracker.getHistogram());
|
|
|
+
|
|
|
+ handlingTimeTracker.addHandlingTime(4L);
|
|
|
+ assertArrayEquals(new long[] { 1, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, handlingTimeTracker.getHistogram());
|
|
|
+
|
|
|
+ handlingTimeTracker.addHandlingTime(127L);
|
|
|
+ assertArrayEquals(new long[] { 1, 1, 2, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, handlingTimeTracker.getHistogram());
|
|
|
+
|
|
|
+ handlingTimeTracker.addHandlingTime(128L);
|
|
|
+ assertArrayEquals(new long[] { 1, 1, 2, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, handlingTimeTracker.getHistogram());
|
|
|
+
|
|
|
+ handlingTimeTracker.addHandlingTime(65535L);
|
|
|
+ assertArrayEquals(new long[] { 1, 1, 2, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0 }, handlingTimeTracker.getHistogram());
|
|
|
+
|
|
|
+ handlingTimeTracker.addHandlingTime(65536L);
|
|
|
+ assertArrayEquals(new long[] { 1, 1, 2, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1 }, handlingTimeTracker.getHistogram());
|
|
|
+
|
|
|
+ handlingTimeTracker.addHandlingTime(Long.MAX_VALUE);
|
|
|
+ assertArrayEquals(new long[] { 1, 1, 2, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 2 }, handlingTimeTracker.getHistogram());
|
|
|
+
|
|
|
+ handlingTimeTracker.addHandlingTime(randomLongBetween(65536L, Long.MAX_VALUE));
|
|
|
+ assertArrayEquals(new long[] { 1, 1, 2, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 3 }, handlingTimeTracker.getHistogram());
|
|
|
+
|
|
|
+ handlingTimeTracker.addHandlingTime(randomLongBetween(Long.MIN_VALUE, 0L));
|
|
|
+ assertArrayEquals(new long[] { 2, 1, 2, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 3 }, handlingTimeTracker.getHistogram());
|
|
|
+ }
|
|
|
+
|
|
|
+ public void testHistogramRandom() {
|
|
|
+ final int[] upperBounds = HandlingTimeTracker.getBucketUpperBounds();
|
|
|
+ final long[] expectedCounts = new long[upperBounds.length + 1];
|
|
|
+ final HandlingTimeTracker handlingTimeTracker = new HandlingTimeTracker();
|
|
|
+ for (int i = between(0, 1000); i > 0; i--) {
|
|
|
+ final int bucket = between(0, expectedCounts.length - 1);
|
|
|
+ expectedCounts[bucket] += 1;
|
|
|
+
|
|
|
+ final int lowerBound = bucket == 0 ? 0 : upperBounds[bucket - 1];
|
|
|
+ final int upperBound = bucket == upperBounds.length ? randomBoolean() ? 100000 : Integer.MAX_VALUE : upperBounds[bucket] - 1;
|
|
|
+ handlingTimeTracker.addHandlingTime(between(lowerBound, upperBound));
|
|
|
+ }
|
|
|
+
|
|
|
+ assertArrayEquals(expectedCounts, handlingTimeTracker.getHistogram());
|
|
|
+ }
|
|
|
+
|
|
|
+ public void testBoundsConsistency() {
|
|
|
+ final int[] upperBounds = HandlingTimeTracker.getBucketUpperBounds();
|
|
|
+ assertThat(upperBounds[0], greaterThan(0));
|
|
|
+ for (int i = 1; i < upperBounds.length; i++) {
|
|
|
+ assertThat(upperBounds[i], greaterThan(upperBounds[i - 1]));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+}
|