aboutsummaryrefslogtreecommitdiff
path: root/kamon-core/src/test
diff options
context:
space:
mode:
authorMichael Donaghy <michael.donaghy@visualdna.com>2014-08-20 12:36:44 +0100
committerMichael Donaghy <michael.donaghy@visualdna.com>2014-08-21 09:32:42 +0100
commitb8f61d74ff71eb4e210368a9a8eee33bd504adbb (patch)
tree20200d40eab7ebde99002e09ff316ac4a1323526 /kamon-core/src/test
parentcd1e2519140211253120d49c8457e34833c6a3e9 (diff)
downloadKamon-b8f61d74ff71eb4e210368a9a8eee33bd504adbb.tar.gz
Kamon-b8f61d74ff71eb4e210368a9a8eee33bd504adbb.tar.bz2
Kamon-b8f61d74ff71eb4e210368a9a8eee33bd504adbb.zip
+ core: add support for trace context propagation on Scalaz futures
Diffstat (limited to 'kamon-core/src/test')
-rw-r--r--kamon-core/src/test/scala/kamon/instrumentation/scalaz/FutureInstrumentationSpec.scala63
1 files changed, 63 insertions, 0 deletions
diff --git a/kamon-core/src/test/scala/kamon/instrumentation/scalaz/FutureInstrumentationSpec.scala b/kamon-core/src/test/scala/kamon/instrumentation/scalaz/FutureInstrumentationSpec.scala
new file mode 100644
index 00000000..29bf96f8
--- /dev/null
+++ b/kamon-core/src/test/scala/kamon/instrumentation/scalaz/FutureInstrumentationSpec.scala
@@ -0,0 +1,63 @@
+/* ===================================================
+ * Copyright © 2013 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.
+ * 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.instrumentation.scalaz
+
+import akka.actor.ActorSystem
+import akka.testkit.TestKit
+import kamon.trace.TraceRecorder
+import org.scalatest.concurrent.{ PatienceConfiguration, ScalaFutures }
+import org.scalatest.{ Matchers, OptionValues, WordSpecLike }
+import scalaz.concurrent.Future
+import java.util.concurrent.Executors
+
+class FutureInstrumentationSpec extends TestKit(ActorSystem("future-instrumentation-spec")) with WordSpecLike with Matchers
+ with ScalaFutures with PatienceConfiguration with OptionValues {
+
+ implicit val execContext = Executors.newCachedThreadPool()
+
+ "a Future created with FutureTracing" should {
+ "capture the TraceContext available when created" which {
+ "must be available when executing the future's body" in {
+
+ val (future, testTraceContext) = TraceRecorder.withNewTraceContext("future-body") {
+ val future = Future(TraceRecorder.currentContext).start
+
+ (future, TraceRecorder.currentContext)
+ }
+
+ val ctxInFuture = future.run
+ ctxInFuture should equal(testTraceContext)
+ }
+
+ "must be available when executing callbacks on the future" in {
+
+ val (future, testTraceContext) = TraceRecorder.withNewTraceContext("future-body") {
+ val future = Future("Hello Kamon!")
+ // The TraceContext is expected to be available during all intermediate processing.
+ .map(_.length)
+ .flatMap(len ⇒ Future(len.toString))
+ .map(s ⇒ TraceRecorder.currentContext)
+
+ (future.start, TraceRecorder.currentContext)
+ }
+
+ val ctxInFuture = future.run
+ ctxInFuture should equal(testTraceContext)
+ }
+ }
+ }
+}
+