package com.bizo.asperatus.rates; import static org.mockito.Matchers.anyDouble; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.List; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import org.junit.AfterClass; import org.junit.Test; import com.bizo.asperatus.model.Dimension; import com.bizo.asperatus.model.Unit; import com.bizo.asperatus.tracker.MetricTracker; import com.google.common.collect.ImmutableList; public final class AsperatusRateTrackerSchedulerTest { private static final ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); @AfterClass public static void tearDownClass() throws Exception { executor.shutdownNow(); } private final MetricTracker metricTracker = mock(MetricTracker.class); private final RateTracker rateTracker = mock(RateTracker.class); private final String metricName = "metricName"; private final List<Dimension> dimensions = ImmutableList.of(new Dimension("a", "1")); @Test public void test() throws Exception { when(rateTracker.getRateAndResetPeriod()).thenReturn(100.0); final AsperatusRateTrackerScheduler scheduler = new AsperatusRateTrackerScheduler(metricTracker, metricName, dimensions, rateTracker, executor); scheduler.setFrequency(100); scheduler.setFrequencyUnit(TimeUnit.MILLISECONDS); scheduler.start(); Thread.sleep(1050); scheduler.stop(); verify(rateTracker, times(10)).getRateAndResetPeriod(); verify(metricTracker, times(10)).track(eq(metricName), anyDouble(), eq(Unit.CountSecond), eq(dimensions)); } }