package io.prometheus.client; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertNotNull; import org.junit.Test; import org.junit.Before; public class SimpleCollectorTest { CollectorRegistry registry; Gauge metric; Gauge noLabels; @Before public void setUp() { registry = new CollectorRegistry(); metric = Gauge.build().name("labels").help("help").labelNames("l").register(registry); noLabels = Gauge.build().name("nolabels").help("help").register(registry); } private Double getValue(String labelValue) { return registry.getSampleValue("labels", new String[]{"l"}, new String[]{labelValue}); } private Double getValueNoLabels() { return registry.getSampleValue("nolabels"); } @Test(expected=IllegalArgumentException.class) public void testTooFewLabelsThrows() { metric.labels(); } @Test(expected=IllegalArgumentException.class) public void testNullLabelThrows() { metric.labels(new String[]{null}); } @Test(expected=IllegalArgumentException.class) public void testTooManyLabelsThrows() { metric.labels("a", "b"); } @Test public void testRemove() { metric.labels("a"); assertNotNull(getValue("a")); assertNull(getValue("b")); metric.labels("b").set(7); assertNotNull(getValue("a")); assertNotNull(getValue("b")); metric.remove("b"); assertNotNull(getValue("a")); assertNull(getValue("b")); // Brand new Child. metric.labels("b").inc(); assertEquals(1.0, getValue("b").doubleValue(), .001); } @Test public void testNoLabelsWorkAfterRemove() { noLabels.inc(1); assertEquals(getValueNoLabels(), 1.0, .001); noLabels.remove(); noLabels.inc(2); assertEquals(getValueNoLabels(), 2.0, .001); } @Test public void testClear() { assertNull(getValue("a")); metric.labels("a").set(7); assertNotNull(getValue("a")); metric.clear(); assertNull(getValue("a")); // Brand new Child. metric.labels("a").inc(); assertEquals(1.0, getValue("a").doubleValue(), .001); } @Test public void testNoLabelsWorkAfterClear() { noLabels.inc(1); assertEquals(getValueNoLabels(), 1.0, .001); noLabels.clear(); noLabels.inc(2); assertEquals(getValueNoLabels(), 2.0, .001); } @Test public void testNameIsConcatenated() { assertEquals("a_b_c", Gauge.build().name("c").subsystem("b").namespace("a").help("h").create().fullname); } @Test(expected=IllegalStateException.class) public void testNameIsRequired() { Gauge.build().help("h").create(); } @Test(expected=IllegalStateException.class) public void testHelpIsRequired() { Gauge.build().name("c").create(); } @Test(expected=IllegalArgumentException.class) public void testInvalidNameThrows() { Gauge.build().name("c'a").create(); } @Test(expected=IllegalArgumentException.class) public void testInvalidLabelNameThrows() { Gauge.build().name("a").labelNames("c:d").help("h").create(); } @Test(expected=IllegalArgumentException.class) public void testReservedLabelNameThrows() { Gauge.build().name("a").labelNames("__name__").help("h").create(); } @Test public void testSetChild() { metric.setChild(new Gauge.Child(){ public double get() { return 42; } }, "a"); assertEquals(42.0, getValue("a").doubleValue(), .001); } @Test public void testSetChildReturnsGauge() { Gauge g = metric.setChild(new Gauge.Child(){ public double get() { return 42; } }, "a"); } @Test public void testCreateReturnsGauge() { Gauge g = Gauge.build().name("labels").help("help").labelNames("l").create(); } }