package io.dropwizard.jdbi; import com.codahale.metrics.health.HealthCheck; import io.dropwizard.util.Duration; import org.junit.Test; import org.mockito.Mockito; import org.skife.jdbi.v2.DBI; import org.skife.jdbi.v2.Handle; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; public class DBIHealthCheckTest { @Test public void testItTimesOutProperly() throws Exception { String validationQuery = "select 1"; DBI dbi = mock(DBI.class); Handle handle = mock(Handle.class); when(dbi.open()).thenReturn(handle); Mockito.doAnswer(invocation -> { try { TimeUnit.SECONDS.sleep(10); } catch (Exception ignored) { } return null; }).when(handle).execute(validationQuery); ExecutorService executorService = Executors.newSingleThreadExecutor(); DBIHealthCheck dbiHealthCheck = new DBIHealthCheck(executorService, Duration.milliseconds(5), dbi, validationQuery); HealthCheck.Result result = dbiHealthCheck.check(); executorService.shutdown(); assertThat("is unhealthy", false, is(result.isHealthy())); } }