// @Test public void testConnectionCloseBlocking() throws SQLException { HikariConfig config = new HikariConfig(); config.setMinimumIdle(0); config.setMaximumPoolSize(1); config.setConnectionTimeout(1500); config.setDataSource(new CustomMockDataSource()); long start = ClockSource.INSTANCE.currentTime(); try (HikariDataSource ds = new HikariDataSource(config)) { Connection connection = ds.getConnection(); connection.close(); // Hikari only checks for validity for connections with lastAccess > 1000 ms so we sleep for // 1001 ms to force // Hikari to do a connection validation which will fail and will trigger the connection to be // closed UtilityElf.quietlySleep(1100L); shouldFail = true; // on physical connection close we sleep 2 seconds connection = ds.getConnection(); Assert.assertTrue( "Waited longer than timeout", (ClockSource.INSTANCE.elapsedMillis(start) < config.getConnectionTimeout())); } catch (SQLException e) { Assert.assertTrue( "getConnection failed because close connection took longer than timeout", (ClockSource.INSTANCE.elapsedMillis(start) < config.getConnectionTimeout())); } }
/** {@inheritDoc} */ @Override public String toString() { return String.format( "%s (created %s, last release %dms ago, %s)", connection, formatDateTime(creationTime), ClockSource.INSTANCE.elapsedMillis(lastAccess), stateToString()); }