package io.dropwizard.metrics.jvm;
import org.junit.Test;
import io.dropwizard.metrics.jvm.FileDescriptorRatioGauge;
import javax.management.ObjectName;
import java.lang.management.ManagementFactory;
import java.lang.management.OperatingSystemMXBean;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assume.assumeTrue;
import static org.mockito.Mockito.mock;
@SuppressWarnings("UnusedDeclaration")
public class FileDescriptorRatioGaugeTest {
private final OperatingSystemMXBean os = new OperatingSystemMXBean() {
@Override
public String getName() {
return null;
}
@Override
public String getArch() {
return null;
}
@Override
public String getVersion() {
return null;
}
@Override
public int getAvailableProcessors() {
return 0;
}
@Override
public double getSystemLoadAverage() {
return 0;
}
// these duplicate methods from UnixOperatingSystem
private long getOpenFileDescriptorCount() {
return 10;
}
private long getMaxFileDescriptorCount() {
return 100;
}
// overridden on Java 1.7; random crap on Java 1.6
@Override
public ObjectName getObjectName() {
return null;
}
};
private final FileDescriptorRatioGauge gauge = new FileDescriptorRatioGauge(os);
@Test
public void calculatesTheRatioOfUsedToTotalFileDescriptors() throws Exception {
assertThat(gauge.getValue())
.isEqualTo(0.1);
}
@Test
public void validateFileDescriptorRatioPresenceOnNixPlatforms() throws Exception {
OperatingSystemMXBean osBean = ManagementFactory.getOperatingSystemMXBean();
assumeTrue(osBean instanceof com.sun.management.UnixOperatingSystemMXBean);
assertThat(new FileDescriptorRatioGauge().getValue())
.isGreaterThanOrEqualTo(0.0)
.isLessThanOrEqualTo(1.0);
}
@Test
public void returnsNaNWhenTheInformationIsUnavailable() throws Exception {
assertThat(new FileDescriptorRatioGauge(mock(OperatingSystemMXBean.class)).getValue())
.isNaN();
}
}