package io.dropwizard.metrics.jvm;
import org.junit.Before;
import org.junit.Test;
import io.dropwizard.metrics.jvm.BufferPoolMetricSet;
import io.dropwizard.metrics.Gauge;
import io.dropwizard.metrics.MetricName;
import javax.management.InstanceNotFoundException;
import javax.management.MBeanServer;
import javax.management.ObjectName;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class BufferPoolMetricSetTest {
private final MBeanServer mBeanServer = mock(MBeanServer.class);
private final BufferPoolMetricSet buffers = new BufferPoolMetricSet(mBeanServer);
private ObjectName mapped;
private ObjectName direct;
private final MetricName DIRECT = MetricName.build("direct");
private final MetricName MAPPED = MetricName.build("mapped");
private final MetricName DIRECT_COUNT = DIRECT.resolve("count");
private final MetricName DIRECT_CAPACITY = DIRECT.resolve("capacity");
private final MetricName DIRECT_USED = DIRECT.resolve("used");
private final MetricName MAPPED_COUNT = MAPPED.resolve("count");
private final MetricName MAPPED_CAPACITY = MAPPED.resolve("capacity");
private final MetricName MAPPED_USED = MAPPED.resolve("used");
@Before
public void setUp() throws Exception {
this.mapped = new ObjectName("java.nio:type=BufferPool,name=mapped");
this.direct = new ObjectName("java.nio:type=BufferPool,name=direct");
}
@Test
public void includesGaugesForDirectAndMappedPools() throws Exception {
assertThat(buffers.getMetrics().keySet())
.containsOnly(DIRECT_COUNT,
DIRECT_USED,
DIRECT_CAPACITY,
MAPPED_COUNT,
MAPPED_USED,
MAPPED_CAPACITY);
}
@Test
public void ignoresGaugesForObjectsWhichCannotBeFound() throws Exception {
when(mBeanServer.getMBeanInfo(mapped)).thenThrow(new InstanceNotFoundException());
assertThat(buffers.getMetrics().keySet())
.containsOnly(DIRECT_COUNT,
DIRECT_USED,
DIRECT_CAPACITY);
}
@Test
public void includesAGaugeForDirectCount() throws Exception {
final Gauge gauge = (Gauge) buffers.getMetrics().get(DIRECT_COUNT);
when(mBeanServer.getAttribute(direct, "Count")).thenReturn(100);
assertThat(gauge.getValue())
.isEqualTo(100);
}
@Test
public void includesAGaugeForDirectMemoryUsed() throws Exception {
final Gauge gauge = (Gauge) buffers.getMetrics().get(DIRECT_USED);
when(mBeanServer.getAttribute(direct, "MemoryUsed")).thenReturn(100);
assertThat(gauge.getValue())
.isEqualTo(100);
}
@Test
public void includesAGaugeForDirectCapacity() throws Exception {
final Gauge gauge = (Gauge) buffers.getMetrics().get(DIRECT_CAPACITY);
when(mBeanServer.getAttribute(direct, "TotalCapacity")).thenReturn(100);
assertThat(gauge.getValue())
.isEqualTo(100);
}
@Test
public void includesAGaugeForMappedCount() throws Exception {
final Gauge gauge = (Gauge) buffers.getMetrics().get(MAPPED_COUNT);
when(mBeanServer.getAttribute(mapped, "Count")).thenReturn(100);
assertThat(gauge.getValue())
.isEqualTo(100);
}
@Test
public void includesAGaugeForMappedMemoryUsed() throws Exception {
final Gauge gauge = (Gauge) buffers.getMetrics().get(MAPPED_USED);
when(mBeanServer.getAttribute(mapped, "MemoryUsed")).thenReturn(100);
assertThat(gauge.getValue())
.isEqualTo(100);
}
@Test
public void includesAGaugeForMappedCapacity() throws Exception {
final Gauge gauge = (Gauge) buffers.getMetrics().get(MAPPED_CAPACITY);
when(mBeanServer.getAttribute(mapped, "TotalCapacity")).thenReturn(100);
assertThat(gauge.getValue())
.isEqualTo(100);
}
}