package io.prometheus.client.hotspot; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.mockito.Mockito.when; import com.sun.management.UnixOperatingSystemMXBean; import java.io.BufferedReader; import java.io.StringReader; import java.io.FileNotFoundException; import java.lang.management.RuntimeMXBean; import io.prometheus.client.CollectorRegistry; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; public class StandardExportsTest { static class StatusReaderTest extends StandardExports.StatusReader { BufferedReader procSelfStatusReader() throws FileNotFoundException { return new BufferedReader(new StringReader("Name: cat\nVmSize:\t5900 kB\nVmRSS:\t 360 kB\n")); } } UnixOperatingSystemMXBean osBean; RuntimeMXBean runtimeBean; @Before public void setUp() { osBean = Mockito.mock(UnixOperatingSystemMXBean.class); when(osBean.getName()).thenReturn("Linux"); when(osBean.getProcessCpuTime()).thenReturn(123L); when(osBean.getOpenFileDescriptorCount()).thenReturn(10L); when(osBean.getMaxFileDescriptorCount()).thenReturn(20L); runtimeBean = Mockito.mock(RuntimeMXBean.class); when(runtimeBean.getStartTime()).thenReturn(456L); } @Test public void testStandardExports() { CollectorRegistry registry = new CollectorRegistry(); new StandardExports(new StatusReaderTest(), osBean, runtimeBean).register(registry); assertEquals(123 / 1.0E9, registry.getSampleValue("process_cpu_seconds_total", new String[]{}, new String[]{}), .0000001); assertEquals(10, registry.getSampleValue("process_open_fds", new String[]{}, new String[]{}), .001); assertEquals(20, registry.getSampleValue("process_max_fds", new String[]{}, new String[]{}), .001); assertEquals(456 / 1.0E3, registry.getSampleValue("process_start_time_seconds", new String[]{}, new String[]{}), .0000001); assertEquals(5900 * 1024, registry.getSampleValue("process_virtual_memory_bytes", new String[]{}, new String[]{}), .001); assertEquals(360 * 1024, registry.getSampleValue("process_resident_memory_bytes", new String[]{}, new String[]{}), .001); } @Test public void testBrokenProcStatusReturnsOtherStats() { class StatusReaderBroken extends StandardExports.StatusReader { BufferedReader procSelfStatusReader() throws FileNotFoundException { return new BufferedReader(new StringReader("Name: cat\nVmSize:\n")); } } CollectorRegistry registry = new CollectorRegistry(); new StandardExports(new StatusReaderBroken(), osBean, runtimeBean).register(registry); assertEquals(123 / 1.0E9, registry.getSampleValue("process_cpu_seconds_total", new String[]{}, new String[]{}), .0000001); assertNull(registry.getSampleValue("process_resident_memory_bytes", new String[]{}, new String[]{})); } }