mardi 21 février 2017

Play tests with database: "Too many connections"

To have a database available in scalatest I use this extension of the default PlaySpec:

trait ResetDbSpec extends PlaySpec with BeforeAndAfterAll {
  lazy val appBuilder = new GuiceApplicationBuilder()
  lazy val injector = appBuilder.injector()
  lazy val databaseApi = injector.instanceOf[DBApi]

  override def beforeAll() = {
    Evolutions.applyEvolutions(databaseApi.database("default"))
  }

  override def afterAll() = {
    Evolutions.cleanupEvolutions(databaseApi.database("default"))
    databaseApi.database("default").shutdown()
  }
}

It applies database evolutions when the suite starts, and reverts them when the suite ends. A test then looks like

class ProjectsSpec extends ResetDbSpec with OneAppPerSuite { ...

After adding more tests like this, I hit a point where some tests that success when I run them alone, fail with this error:

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: "Too many connections"

As can be see in the code above, I tried to add the line

databaseApi.database("default").shutdown()

in afterAll() to mitigate that, but it had no effect. I tried to not run tests in parallel, but without success. Where is it that I open db connections without closing them, and where should I call shutdown()?

Aucun commentaire:

Enregistrer un commentaire