by shigemk2

当面は技術的なことしか書かない

PR Spray#1086

github.com

github.com

SetRequestTimeoutを使うプロダクトコードのテストコードが失敗する問題があるそうで。 自分も試したけど、とりあえず再現できた(Mac OSX Yosemite)

プロダクトコード

package com.example

import akka.actor.Actor
import spray.routing._
import spray.http._
import MediaTypes._
import scala.concurrent.duration._

trait LongTimeService extends HttpService {
  val longTimeRoute =
    path("longTime") {
      extract(_.responder) { responder =>
        responder ! SetRequestTimeout(30 seconds)
        complete(slowQuery())
      }
    }

  def slowQuery(): String = {
    Thread.sleep(50000)
    "complete"
  }
}

テストコード

package com.example

import org.specs2.mutable.Specification
import spray.testkit.Specs2RouteTest
import spray.http._
import spray.http.StatusCodes._
import StatusCodes._

class LongTimeServiceSpec extends Specification with Specs2RouteTest with LongTimeService {
  def actorRefFactory = system

  "LongTimeService" should {

    "return complete" in {
      Get("/longTime") ~> longTimeRoute ~> check {
        status.intValue should be equalTo 200
      }
    }
  }
}
java.lang.RuntimeException: Received invalid route response: SetRequestTimeout(30 seconds)

一応書いてみた。 github.com