Функциональный тест Playframework java.util.concurrent.TimeoutException - PullRequest
2 голосов
/ 15 ноября 2011

Я продолжаю получать

java.util.concurrent.TimeoutException

при запуске своих функциональных тестов с тех пор, как я перешел на postgres из mem db.

    Http.Response response = GET("/services/names/");
    assertIsOk(response);

Сообщение об полной ошибке

java.lang.RuntimeException: java.util.concurrent.TimeoutException
    at play.test.FunctionalTest.makeRequest(FunctionalTest.java:291)
    at play.test.FunctionalTest.makeRequest(FunctionalTest.java:297)
    at play.test.FunctionalTest.GET(FunctionalTest.java:100)
    at play.test.FunctionalTest.GET(FunctionalTest.java:54)
    at controllers.ImagesTest.shouldReturnListOfImages(ImagesTest.java:25)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
    at play.test.PlayJUnitRunner$StartPlay$2$1.evaluate(PlayJUnitRunner.java:98)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
    at play.test.PlayJUnitRunner.run(PlayJUnitRunner.java:48)
    at org.junit.runners.Suite.runChild(Suite.java:128)
    at org.junit.runners.Suite.runChild(Suite.java:24)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:157)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:136)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:117)
    at play.test.TestEngine.run(TestEngine.java:101)
    at controllers.TestRunner.run(TestRunner.java:67)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:546)
    at play.mvc.ActionInvoker.invoke(ActionInvoker.java:500)
    at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:476)
    at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:471)
    at play.mvc.ActionInvoker.invoke(ActionInvoker.java:159)
    at play.server.PlayHandler$NettyInvocation.execute(PlayHandler.java:220)
    at play.Invoker$Invocation.run(Invoker.java:265)
    at play.server.PlayHandler$NettyInvocation.run(PlayHandler.java:200)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:680)
Caused by: java.util.concurrent.TimeoutException
    at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:228)
    at java.util.concurrent.FutureTask.get(FutureTask.java:91)
    at play.test.FunctionalTest.makeRequest(FunctionalTest.java:278)

Ответы [ 3 ]

2 голосов
/ 07 декабря 2011

Вы находитесь в тупике: транзакция, в которой выполняется тест, и транзакция, в которой выполняется действие, являются противоречивыми, как описано в примечаниях к выпуску 1.2 .К сожалению, вы не можете использовать уровень изоляции READ UNCOMMITED в PostgreSQL, так как даже если вы укажете его с помощью SET TRANSACTION, , уровень изоляции транзакций все равно будет READ COMMITTED

Что вы можетеdo - убедиться, что транзакция в тестовом коде зафиксирована до запуска транзакции в действии, которое вызывает тестовый код.Например,

@Test
public void testSomething() {
   Fixtures.loadModels("models.yml");
   JPA.em().getTransaction().commit();

  // Call a controller
}

Альтернативой является запуск тестов с использованием базы данных в памяти.

1 голос
/ 25 ноября 2011

Функциональные тесты имеют встроенный тайм-аут в 30 секунд для каждого запроса (см. FunctionalTest.java:278 в Play 1.2.3). Может быть, ваш тест длится так долго на postgres?

0 голосов
/ 15 ноября 2011

Возможно, вам потребуется увеличить размер пула потоков.По умолчанию тесты выполняются в режиме DEV, а режим DEV имеет размер пула потоков 1. Найдите эту строку в вашем application.conf:

play.pool = 1

Посмотрите, поможет ли увеличение этого значения.

...