Fix intermittent failure of inMemoryDerbyIsShutdown

This commit is contained in:
Andy Wilkinson 2019-09-13 20:12:22 +01:00
parent 419f92d381
commit 35ad5cd011
1 changed files with 18 additions and 1 deletions

View File

@ -22,6 +22,8 @@ import java.util.Properties;
import javax.sql.DataSource;
import com.zaxxer.hikari.HikariDataSource;
import com.zaxxer.hikari.HikariPoolMXBean;
import org.apache.derby.jdbc.EmbeddedDriver;
import org.junit.After;
import org.junit.Before;
@ -122,8 +124,23 @@ public class DevToolsPooledDataSourceAutoConfigurationTests extends AbstractDevT
ConfigurableApplicationContext context = createContext("org.apache.derby.jdbc.EmbeddedDriver",
"jdbc:derby:memory:test;create=true", DataSourceAutoConfiguration.class,
DataSourceSpyConfiguration.class);
JdbcTemplate jdbc = new JdbcTemplate(context.getBean(DataSource.class));
HikariDataSource dataSource = context.getBean(HikariDataSource.class);
JdbcTemplate jdbc = new JdbcTemplate(dataSource);
jdbc.execute("SELECT 1 FROM SYSIBM.SYSDUMMY1");
HikariPoolMXBean pool = dataSource.getHikariPoolMXBean();
// Prevent a race between Hikari's initialization and Derby shutdown
long end = System.currentTimeMillis() + 30000;
while (pool.getIdleConnections() != dataSource.getMinimumIdle()) {
if (System.currentTimeMillis() >= end) {
throw new IllegalStateException("DataSource did not become idle within 30 seconds");
}
try {
Thread.sleep(100);
}
catch (InterruptedException ex) {
Thread.currentThread().interrupt();
}
}
context.close();
// Connect should fail as DB no longer exists
assertThatExceptionOfType(SQLException.class)