package io.dropwizard.metrics.health.jvm;
import org.junit.Test;
import io.dropwizard.metrics.jvm.ThreadDeadlockDetector;
import io.dropwizard.metrics.health.HealthCheck;
import io.dropwizard.metrics.health.jvm.ThreadDeadlockHealthCheck;
import java.util.Collections;
import java.util.Set;
import java.util.TreeSet;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
public class ThreadDeadlockHealthCheckTest {
@Test
public void isHealthyIfNoThreadsAreDeadlocked() throws Exception {
final ThreadDeadlockDetector detector = mock(ThreadDeadlockDetector.class);
final ThreadDeadlockHealthCheck healthCheck = new ThreadDeadlockHealthCheck(detector);
when(detector.getDeadlockedThreads()).thenReturn(Collections.<String>emptySet());
assertThat(healthCheck.execute().isHealthy())
.isTrue();
}
@Test
public void isUnhealthyIfThreadsAreDeadlocked() throws Exception {
final Set<String> threads = new TreeSet<>();
threads.add("one");
threads.add("two");
final ThreadDeadlockDetector detector = mock(ThreadDeadlockDetector.class);
final ThreadDeadlockHealthCheck healthCheck = new ThreadDeadlockHealthCheck(detector);
when(detector.getDeadlockedThreads()).thenReturn(threads);
final HealthCheck.Result result = healthCheck.execute();
assertThat(result.isHealthy())
.isFalse();
assertThat(result.getMessage())
.isEqualTo("[one, two]");
}
@Test
public void automaticallyUsesThePlatformThreadBeans() throws Exception {
final ThreadDeadlockHealthCheck healthCheck = new ThreadDeadlockHealthCheck();
assertThat(healthCheck.execute().isHealthy())
.isTrue();
}
}