Sequential Scalatest problem in Play 2.4:

197 views
Skip to first unread message

Dmitry Ivanov

unread,
Jan 21, 2016, 10:23:33 AM1/21/16
to play-framework
Hi!
Now I update my application to Play 2.4 and Slick 3.0. I have amount of tests that splitted into several Spec files. For now the tests start and work correctly only for first Spec. For second and furter ech test produce an error like next:
Task slick.backend.DatabaseComponent$DatabaseDef$$anon$2@24811ba9 rejected from java.util.concurrent.ThreadPoolExecutor@da0ebb1[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 5046].
Full error stack:
Task slick.backend.DatabaseComponent$DatabaseDef$$anon$2@24811ba9 rejected from java.util.concurrent.ThreadPoolExecutor@da0ebb1[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 5046]
java.util.concurrent.RejectedExecutionException: Task slick.backend.DatabaseComponent$DatabaseDef$$anon$2@24811ba9 rejected from java.util.concurrent.ThreadPoolExecutor@da0ebb1[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 5046]
at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2047)
at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:823)
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1369)
at scala.concurrent.impl.ExecutionContextImpl$$anon$1.execute(ExecutionContextImpl.scala:136)
at slick.backend.DatabaseComponent$DatabaseDef$class.runSynchronousDatabaseAction(DatabaseComponent.scala:230)
at slick.jdbc.JdbcBackend$DatabaseDef.runSynchronousDatabaseAction(JdbcBackend.scala:38)
at slick.backend.DatabaseComponent$DatabaseDef$class.runInContext(DatabaseComponent.scala:207)
at slick.jdbc.JdbcBackend$DatabaseDef.runInContext(JdbcBackend.scala:38)
at slick.backend.DatabaseComponent$DatabaseDef$class.runInternal(DatabaseComponent.scala:75)
at slick.jdbc.JdbcBackend$DatabaseDef.runInternal(JdbcBackend.scala:38)
at slick.backend.DatabaseComponent$DatabaseDef$class.run(DatabaseComponent.scala:72)
at slick.jdbc.JdbcBackend$DatabaseDef.run(JdbcBackend.scala:38)
at dao.UserDao$.queryByLogin(UserDao.scala:33)
at controllers.UserController$$anonfun$loginPost$1$$anonfun$apply$4.apply(UserController.scala:85)
at controllers.UserController$$anonfun$loginPost$1$$anonfun$apply$4.apply(UserController.scala:83)
at play.api.data.Form.fold(Form.scala:139)
at controllers.UserController$$anonfun$loginPost$1.apply(UserController.scala:80)
at controllers.UserController$$anonfun$loginPost$1.apply(UserController.scala:79)
at play.api.mvc.Action$.invokeBlock(Action.scala:533)
at play.api.mvc.Action$.invokeBlock(Action.scala:530)
at play.api.mvc.ActionBuilder$$anon$1.apply(Action.scala:493)
at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4$$anonfun$apply$5.apply(Action.scala:105)
at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4$$anonfun$apply$5.apply(Action.scala:105)
at play.utils.Threads$.withContextClassLoader(Threads.scala:21)
at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4.apply(Action.scala:104)
at play.api.mvc.Action$$anonfun$apply$1$$anonfun$apply$4.apply(Action.scala:103)
at scala.Option.map(Option.scala:146)
at play.api.mvc.Action$$anonfun$apply$1.apply(Action.scala:103)
at play.api.mvc.Action$$anonfun$apply$1.apply(Action.scala:96)
at play.api.libs.iteratee.Iteratee$$anonfun$mapM$1.apply(Iteratee.scala:524)
at play.api.libs.iteratee.Iteratee$$anonfun$mapM$1.apply(Iteratee.scala:524)
at play.api.libs.iteratee.Iteratee$$anonfun$flatMapM$1.apply(Iteratee.scala:560)
at play.api.libs.iteratee.Iteratee$$anonfun$flatMapM$1.apply(Iteratee.scala:560)
at play.api.libs.iteratee.Iteratee$$anonfun$flatMap$1$$anonfun$apply$14.apply(Iteratee.scala:537)
at play.api.libs.iteratee.Iteratee$$anonfun$flatMap$1$$anonfun$apply$14.apply(Iteratee.scala:537)
at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24)
at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24)
at akka.dispatch.TaskInvocation.run(AbstractDispatcher.scala:40)
at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:397)
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339)
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)

My library dependencies from build.sbt:

