Created
May 14, 2014 15:34
-
-
Save romansky/af44a7f35ce59bcbe8c2 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// the test helper class | |
import akka.actor._ | |
import akka.io.IO | |
import java.util.concurrent.atomic.AtomicInteger | |
import spray.can.Http | |
import spray.http.{Uri, HttpMethod, HttpResponse, HttpRequest} | |
object Helpers { | |
lazy implicit val testSystem = ActorSystem("helpers-test-system") | |
val lastPort = new AtomicInteger(20000) | |
type Replay = (HttpMethod,Uri.Path,String) | |
def webReplayer(replay : List[Replay]) : (ActorRef,Int) = { | |
val newPort = lastPort.addAndGet(1) | |
val newServer = testSystem.actorOf(Props(new Helpers.ReplayerActor(replay))) | |
IO(Http) ! Http.Bind(newServer, interface = "127.0.0.1", port = newPort) | |
(newServer,newPort) | |
} | |
object ShutTestServer | |
class ReplayerActor(var replay :List[Replay]) extends Actor { | |
var ioServer : ActorRef = null | |
override def receive: Receive = { | |
case _ : Http.Connected => | |
sender ! Http.Register(self) | |
ioServer = sender() | |
case HttpRequest(method, uri,_,_,_) => | |
if (!replay.isEmpty && replay.head._1 == method && uri.path == replay.head._2){ | |
sender ! HttpResponse(entity = replay.head._3) | |
replay = replay.tail | |
} else { | |
sender ! HttpResponse(status = 400, entity = "was expecting a different request at this point") | |
} | |
case ShutTestServer => ioServer ! PoisonPill | |
case _ => //ignore | |
} | |
} | |
} | |
// how to use | |
val content = | |
s""" | |
|<html> | |
|<head> | |
|<title>sometitle</title> | |
|</head> | |
|<body>some body</body> | |
|</html> | |
""".stripMargin | |
// you pass a list of expected responses to "replay" with real nice native Spray objects | |
val (_testWebServer,port) = Helpers.webReplayer( | |
List( | |
(GET,Uri.Path("/somesite"),content) | |
) | |
) | |
// from another place you can now do | |
val whatEver = YourHTTPGetter.fetch(s"http://127.0.0.1:$port/somesite") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment