package org.springframework.cloud.netflix.metrics.servo;
import org.junit.Test;
import com.netflix.servo.annotations.DataSourceType;
import com.netflix.servo.monitor.AbstractMonitor;
import com.netflix.servo.monitor.MonitorConfig;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertThat;
public class DimensionalServoMetricNamingTests {
private DimensionalServoMetricNaming naming = new DimensionalServoMetricNaming();
@Test
public void vanillaServoMetricWorks() {
MonitorConfig config = MonitorConfig.builder("testMetric").build();
String name = naming.asHierarchicalName(new FixedValueMonitor<>(config, 0));
assertThat(name, is(equalTo("testMetric()")));
}
@Test
public void nameWithPeriodWorks() {
MonitorConfig config = MonitorConfig.builder("test.Metric").build();
String name = naming.asHierarchicalName(new FixedValueMonitor<>(config, 0));
assertThat(name, is(equalTo("test.Metric()")));
}
@Test
public void typeTagWorks() {
MonitorConfig config = MonitorConfig.builder("testMetric")
.withTag(DataSourceType.KEY, DataSourceType.COUNTER.getValue()).build();
String name = naming.asHierarchicalName(new FixedValueMonitor<>(config, 0));
assertThat(name, is(equalTo("testMetric(type=COUNTER)")));
}
@Test
public void instanceTagWorks() {
MonitorConfig config = MonitorConfig.builder("testMetric")
.withTag("instance", "instance0").build();
String name = naming.asHierarchicalName(new FixedValueMonitor<>(config, 0));
assertThat(name, is(equalTo("testMetric(instance=instance0)")));
}
@Test
public void statisticTagWorks() {
MonitorConfig config = MonitorConfig.builder("testMetric")
.withTag("statistic", "min").build();
String name = naming.asHierarchicalName(new FixedValueMonitor<>(config, 0));
assertThat(name, is(equalTo("testMetric(statistic=min)")));
}
@Test
public void allTagsWork() {
MonitorConfig config = MonitorConfig.builder("testMetric")
.withTag(DataSourceType.KEY, DataSourceType.COUNTER.getValue())
.withTag("instance", "instance0").withTag("statistic", "min").build();
String name = naming.asHierarchicalName(new FixedValueMonitor<>(config, 0));
assertThat(name,
is(equalTo("testMetric(instance=instance0,statistic=min,type=COUNTER)")));
}
private class FixedValueMonitor<T> extends AbstractMonitor<T> {
T value;
protected FixedValueMonitor(MonitorConfig config, T value) {
super(config);
this.value = value;
}
@Override
public T getValue(int pollerIndex) {
return value;
}
}
}