aboutsummaryrefslogtreecommitdiff
path: root/kamon-core-tests/src/test/scala/kamon/metric/TimerSpec.scala
diff options
context:
space:
mode:
Diffstat (limited to 'kamon-core-tests/src/test/scala/kamon/metric/TimerSpec.scala')
-rw-r--r--kamon-core-tests/src/test/scala/kamon/metric/TimerSpec.scala72
1 files changed, 72 insertions, 0 deletions
diff --git a/kamon-core-tests/src/test/scala/kamon/metric/TimerSpec.scala b/kamon-core-tests/src/test/scala/kamon/metric/TimerSpec.scala
new file mode 100644
index 00000000..3fc1e169
--- /dev/null
+++ b/kamon-core-tests/src/test/scala/kamon/metric/TimerSpec.scala
@@ -0,0 +1,72 @@
+package kamon.metric
+
+import kamon.Kamon
+import org.scalatest.{Matchers, WordSpec}
+
+
+class TimerSpec extends WordSpec with Matchers {
+ import TimerTestHelper._
+
+ "a Timer" should {
+ "record the duration between calls to .start() and .stop() in the StartedTimer" in {
+ val timer = Kamon.timer("timer-spec")
+ timer.start().stop()
+ timer.start().stop()
+ timer.start().stop()
+
+ timer.distribution().count shouldBe(3)
+ }
+
+ "ensure that a started timer can only be stopped once" in {
+ val timer = Kamon.timer("timer-spec")
+ val startedTimer = timer.start()
+ startedTimer.stop()
+ startedTimer.stop()
+ startedTimer.stop()
+
+ timer.distribution().count shouldBe(1)
+ }
+
+
+ "allow to record values and produce distributions as Histograms do" in {
+ val timer = Kamon.timer("test-timer")
+ timer.record(100)
+ timer.record(150, 998)
+ timer.record(200)
+
+ val distribution = timer.distribution()
+ distribution.min shouldBe(100)
+ distribution.max shouldBe(200)
+ distribution.count shouldBe(1000)
+ distribution.buckets.length shouldBe 3
+ distribution.buckets.map(b => (b.value, b.frequency)) should contain.allOf(
+ (100 -> 1),
+ (150 -> 998),
+ (200 -> 1)
+ )
+
+ val emptyDistribution = timer.distribution()
+ emptyDistribution.min shouldBe(0)
+ emptyDistribution.max shouldBe(0)
+ emptyDistribution.count shouldBe(0)
+ emptyDistribution.buckets.length shouldBe 0
+ }
+ }
+}
+
+object TimerTestHelper {
+
+ implicit class HistogramMetricSyntax(histogram: Histogram) {
+ def distribution(resetState: Boolean = true): Distribution = histogram match {
+ case h: AtomicHdrHistogram => h.snapshot(resetState).distribution
+ case h: HdrHistogram => h.snapshot(resetState).distribution
+ }
+ }
+
+ implicit class TimerMetricSyntax(metric: TimerMetric) {
+ def distribution(resetState: Boolean = true): Distribution =
+ metric.refine(Map.empty[String, String]) match {
+ case t: TimerImpl => t.histogram.distribution(resetState)
+ }
+ }
+}