We are using latest stable of scalatestplus-play in our project and quite happy with this. All tests build locally but when we move over to travis where we have to override timeouts to be able to run the tests the problem starts.
Travis specific configuration for running h2database in slick with OneAppPerSuite trait:
def inMemoryDatabaseConfig(evolve:String = "enabled"):Map[String, Any] = Map.apply (
"slick.dbs.default.driver" -> "slick.driver.H2Driver$",
"slick.dbs.default.connectionTimeout" -> "20000",
"slick.dbs.default.loginTimeout" -> "20000",
"slick.dbs.default.socketTimeout" -> "20000",
"slick.dbs.default.db.driver" -> "org.h2.Driver",
"slick.dbs.default.connectionTestQuery" -> "SELECT 1",
"slick.dbs.default.db.url" -> "jdbc:h2:mem:play-test",
"slick.dbs.default.leakDetectionThreshold" -> "5000",
"evolutionplugin" -> evolve
)
implicit override lazy val app = new GuiceApplicationBuilder().configure(PlayTestDefaults.inMemoryDatabaseConfig()).build()
We keep getting random timeouts around 1 seconds when running in Travis CI:
[info] - com.zaxxer.hikari.HikariDataSource - HikariCP pool db is starting.
[info] Exception encountered when attempting to run a suite with class name: ActorUnitTest *** ABORTED ***
[info] java.sql.SQLTimeoutException: Timeout after 1000ms of waiting for a connection.
[info] at com.zaxxer.hikari.pool.BaseHikariPool.getConnection(BaseHikariPool.java:227)
[info] at com.zaxxer.hikari.pool.BaseHikariPool.getConnection(BaseHikariPool.java:182)
[info] at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:93)
[info] at slick.jdbc.hikaricp.HikariCPJdbcDataSource.createConnection(HikariCPJdbcDataSource.scala:12)
[info] at play.api.db.slick.evolutions.internal.DBApiAdapter$DatabaseAdapter.getConnection(DBApiAdapter.scala:57)
[info] at play.api.db.slick.evolutions.internal.DBApiAdapter$DatabaseAdapter.getConnection(DBApiAdapter.scala:60)
[info] at play.api.db.evolutions.DatabaseEvolutions.databaseEvolutions(EvolutionsApi.scala:119)
[info] at play.api.db.evolutions.DatabaseEvolutions.scripts(EvolutionsApi.scala:97)
[info] at play.api.db.evolutions.DatabaseEvolutions.scripts(EvolutionsApi.scala:112)
[info] at play.api.db.evolutions.DefaultEvolutionsApi.scripts(EvolutionsApi.scala:77)
[info] ...
Not sure why this is happening, but it seems to be PlaySpec OneAppPerSuite not closing connections fast enough so the tests are able to run through. And we cant seem to set the timeouts to override the defaults.