Спрей и актер недетерминированные тесты
Привет, в начале я хотел бы извиниться за мой английский:)
Akka=2.3.6
распылить = 1.3.2
scalatest = 2.2.1
Я столкнулся со странным поведением маршрутов тэтинга, которое спрашивает актеров в директиве handleWith,
У меня есть маршрут с помощью handleWith
pathPrefix("firstPath") {
pathEnd {
get(complete("Hello from this api")) ~
post(handleWith { (data: Data) =>{ println("receiving data")
(dataCalculator ? data).collect {
case Success(_) =>
Right(Created -> "")
case throwable: MyInternalValidatationException =>
Left(BadRequest -> s"""{"${throwable.subject}" : "${throwable.cause}"}""")
}
}})
}
}
и простой субъект, который всегда отвечает, когда получает объект Data, и имеет собственный блок приема, заключенный в LoggingReceive, поэтому я должен видеть журналы, когда сообщение получает субъект
и я проверяю это с помощью (я думаю, простой код)
class SampleStarngeTest extends WordSpec with ThisAppTestBase with OneInstancePerTest
with routeTestingSugar {
val url = "/firstPath/"
implicit val routeTestTimeout = RouteTestTimeout(5 seconds)
def postTest(data: String) = Post(url).withJson(data) ~> routes
"posting" should {
"pass" when {
"data is valid and comes from the identified user" in {
postTest(correctData.copy(createdAt = System.currentTimeMillis()).asJson) ~> check {
print(entity)
status shouldBe Created
}
}
"report is valid and comes from the anonymous" in {
postTest(correctData.copy(createdAt = System.currentTimeMillis(), adid = "anonymous").asJson) ~> check {
status shouldBe Created
}
}
}
}
}
и поведение:
Когда я запускаю все тесты в пакете (используя Intellij Idea 14 Ultimate) или sbt test, я сталкиваюсь с одинаковыми результатами
одно выполнение -> все тесты пройдены
и следующий -> не все проходят, это, которые не проходят, я вижу:
1. Неудачный, потому что запрос не был ни выполнен, ни отклонен в течение Х секунд (Х до 60)
2. вывод системной консоли из маршрута от поста строки (handleWith { (data: Data) =>{ println("получение данных"), поэтому код в handleWith был выполнен
3. запрашивать исключение тайм-аута из кода маршрута, но не всегда (среди неудачных тестов)
4. нет логов от актера LoggingReceive, поэтому у актера нет шансов ответить
5. когда я запускаю тесты, результаты даже отличаются от предыдущих
Есть ли проблема с потоками? или тестовые модули, блокировка потоков внутри библиотек? или еще что? Я понятия не имею, почему это не работает:(