diff options
Diffstat (limited to 'kamon-play/src/test/scala/kamon/play/WSInstrumentationSpec.scala')
-rw-r--r-- | kamon-play/src/test/scala/kamon/play/WSInstrumentationSpec.scala | 85 |
1 files changed, 52 insertions, 33 deletions
diff --git a/kamon-play/src/test/scala/kamon/play/WSInstrumentationSpec.scala b/kamon-play/src/test/scala/kamon/play/WSInstrumentationSpec.scala index b321d123..a9a2d5fa 100644 --- a/kamon-play/src/test/scala/kamon/play/WSInstrumentationSpec.scala +++ b/kamon-play/src/test/scala/kamon/play/WSInstrumentationSpec.scala @@ -1,5 +1,5 @@ /* =================================================== - * Copyright © 2013 2014 the kamon project <http://kamon.io/> + * Copyright © 2013-2014 the kamon project <http://kamon.io/> * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,50 +16,69 @@ package kamon.play -import play.api.test._ import play.api.mvc.Action import play.api.mvc.Results.Ok -import scala.Some -import scala.concurrent.ExecutionContext.Implicits.global -import org.junit.runner.RunWith -import org.specs2.runner.JUnitRunner -import play.api.test.FakeApplication import play.api.libs.ws.WS -import scala.util._ -import scala.concurrent.Await -import scala.concurrent.duration._ +import org.scalatestplus.play.OneServerPerSuite +import play.api.test._ +import play.api.test.Helpers._ +import akka.actor.ActorSystem +import akka.testkit.{ TestKitBase, TestProbe } -@RunWith(classOf[JUnitRunner]) -class WSInstrumentationSpec extends PlaySpecification { +import com.typesafe.config.ConfigFactory +import org.scalatest.{ Matchers, WordSpecLike } +import kamon.Kamon +import kamon.metric.{ TraceMetrics, Metrics } +import kamon.metric.Subscriptions.TickMetricSnapshot +import kamon.metric.TraceMetrics.ElapsedTime + +class WSInstrumentationSpec extends TestKitBase with WordSpecLike with Matchers with OneServerPerSuite { System.setProperty("config.file", "./kamon-play/src/test/resources/conf/application.conf") - val appWithRoutes = FakeApplication(withRoutes = { - case ("GET", "/async") ⇒ - Action { - val request = WS.url("http://maps.googleapis.com/maps/api/geocode/json?address=China&sensor=true").get() + implicit lazy val system: ActorSystem = ActorSystem("play-ws-instrumentation-spec", ConfigFactory.parseString( + """ + |akka { + | loglevel = ERROR + |} + | + |kamon { + | metrics { + | tick-interval = 2 seconds + | + | filters = [ + | { + | trace { + | includes = [ "*" ] + | excludes = [] + | } + | } + | ] + | } + |} + """.stripMargin)) - val future = request map { - response ⇒ (response.json \\ "location") - } + implicit override lazy val app = FakeApplication(withRoutes = { + case ("GET", "/async") ⇒ Action { Ok("ok") } + }) - val result = Await.result(future, 10 seconds).asInstanceOf[List[play.api.libs.json.JsObject]] + "the WS instrumentation" should { + "respond to the Async Action and complete the WS request" in { - val latitude = (result(0) \\ "lat")(0).toString - val longitude = (result(0) \\ "lng")(0).toString + val metricListener = TestProbe() + Kamon(Metrics)(system).subscribe(TraceMetrics, "*", metricListener.ref, permanently = true) + metricListener.expectMsgType[TickMetricSnapshot] - Ok(latitude + " " + longitude) - } - }) + val response = await(WS.url("http://localhost:19001/async").get()) + response.status should be(OK) - "the WS instrumentation" should { - "respond to the Async Action and complete the WS request" in new WithServer(appWithRoutes) { - val Some(result) = route(FakeRequest(GET, "/async")) - result.onComplete { - case Success(result) ⇒ result.header.status must equalTo(200) - case Failure(throwable) ⇒ failure(throwable.getMessage) - } - Thread.sleep(2000) //wait to complete the future + // val tickSnapshot = metricListener.expectMsgType[TickMetricSnapshot] + // val traceMetrics = tickSnapshot.metrics.find { case (k, v) ⇒ k.name.contains("async") } map (_._2.metrics) + // traceMetrics should not be empty + // + // traceMetrics map { metrics ⇒ + // metrics(ElapsedTime).numberOfMeasurements should be(1L) + // } } } }
\ No newline at end of file |