=htc extract HttpServerTestSetupBase from HttpServerSpec

This commit is contained in:
Johannes Rudolph 2015-04-28 14:54:25 +02:00
parent 8714d556d5
commit 0f15cb6d78
2 changed files with 75 additions and 46 deletions

View file

@ -4,6 +4,7 @@
package akka.http.impl.engine.server
import akka.actor.ActorSystem
import akka.http.ServerSettings
import scala.util.Random
@ -13,7 +14,7 @@ import org.scalatest.Inside
import akka.event.NoLogging
import akka.util.ByteString
import akka.stream.scaladsl._
import akka.stream.ActorFlowMaterializer
import akka.stream.{ FlowMaterializer, ActorFlowMaterializer }
import akka.stream.testkit._
import akka.http.scaladsl.model._
import akka.http.impl.util._
@ -22,7 +23,7 @@ import HttpEntity._
import MediaTypes._
import HttpMethods._
class HttpServerSpec extends AkkaSpec("akka.loggers = []\n akka.loglevel = OFF") with Inside {
class HttpServerSpec extends AkkaSpec("akka.loggers = []\n akka.loglevel = OFF") with Inside { spec
implicit val materializer = ActorFlowMaterializer()
"The server implementation" should {
@ -660,49 +661,8 @@ class HttpServerSpec extends AkkaSpec("akka.loggers = []\n akka.loglevel = OFF")
expectRequest shouldEqual HttpRequest(uri = "http://example.com//foo", headers = List(Host("example.com")))
}
}
class TestSetup {
val requests = TestSubscriber.manualProbe[HttpRequest]
val responses = TestPublisher.manualProbe[HttpResponse]
def settings = ServerSettings(system).copy(serverHeader = Some(Server(List(ProductVersion("akka-http", "test")))))
val (netIn, netOut) = {
val netIn = TestPublisher.manualProbe[ByteString]
val netOut = TestSubscriber.manualProbe[ByteString]
FlowGraph.closed(HttpServerBluePrint(settings, NoLogging)) { implicit b
server
import FlowGraph.Implicits._
Source(netIn) ~> server.in2
server.out1 ~> Sink(netOut)
server.out2 ~> Sink(requests)
Source(responses) ~> server.in1
}.run()
netIn -> netOut
}
def wipeDate(string: String) =
string.fastSplit('\n').map {
case s if s.startsWith("Date:") "Date: XXXX\r"
case s s
}.mkString("\n")
val netInSub = netIn.expectSubscription()
val netOutSub = netOut.expectSubscription()
val requestsSub = requests.expectSubscription()
val responsesSub = responses.expectSubscription()
def expectRequest: HttpRequest = {
requestsSub.request(1)
requests.expectNext()
}
def expectNoRequest(max: FiniteDuration): Unit = requests.expectNoMsg(max)
def send(data: ByteString): Unit = netInSub.sendNext(data)
def send(data: String): Unit = send(ByteString(data, "UTF8"))
def closeNetworkInput(): Unit = netInSub.sendComplete()
class TestSetup extends HttpServerTestSetupBase {
implicit def system: ActorSystem = spec.system
implicit def materializer: FlowMaterializer = spec.materializer
}
}

View file

@ -0,0 +1,69 @@
/*
* Copyright (C) 2009-2015 Typesafe Inc. <http://www.typesafe.com>
*/
package akka.http.impl.engine.server
import scala.concurrent.duration.FiniteDuration
import akka.actor.ActorSystem
import akka.event.NoLogging
import akka.util.ByteString
import akka.stream.FlowMaterializer
import akka.stream.scaladsl.{ Sink, Source, FlowGraph }
import akka.stream.testkit.{ TestPublisher, TestSubscriber }
import akka.http.impl.util._
import akka.http.ServerSettings
import akka.http.scaladsl.model.headers.{ ProductVersion, Server }
import akka.http.scaladsl.model.{ HttpResponse, HttpRequest }
abstract class HttpServerTestSetupBase {
implicit def system: ActorSystem
implicit def materializer: FlowMaterializer
val requests = TestSubscriber.manualProbe[HttpRequest]
val responses = TestPublisher.manualProbe[HttpResponse]
def settings = ServerSettings(system).copy(serverHeader = Some(Server(List(ProductVersion("akka-http", "test")))))
val (netIn, netOut) = {
val netIn = TestPublisher.manualProbe[ByteString]
val netOut = TestSubscriber.manualProbe[ByteString]
FlowGraph.closed(HttpServerBluePrint(settings, NoLogging)) { implicit b
server
import FlowGraph.Implicits._
Source(netIn) ~> server.in2
server.out1 ~> Sink(netOut)
server.out2 ~> Sink(requests)
Source(responses) ~> server.in1
}.run()
netIn -> netOut
}
def wipeDate(string: String) =
string.fastSplit('\n').map {
case s if s.startsWith("Date:") "Date: XXXX\r"
case s s
}.mkString("\n")
val netInSub = netIn.expectSubscription()
val netOutSub = netOut.expectSubscription()
val requestsSub = requests.expectSubscription()
val responsesSub = responses.expectSubscription()
def expectRequest: HttpRequest = {
requestsSub.request(1)
requests.expectNext()
}
def expectNoRequest(max: FiniteDuration): Unit = requests.expectNoMsg(max)
def send(data: ByteString): Unit = netInSub.sendNext(data)
def send(data: String): Unit = send(ByteString(data, "UTF8"))
def closeNetworkInput(): Unit = netInSub.sendComplete()
}