diff options
Diffstat (limited to 'kamon-spray/src/test/scala/kamon/spray/ClientRequestInstrumentationSpec.scala')
-rw-r--r-- | kamon-spray/src/test/scala/kamon/spray/ClientRequestInstrumentationSpec.scala | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/kamon-spray/src/test/scala/kamon/spray/ClientRequestInstrumentationSpec.scala b/kamon-spray/src/test/scala/kamon/spray/ClientRequestInstrumentationSpec.scala new file mode 100644 index 00000000..339628d2 --- /dev/null +++ b/kamon-spray/src/test/scala/kamon/spray/ClientRequestInstrumentationSpec.scala @@ -0,0 +1,67 @@ +package kamon.spray + +import akka.testkit.{TestKitBase, TestProbe, TestKit} +import akka.actor.ActorSystem +import org.scalatest.WordSpecLike +import spray.httpx.RequestBuilding +import kamon.Kamon +import kamon.metrics.{ TraceMetrics, Metrics } +import spray.http.{ HttpResponse, HttpRequest } +import kamon.metrics.Subscriptions.TickMetricSnapshot +import kamon.trace.TraceRecorder +import spray.can.client.ClientRequestInstrumentation +import com.typesafe.config.ConfigFactory + +class ClientRequestInstrumentationSpec extends TestKitBase with WordSpecLike with RequestBuilding with TestServer { + implicit lazy val system: ActorSystem = ActorSystem("server-request-tracing-spec", ConfigFactory.parseString( + """ + |kamon { + | metrics { + | tick-interval = 1 second + | + | filters = [ + | { + | trace { + | includes = [ "*" ] + | excludes = [] + | } + | } + | ] + | } + |} + """.stripMargin + )) + + implicit def ec = system.dispatcher + + "the client instrumentation" should { + "record record the elapsed time for a http request when using the Http manager directly" in { + + val (hostConnector, server) = buildServer(httpHostConnector) + val client = TestProbe() + + val metricListener = TestProbe() + Kamon(Metrics)(system).subscribe(TraceMetrics, "*", metricListener.ref, permanently = true) + + val testContext = TraceRecorder.withNewTraceContext("direct-to-http-manager-request") { + client.send(hostConnector, Get("/direct-to-http-manager-request")) + TraceRecorder.currentContext + } + server.expectMsgType[HttpRequest] + server.reply(HttpResponse(entity = "ok")) + client.expectMsgType[HttpResponse] + + testContext.map(_.finish(Map.empty)) + + metricListener.fishForMessage() { + case snapshot @ TickMetricSnapshot(_, _, metrics) ⇒ + metrics.filterKeys(_.name == "direct-to-http-manager-request").exists { + case (group, snapshot) ⇒ + snapshot.metrics.filterKeys(id ⇒ id.name == "" && id.tag == ClientRequestInstrumentation.SprayTime).nonEmpty + } + case other ⇒ false + } + } + } + +} |