package io.pcp.parfait.dxm;
import io.pcp.parfait.dxm.semantics.Semantics;
import org.hamcrest.Matcher;
import org.junit.BeforeClass;
import org.junit.Test;
import static io.pcp.parfait.dxm.IdentifierSourceSet.DEFAULT_SET;
import static io.pcp.parfait.dxm.MmvVersion.MMV_VERSION1;
import static io.pcp.parfait.dxm.MmvVersion.MMV_VERSION2;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.core.Is.is;
import static tec.uom.se.AbstractUnit.ONE;
public class PcpMmvWriterIntegrationTest {
private static PcpClient pcpClient;
private static PcpMmvWriter pcpMmvWriterV1;
private static PcpMmvWriter pcpMmvWriterV2;
@BeforeClass
public static void setUp() throws Exception {
pcpClient = new PcpClient();
pcpMmvWriterV1 = new PcpMmvWriter("test1", DEFAULT_SET, MMV_VERSION1);
pcpMmvWriterV2 = new PcpMmvWriter("test2", DEFAULT_SET, MMV_VERSION2);
}
@Test
public void bothMmvVersionsShouldSupportAddingAMetric() throws Exception {
pcpMmvWriterV1.reset();
pcpMmvWriterV1.addMetric(MetricName.parse("v1.integer"), Semantics.COUNTER, ONE, 3);
pcpMmvWriterV1.start();
pcpMmvWriterV2.reset();
pcpMmvWriterV2.addMetric(MetricName.parse("v2.integer"), Semantics.COUNTER, ONE, 3);
pcpMmvWriterV2.start();
waitForReload();
assertMetric("mmv.v1.integer", is("3.000"));
assertMetric("mmv.v2.integer", is("3.000"));
}
@Test
public void mmvVersion2ShouldSupportMetricNamesOver63Characters() throws Exception {
pcpMmvWriterV2.reset();
pcpMmvWriterV2.addMetric(MetricName.parse("v2.metric.that.is.longer.than.63.characters.v2.metric.that.is.longer.than.63.characters"), Semantics.COUNTER, ONE, 10);
pcpMmvWriterV2.start();
waitForReload();
assertMetric("mmv.v2.metric.that.is.longer.than.63.characters.v2.metric.that.is.longer.than.63.characters", is("10.000"));
}
@Test
public void mmvVersion2ShouldSupportInstanceNamesOver63Characters() throws Exception {
pcpMmvWriterV2.reset();
pcpMmvWriterV2.addMetric(MetricName.parse("v2.integer[instance_name_over_63_characters_instance_name_over_63_characters_instance]"), Semantics.COUNTER, ONE, 11);
pcpMmvWriterV2.start();
waitForReload();
assertMetric("mmv.v2.integer[instance_name_over_63_characters_instance_name_over_63_characters_instance]", is("11.000"));
}
private void assertMetric(String metricName, Matcher<String> expectedValue) throws Exception {
String actual = pcpClient.getMetric(metricName);
assertThat(actual, expectedValue);
}
private void waitForReload() throws InterruptedException {
Thread.sleep(1000);
}
}