aboutsummaryrefslogtreecommitdiff
path: root/kamon-play/src/test/scala/kamon/play/WSInstrumentationSpec.scala
diff options
context:
space:
mode:
Diffstat (limited to 'kamon-play/src/test/scala/kamon/play/WSInstrumentationSpec.scala')
-rw-r--r--kamon-play/src/test/scala/kamon/play/WSInstrumentationSpec.scala85
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