/** * Copyright 2015 Netflix, 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.netflix.spectator.sandbox; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; import java.util.concurrent.TimeUnit; @RunWith(JUnit4.class) public class BucketFunctionsTest { @Test public void age60s() { BucketFunction f = BucketFunctions.age(60, TimeUnit.SECONDS); Assert.assertEquals("future", f.apply(TimeUnit.SECONDS.toNanos(-1))); Assert.assertEquals("07s", f.apply(TimeUnit.SECONDS.toNanos(1))); Assert.assertEquals("07s", f.apply(TimeUnit.SECONDS.toNanos(6))); Assert.assertEquals("07s", f.apply(TimeUnit.SECONDS.toNanos(7))); Assert.assertEquals("15s", f.apply(TimeUnit.SECONDS.toNanos(10))); Assert.assertEquals("30s", f.apply(TimeUnit.SECONDS.toNanos(20))); Assert.assertEquals("30s", f.apply(TimeUnit.SECONDS.toNanos(30))); Assert.assertEquals("60s", f.apply(TimeUnit.SECONDS.toNanos(42))); Assert.assertEquals("60s", f.apply(TimeUnit.SECONDS.toNanos(60))); Assert.assertEquals("old", f.apply(TimeUnit.SECONDS.toNanos(61))); } @Test public void age60sBiasOld() { BucketFunction f = BucketFunctions.ageBiasOld(60, TimeUnit.SECONDS); Assert.assertEquals("future", f.apply(TimeUnit.SECONDS.toNanos(-1))); Assert.assertEquals("30s", f.apply(TimeUnit.SECONDS.toNanos(1))); Assert.assertEquals("30s", f.apply(TimeUnit.SECONDS.toNanos(6))); Assert.assertEquals("30s", f.apply(TimeUnit.SECONDS.toNanos(7))); Assert.assertEquals("30s", f.apply(TimeUnit.SECONDS.toNanos(10))); Assert.assertEquals("30s", f.apply(TimeUnit.SECONDS.toNanos(20))); Assert.assertEquals("30s", f.apply(TimeUnit.SECONDS.toNanos(30))); Assert.assertEquals("45s", f.apply(TimeUnit.SECONDS.toNanos(42))); Assert.assertEquals("52s", f.apply(TimeUnit.SECONDS.toNanos(48))); Assert.assertEquals("60s", f.apply(TimeUnit.SECONDS.toNanos(59))); Assert.assertEquals("60s", f.apply(TimeUnit.SECONDS.toNanos(60))); Assert.assertEquals("old", f.apply(TimeUnit.SECONDS.toNanos(61))); } @Test public void latency100ms() { BucketFunction f = BucketFunctions.latency(100, TimeUnit.MILLISECONDS); Assert.assertEquals("negative_latency", f.apply(TimeUnit.MILLISECONDS.toNanos(-1))); Assert.assertEquals("012ms", f.apply(TimeUnit.MILLISECONDS.toNanos(1))); Assert.assertEquals("025ms", f.apply(TimeUnit.MILLISECONDS.toNanos(13))); Assert.assertEquals("025ms", f.apply(TimeUnit.MILLISECONDS.toNanos(25))); Assert.assertEquals("100ms", f.apply(TimeUnit.MILLISECONDS.toNanos(99))); Assert.assertEquals("slow", f.apply(TimeUnit.MILLISECONDS.toNanos(101))); } @Test public void latency100msBiasSlow() { BucketFunction f = BucketFunctions.latencyBiasSlow(100, TimeUnit.MILLISECONDS); Assert.assertEquals("negative_latency", f.apply(TimeUnit.MILLISECONDS.toNanos(-1))); Assert.assertEquals("050ms", f.apply(TimeUnit.MILLISECONDS.toNanos(1))); Assert.assertEquals("050ms", f.apply(TimeUnit.MILLISECONDS.toNanos(13))); Assert.assertEquals("050ms", f.apply(TimeUnit.MILLISECONDS.toNanos(25))); Assert.assertEquals("075ms", f.apply(TimeUnit.MILLISECONDS.toNanos(74))); Assert.assertEquals("075ms", f.apply(TimeUnit.MILLISECONDS.toNanos(75))); Assert.assertEquals("100ms", f.apply(TimeUnit.MILLISECONDS.toNanos(99))); Assert.assertEquals("slow", f.apply(TimeUnit.MILLISECONDS.toNanos(101))); } @Test public void latency3s() { BucketFunction f = BucketFunctions.latency(3, TimeUnit.SECONDS); Assert.assertEquals("negative_latency", f.apply(TimeUnit.MILLISECONDS.toNanos(-1))); Assert.assertEquals("0375ms", f.apply(TimeUnit.MILLISECONDS.toNanos(25))); Assert.assertEquals("0750ms", f.apply(TimeUnit.MILLISECONDS.toNanos(740))); Assert.assertEquals("1500ms", f.apply(TimeUnit.MILLISECONDS.toNanos(1000))); Assert.assertEquals("3000ms", f.apply(TimeUnit.MILLISECONDS.toNanos(1567))); Assert.assertEquals("slow", f.apply(TimeUnit.MILLISECONDS.toNanos(3001))); } }