/* * ========================================================================================= * Copyright © 2013-2014 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.trace import com.typesafe.config.ConfigFactory import kamon.Kamon import kamon.testkit.BaseKamonSpec import scala.concurrent.duration._ class SimpleTraceSpec extends BaseKamonSpec("simple-trace-spec") { override lazy val config = ConfigFactory.parseString( """ |kamon { | metric { | tick-interval = 1 hour | } | | trace { | level-of-detail = simple-trace | sampling = all | } |} """.stripMargin) "the simple tracing" should { "send a TraceInfo when the trace has finished and all segments are finished" in { Kamon(Tracer)(system).subscribe(testActor) TraceContext.withContext(newContext("simple-trace-without-segments")) { TraceContext.currentContext.startSegment("segment-one", "test-segment", "test").finish() TraceContext.currentContext.startSegment("segment-two", "test-segment", "test").finish() TraceContext.currentContext.finish() } val traceInfo = expectMsgType[TraceInfo] Kamon(Tracer)(system).unsubscribe(testActor) traceInfo.name should be("simple-trace-without-segments") traceInfo.segments.size should be(2) traceInfo.segments.find(_.name == "segment-one") should be('defined) traceInfo.segments.find(_.name == "segment-two") should be('defined) } "incubate the tracing context if there are open segments after finishing" in { Kamon(Tracer)(system).subscribe(testActor) val secondSegment = TraceContext.withContext(newContext("simple-trace-without-segments")) { TraceContext.currentContext.startSegment("segment-one", "test-segment", "test").finish() val segment = TraceContext.currentContext.startSegment("segment-two", "test-segment", "test") TraceContext.currentContext.finish() segment } expectNoMsg(2 seconds) secondSegment.finish() within(10 seconds) { val traceInfo = expectMsgType[TraceInfo] Kamon(Tracer)(system).unsubscribe(testActor) traceInfo.name should be("simple-trace-without-segments") traceInfo.segments.size should be(2) traceInfo.segments.find(_.name == "segment-one") should be('defined) traceInfo.segments.find(_.name == "segment-two") should be('defined) } } } }