package io.dropwizard.metrics; import org.junit.Before; import org.junit.Test; import io.dropwizard.metrics.MetricRegistry; import io.dropwizard.metrics.SharedMetricRegistries; import static org.assertj.core.api.Assertions.assertThat; import java.lang.reflect.Field; import java.lang.reflect.Modifier; public class SharedMetricRegistriesTest { @Before public void setUp() throws Exception { // Unset the defaultRegistryName field between tests for better isolation. final Field field = SharedMetricRegistries.class.getDeclaredField("defaultRegistryName"); field.setAccessible(true); final Field modfiers = Field.class.getDeclaredField("modifiers"); modfiers.setAccessible(true); modfiers.setInt(field, field.getModifiers() & ~Modifier.FINAL); field.set(null, null); SharedMetricRegistries.clear(); } @Test public void memorizesRegistriesByName() throws Exception { final MetricRegistry one = SharedMetricRegistries.getOrCreate("one"); final MetricRegistry two = SharedMetricRegistries.getOrCreate("one"); assertThat(one) .isSameAs(two); } @Test public void hasASetOfNames() throws Exception { SharedMetricRegistries.getOrCreate("one"); assertThat(SharedMetricRegistries.names()) .containsOnly("one"); } @Test public void removesRegistries() throws Exception { final MetricRegistry one = SharedMetricRegistries.getOrCreate("one"); SharedMetricRegistries.remove("one"); assertThat(SharedMetricRegistries.names()) .isEmpty(); final MetricRegistry two = SharedMetricRegistries.getOrCreate("one"); assertThat(two) .isNotSameAs(one); } @Test public void clearsRegistries() throws Exception { SharedMetricRegistries.getOrCreate("one"); SharedMetricRegistries.getOrCreate("two"); SharedMetricRegistries.clear(); assertThat(SharedMetricRegistries.names()) .isEmpty(); } @Test public void errorsWhenDefaultUnset() throws Exception { try { SharedMetricRegistries.getDefault(); } catch (final Exception e) { assertThat(e).isInstanceOf(IllegalStateException.class); assertThat(e.getMessage()).isEqualTo("Default registry name has not been set."); } } @Test public void createsDefaultRegistries() throws Exception { final String defaultName = "default"; final MetricRegistry registry = SharedMetricRegistries.setDefault(defaultName); assertThat(registry).isNotNull(); assertThat(SharedMetricRegistries.getDefault()).isEqualTo(registry); assertThat(SharedMetricRegistries.getOrCreate(defaultName)).isEqualTo(registry); } @Test public void errorsWhenDefaultAlreadySet() throws Exception { try { SharedMetricRegistries.setDefault("foobah"); SharedMetricRegistries.setDefault("borg"); } catch (final Exception e) { assertThat(e).isInstanceOf(IllegalStateException.class); assertThat(e.getMessage()).isEqualTo("Default metric registry name is already set."); } } @Test public void setsDefaultExistingRegistries() throws Exception { final String defaultName = "default"; final MetricRegistry registry = new MetricRegistry(); assertThat(SharedMetricRegistries.setDefault(defaultName, registry)).isEqualTo(registry); assertThat(SharedMetricRegistries.getDefault()).isEqualTo(registry); assertThat(SharedMetricRegistries.getOrCreate(defaultName)).isEqualTo(registry); } }