libraryDependencies ++= Seq(
  cache,
  ws,
  "com.typesafe.play"         % "play_2.11"              % "2.4.6",
  "com.typesafe.play"         %% "anorm"                 % "2.4.0",
  "com.typesafe.slick"        %% "slick"                 % "3.1.1",
  "com.typesafe.play"         %% "play-slick"            % "1.1.1",
  "com.typesafe.play"         %% "play-slick-evolutions" % "1.1.1",
  "org.slf4j"                 % "slf4j-nop"              % "1.6.4",
  "org.mindrot"               % "jbcrypt"                % "0.3m",
  "joda-time"                 % "joda-time"              % "2.7",
  "org.joda"                  % "joda-convert"           % "1.7",
  "com.github.tototoshi"      %% "slick-joda-mapper"     % "2.1.0",
  "com.typesafe.play"         %% "play-mailer"           % "4.0.0-M1",
  "io.strongtyped"            %% "active-slick"          % "0.3.3",
  "postgresql"                % "postgresql"             % "9.1-901.jdbc4",
  "org.apache.pdfbox"         % "pdfbox"                 % "1.8.9",
  "com.opencsv"               % "opencsv"                % "3.5",
  "be.objectify"              %% "deadbolt-scala"        % "2.4.2",
  "ch.qos.logback"            % "logback-classic"        % "1.1.2",
  "org.scalatest"             %% "scalatest"             % "2.2.5"    % "test",
  "org.scalatestplus"         %% "play"                  % "1.4.0-M3" % "test",
  "org.scalacheck"            %% "scalacheck"            % "1.12.4"   % "test",
  "org.specs2"                %% "specs2-core"           % "3.0"      % "test",
  "com.h2database"            % "h2"                     % "1.4.185"
)

Also header of PlaySpec:

package fixture

import java.io.ByteArrayInputStream
import models._
import play.api.Play
import play.api.db.slick.{DatabaseConfigProvider, HasDatabaseConfig}
import slick.driver.JdbcProfile
import slick.driver.PostgresDriver.api._
import akka.util.Timeout
import org.apache.pdfbox.cos.COSDocument
import org.apache.pdfbox.pdfparser.PDFParser
import org.apache.pdfbox.pdmodel.PDDocument
import org.apache.pdfbox.util.PDFTextStripper
import org.scalatest._
import org.scalatestplus.play.OneAppPerSuite
import play.api.mvc.Result
import play.api.test.FakeRequest
import play.api.test.Helpers._
import dao._
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.Future

trait PlaySpec extends WordSpec
  with OneAppPerSuite
  with SequentialNestedSuiteExecution
  with Matchers
  with OptionValues
  with HasDatabaseConfig[JdbcProfile]
  with ActivityDatabaseModule {

  protected lazy val dbConfig = DatabaseConfigProvider.get[JdbcProfile](Play.current)
  import driver.api._
........................

Also headers of first Spec (which works correctly):

package controllers

import slick.driver.PostgresDriver.api._
import fixture.PlaySpec
import play.api.db.slick._
import play.api.i18n.Messages
import play.api.i18n.Messages.Implicits._
import play.api.test.FakeRequest
import play.api.test.Helpers._
import scala.language.implicitConversions
import scala.concurrent.ExecutionContext.Implicits.global

class SchoolAdminContactSpec extends PlaySpec {

  "School Admin Contact Controller" should {

    "respond to login and GET activities list for contact by SchoolAdmin" in 
........


and header of second Spec (which fails with mentioned error):

package controllers

import fixture.PlaySpec
import play.api.Play
import play.api.db.slick.DatabaseConfigProvider
import play.api.test.FakeRequest
import play.api.test.Helpers._
import slick.driver.JdbcProfile

import scala.language.implicitConversions

class SchoolAdminControllerSpec extends PlaySpec {

  override lazy val dbConfig = DatabaseConfigProvider.get[JdbcProfile](Play.current)

  "School Admin Controller" should {

    "respond to admin action for logged admin of main center" in {
.......


Thanks for any advise!

Sumit Paliwal

unread,
Feb 9, 2016, 2:40:23 AM2/9/16
to play-framework
I came across the same issue and in my case, the above answers did not work out.
My Solution -

    implicit val app = new FakeApplication(additionalConfiguration = inMemoryDatabase())
    Play.start(app)

Add above code in your first test case and don't add Play.stop(app). As all the test cases are already refering the first application, it should not be terminated. This worked for me.

GMail - Dmity Ivanov

unread,
Feb 15, 2016, 4:41:06 AM2/15/16
to Sumit Paliwal
Sumit!
Thanks for you help!
Sorry, but I can't check your solution now.



--
You received this message because you are subscribed to a topic in the Google Groups "play-framework" group.
To unsubscribe from this topic, visit
https://groups.google.com/d/topic/play-framework/iNHsp_dHNo4/unsubscribe.
To unsubscribe from this group and all its topics, send an email to
play-framewor...@googlegroups.com.
To view this discussion on the web visit
https://groups.google.com/d/msgid/play-framework/a93fd44f-34ac-48b5-ad32-0d806de6abc7%40googlegroups.com.
For more options, visit
https://groups.google.com/d/optout.




--
С уважением,
GMail                          
mailto:dmitry.iv...@gmail.com

Christian Schmitt

unread,
Feb 15, 2016, 5:45:11 AM2/15/16
to play-framework
class SchoolAdminControllerSpec extends PlaySpec { should be class SchoolAdminControllerSpec extends PlaySpec with OneAppPerTest {
--
С уважением,
GMail                          
mailto:dmitr...@gmail.com
Reply all
Reply to author
Forward
0 new messages