package io.graceland.metrics.graphite;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ServiceLoader;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import io.dropwizard.metrics.ReporterFactory;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@RunWith(PowerMockRunner.class)
@PrepareForTest(HostAwareGraphiteReporterFactory.class)
public class HostAwareGraphiteReporterFactoryTest {
private HostAwareGraphiteReporterFactory buildReporter(String hostName) throws UnknownHostException {
InetAddress localHost = mock(InetAddress.class);
when(localHost.getHostName()).thenReturn(hostName);
PowerMockito.mockStatic(InetAddress.class);
when(InetAddress.getLocalHost()).thenReturn(localHost);
return new HostAwareGraphiteReporterFactory();
}
@Test
public void prefix_replaces_host() throws UnknownHostException {
String hostName = "myhostname";
HostAwareGraphiteReporterFactory reporterFactory = buildReporter(hostName);
String prefix = "test.%s.this.out";
String expectedPrefix = "test." + hostName + ".this.out";
String prefix_missing = "test.this.out";
String expectedPrefix_missing = "test.this.out";
String prefix_solo = "%s";
String expectedPrefix_solo = hostName;
reporterFactory.setPrefix(prefix);
assertThat(reporterFactory.getPrefix(), is(expectedPrefix));
reporterFactory.setPrefix(prefix_missing);
assertThat(reporterFactory.getPrefix(), is(expectedPrefix_missing));
reporterFactory.setPrefix(prefix_solo);
assertThat(reporterFactory.getPrefix(), is(expectedPrefix_solo));
}
@Test
public void prefix_replaces_non_alphanumerics_with_underscores() throws UnknownHostException {
String hostName = "my.host.name-is_not a$number%123*2321";
String expectedHostName = "my_host_name_is_not_a_number_123_2321";
HostAwareGraphiteReporterFactory reporterFactory = buildReporter(hostName);
reporterFactory.setPrefix("%s");
assertThat(reporterFactory.getPrefix(), is(expectedHostName));
}
@Test
public void remove_double_dots() throws UnknownHostException {
HostAwareGraphiteReporterFactory reporterFactory = buildReporter("");
reporterFactory.setPrefix("before.%s.after..last");
assertThat(reporterFactory.getPrefix(), is("before.after.last"));
}
@Test(expected = IllegalArgumentException.class)
public void handles_poorly_formated_prefixes() throws UnknownHostException {
HostAwareGraphiteReporterFactory reporterFactory = buildReporter("hostName");
reporterFactory.setPrefix("before.%s.aft%er..last");
}
@Test
public void replaces_more_than_once() throws UnknownHostException {
HostAwareGraphiteReporterFactory reporterFactory = buildReporter("host");
reporterFactory.setPrefix("before.%s.after.%s.last");
assertThat(reporterFactory.getPrefix(), is("before.host.after.host.last"));
}
@Test
public void loaded_by_service_provider() {
boolean found = false;
for (ReporterFactory reporterFactory : ServiceLoader.load(ReporterFactory.class)) {
if (reporterFactory instanceof HostAwareGraphiteReporterFactory) {
found = true;
}
}
assertThat(found, is(true));
}
}