package io.pcp.parfait.jmx; import io.pcp.parfait.MonitorableRegistry; import io.pcp.parfait.MonitoredValue; import junit.framework.TestCase; import javax.management.openmbean.CompositeData; import java.io.IOException; public class JmxViewTest extends TestCase { private MonitoredValue<Boolean> booleanValue = null; private MonitoredValue<Integer> intValue = null; private MonitoredValue<Long> longValue = null; private MonitoredValue<Double> doubleValue = null; private MonitoredValue<String> stringValue = null; private MonitorableRegistry registry = new MonitorableRegistry(); private JmxView jmx = null; public JmxViewTest() { } public void setUp() { booleanValue = new MonitoredValue<Boolean>("boolean.value", "boolean.value.desc", registry, true); intValue = new MonitoredValue<Integer>("int.value", "int.value.desc", registry, 1); longValue = new MonitoredValue<Long>("long.value", "long.value.desc", registry, 1l); doubleValue = new MonitoredValue<Double>("double.value", "double.value.desc", registry, 1d); stringValue = new MonitoredValue<String>("string.value", "string.value.desc", registry, "!"); jmx = new JmxView(); } public void tearDown() { jmx.stopMonitoring(registry.getMonitorables()); } public void testSupportsAllTypes() throws IOException, InterruptedException { jmx.startMonitoring(registry.getMonitorables()); checkDataValues(); booleanValue.set(false); checkDataValues(); booleanValue.set(true); checkDataValues(); intValue.set(0); checkDataValues(); intValue.set(Integer.MAX_VALUE); checkDataValues(); intValue.set(Integer.MIN_VALUE); checkDataValues(); intValue.set(1234567890); checkDataValues(); longValue.set(0l); checkDataValues(); longValue.set(Long.MAX_VALUE); checkDataValues(); longValue.set(Long.MIN_VALUE); checkDataValues(); longValue.set(1234567891012345679l); checkDataValues(); doubleValue.set(0d); checkDataValues(); doubleValue.set(Double.MAX_VALUE); checkDataValues(); doubleValue.set(Double.MIN_VALUE); checkDataValues(); doubleValue.set(Double.NEGATIVE_INFINITY); checkDataValues(); doubleValue.set(Double.POSITIVE_INFINITY); checkDataValues(); doubleValue.set(Double.NaN); checkDataValues(); doubleValue.set(1234567891.012345679d); checkDataValues(); stringValue.set(""); checkDataValues(); stringValue.set(createString(500)); checkDataValues(); } private String createString(int length) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < length; i++) { sb.append(Math.max(1, i & 255)); } return sb.toString(); } private void checkDataValues() { CompositeData data = jmx.getExposedMetrics(); assertEquals(booleanValue.get(), data.get("boolean.value")); assertEquals(doubleValue.get(), data.get("double.value")); assertEquals((int) intValue.get(), data.get("int.value")); assertEquals((long) longValue.get(), data.get("long.value")); assertEquals(stringValue.get(), data.get("string.value")); } }