// Copyright 2016 Google Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // //////////////////////////////////////////////////////////////////////////////// package com.google.pubsub.flic.common; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import org.junit.Before; import org.junit.Test; /** * Tests for {@link LatencyDistribution}. */ public class LatencyDistributionTest { private static final double EPSILON = 0.001; private LatencyDistribution distribution; @Before public void setup() { distribution = new LatencyDistribution(); } @Test public void testEmpty() { assertEquals(distribution.getMean(), 0, EPSILON); assertEquals(distribution.getCount(), 0, EPSILON); assertEquals(distribution.getSumOfSquareDeviations(), 0, EPSILON); assertArrayEquals(distribution.getBucketValues(), new long[LatencyDistribution.LATENCY_BUCKETS.length]); } @Test public void testOne() { distribution.recordLatency(1); assertEquals(distribution.getMean(), 1, EPSILON); assertEquals(distribution.getCount(), 1, EPSILON); assertEquals(distribution.getSumOfSquareDeviations(), 0, EPSILON); long[] expected = new long[LatencyDistribution.LATENCY_BUCKETS.length]; expected[2]++; assertArrayEquals(distribution.getBucketValues(), expected); } @Test public void testBatchRecord() { long[] latencies = {2, 7, 31, 67, 137}; LatencyDistribution control = new LatencyDistribution(); for (long lat : latencies) { int n = 29; distribution.recordBatchLatency(lat, n); for (int i = 0; i < n; i++) { control.recordLatency(lat); } } assertEquals(distribution.getMean(), control.getMean(), EPSILON); assertEquals(distribution.getCount(), control.getCount(), EPSILON); assertEquals(distribution.getSumOfSquareDeviations(), control.getSumOfSquareDeviations(), EPSILON); } @Test public void testMany() { for (int i = 0; i < 10; i++) { distribution.recordLatency((long) Math.pow(2, i)); } assertEquals(distribution.getMean(), 102.3, EPSILON); assertEquals(distribution.getCount(), 10, EPSILON); } @Test public void testCopy() { distribution.recordLatency(1); LatencyDistribution distributionCopy = distribution.copy(); assertEquals(distributionCopy.getMean(), 1, EPSILON); assertEquals(distributionCopy.getCount(), 1, EPSILON); assertEquals(distributionCopy.getSumOfSquareDeviations(), 0, EPSILON); long[] expected = new long[LatencyDistribution.LATENCY_BUCKETS.length]; expected[2]++; assertArrayEquals(distributionCopy.getBucketValues(), expected); } @Test public void testReset() { distribution.recordLatency(1); distribution.recordLatency(2); distribution.recordLatency(3); distribution.reset(); assertEquals(distribution.getMean(), 0, EPSILON); assertEquals(distribution.getCount(), 0, EPSILON); assertEquals(distribution.getSumOfSquareDeviations(), 0, EPSILON); assertArrayEquals(distribution.getBucketValues(), new long[LatencyDistribution.LATENCY_BUCKETS.length]); } }