package de.otto.edison.metrics.load;
import com.codahale.metrics.MetricRegistry;
import com.codahale.metrics.Timer;
import de.otto.edison.metrics.load.LoadDetector.Status;
import org.junit.Before;
import org.junit.Test;
import java.util.TreeMap;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.is;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class MetricsTimerStrategyTest {
private MetricRegistry metricRegistry;
private MetricsTimerStrategy strategy;
@Before
public void setUp() {
metricRegistry = mock(MetricRegistry.class);
MetricsLoadProperties properties = new MetricsLoadProperties();
properties.setMinThreshold(10.0d);
properties.setMaxThreshold(25.0d);
strategy = new MetricsTimerStrategy();
strategy.initialize(metricRegistry, properties);
}
@Test
public void thatStatusIdle() throws Exception {
initializeMetricRegistry(metricRegistry, 8.0d);
assertThat(strategy.getStatus(), is(Status.IDLE));
}
@Test
public void thatStatusBalance() throws Exception {
initializeMetricRegistry(metricRegistry, 12.0d);
assertThat(strategy.getStatus(), is(Status.BALANCED));
}
@Test
public void thatStatusOverload() throws Exception {
initializeMetricRegistry(metricRegistry, 42.0d);
assertThat(strategy.getStatus(), is(Status.OVERLOAD));
}
// ~~
private static void initializeMetricRegistry(MetricRegistry metricRegistry, double counterValue) {
Timer timer = mock(Timer.class);
when(timer.getOneMinuteRate()).thenReturn(counterValue);
when(metricRegistry.getTimers(any())).thenReturn(new TreeMap<String, Timer>() {{
put("my.counter", timer);
}});
when(metricRegistry.timer("my.counter")).thenReturn(timer);
}
}