From 6150d254657fa2c855b2c1825257a7210bdb2654 Mon Sep 17 00:00:00 2001 From: Ivan Topolnjak Date: Wed, 4 Dec 2013 00:36:26 -0300 Subject: move server tests to a higher level of abstraction --- .../kamon/spray/ServerRequestTracingSpec.scala | 94 ++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 kamon-spray/src/test/scala/kamon/spray/ServerRequestTracingSpec.scala (limited to 'kamon-spray/src/test/scala/kamon/spray') diff --git a/kamon-spray/src/test/scala/kamon/spray/ServerRequestTracingSpec.scala b/kamon-spray/src/test/scala/kamon/spray/ServerRequestTracingSpec.scala new file mode 100644 index 00000000..e54fe24f --- /dev/null +++ b/kamon-spray/src/test/scala/kamon/spray/ServerRequestTracingSpec.scala @@ -0,0 +1,94 @@ +/* =================================================== + * Copyright © 2013 the kamon project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ +package kamon.spray + +import _root_.spray.httpx.RequestBuilding +import _root_.spray.routing.SimpleRoutingApp +import akka.testkit.TestKit +import akka.actor.ActorSystem +import org.scalatest.WordSpecLike +import scala.concurrent.Await +import scala.concurrent.duration._ +import _root_.spray.client.pipelining._ +import akka.util.Timeout +import kamon.trace.{UowTrace, Trace} +import kamon.Kamon + +class ServerRequestTracingSpec extends TestKit(ActorSystem("server-request-tracing-spec")) with WordSpecLike with RequestBuilding with TestServer { + + "the spray server request tracing instrumentation" should { + "trace a request start/finish sequence when proper TraceContext is received" in { + send { + Get(s"http://127.0.0.1:$port/ok") + } + + within(5 seconds) { + fishForNamedTrace("ok") + } + } + + "finish a request even if no TraceContext is received in the response" in { + send { + Get(s"http://127.0.0.1:$port/clearcontext") + } + + within(5 seconds) { + fishForNamedTrace("clearcontext") + } + } + + "give a initial transaction name using the method and path from the request" in { + send { + Get(s"http://127.0.0.1:$port/accounts") + } + + within(5 seconds) { + fishForNamedTrace("accounts") + } + } + } + + def fishForNamedTrace(traceName: String) = fishForMessage() { + case trace: UowTrace if trace.name.contains(traceName) => true + case _ => false + } +} + +trait TestServer extends SimpleRoutingApp { + self: TestKit => + + Kamon(Trace).tell(Trace.Register, testActor) + + implicit val timeout = Timeout(20 seconds) + val port: Int = Await.result( + startServer(interface = "127.0.0.1", port = 0)( + get { + path("ok") { + complete("ok") + } ~ + path("clearcontext"){ + complete { + println("The Context in the route is: " + Trace.context) + Trace.clear + "ok" + } + } + } + ), timeout.duration).localAddress.getPort + + val send = sendReceive(system, system.dispatcher, timeout) + +} -- cgit v1.2.3