package io.dropwizard.metrics;
import com.codahale.metrics.MetricAttribute;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.io.Resources;
import io.dropwizard.configuration.YamlConfigurationFactory;
import io.dropwizard.jackson.Jackson;
import io.dropwizard.logging.BootstrapLogging;
import io.dropwizard.util.Duration;
import io.dropwizard.validation.BaseValidator;
import org.junit.Before;
import org.junit.Test;
import java.io.File;
import java.util.EnumSet;
import static org.assertj.core.api.Assertions.assertThat;
public class MetricsFactoryTest {
static {
BootstrapLogging.bootstrap();
}
private final ObjectMapper objectMapper = Jackson.newObjectMapper();
private final YamlConfigurationFactory<MetricsFactory> factory = new YamlConfigurationFactory<>(
MetricsFactory.class, BaseValidator.newValidator(), objectMapper, "dw");
private MetricsFactory config;
@Before
public void setUp() throws Exception {
objectMapper.getSubtypeResolver().registerSubtypes(ConsoleReporterFactory.class, CsvReporterFactory.class,
Slf4jReporterFactory.class);
this.config = factory.build(new File(Resources.getResource("yaml/metrics.yml").toURI()));
}
@Test
public void hasADefaultFrequency() throws Exception {
assertThat(config.getFrequency()).isEqualTo(Duration.seconds(10));
}
@Test
public void hasReporters() throws Exception {
CsvReporterFactory csvReporter = new CsvReporterFactory();
csvReporter.setFile(new File("metrics"));
assertThat(config.getReporters()).hasSize(3);
}
@Test
public void canReadExcludedAndIncludedAttributes() {
assertThat(config.getReporters()).hasSize(3);
final ReporterFactory reporterFactory = config.getReporters().get(0);
assertThat(reporterFactory).isInstanceOf(ConsoleReporterFactory.class);
final ConsoleReporterFactory consoleReporterFactory = (ConsoleReporterFactory) reporterFactory;
assertThat(consoleReporterFactory.getIncludesAttributes()).isEqualTo(EnumSet.of(
MetricAttribute.P50, MetricAttribute.P95, MetricAttribute.P98, MetricAttribute.P99));
assertThat(consoleReporterFactory.getExcludesAttributes()).isEqualTo(EnumSet.of(MetricAttribute.P98));
}
@Test
public void canReadDefaultExcludedAndIncludedAttributes() {
assertThat(config.getReporters()).hasSize(3);
final ReporterFactory reporterFactory = config.getReporters().get(1);
assertThat(reporterFactory).isInstanceOf(CsvReporterFactory.class);
final CsvReporterFactory csvReporterFactory = (CsvReporterFactory) reporterFactory;
assertThat(csvReporterFactory.getIncludesAttributes()).isEqualTo(EnumSet.allOf(MetricAttribute.class));
assertThat(csvReporterFactory.getExcludesAttributes()).isEmpty();
}
}