package io.dropwizard.metrics; import org.junit.Test; import io.dropwizard.metrics.Clock; import io.dropwizard.metrics.SlidingTimeWindowReservoir; import java.util.concurrent.TimeUnit; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; public class SlidingTimeWindowReservoirTest { private final Clock clock = mock(Clock.class); private final SlidingTimeWindowReservoir reservoir = new SlidingTimeWindowReservoir(10, TimeUnit.NANOSECONDS, clock); @Test public void storesMeasurementsWithDuplicateTicks() throws Exception { when(clock.getTick()).thenReturn(20L); reservoir.update(1); reservoir.update(2); assertThat(reservoir.getSnapshot().getValues()) .containsOnly(1, 2); } @Test public void boundsMeasurementsToATimeWindow() throws Exception { when(clock.getTick()).thenReturn(0L); reservoir.update(1); when(clock.getTick()).thenReturn(5L); reservoir.update(2); when(clock.getTick()).thenReturn(10L); reservoir.update(3); when(clock.getTick()).thenReturn(15L); reservoir.update(4); when(clock.getTick()).thenReturn(20L); reservoir.update(5); assertThat(reservoir.getSnapshot().getValues()) .containsOnly(4, 5); } }