aboutsummaryrefslogtreecommitdiff
path: root/kamon-core/src/test/scala/kamon/metrics
diff options
context:
space:
mode:
Diffstat (limited to 'kamon-core/src/test/scala/kamon/metrics')
-rw-r--r--kamon-core/src/test/scala/kamon/metrics/ActorMetricsSpec.scala172
-rw-r--r--kamon-core/src/test/scala/kamon/metrics/CustomMetricSpec.scala78
-rw-r--r--kamon-core/src/test/scala/kamon/metrics/DispatcherMetricsSpec.scala105
-rw-r--r--kamon-core/src/test/scala/kamon/metrics/MetricSnapshotSpec.scala72
-rw-r--r--kamon-core/src/test/scala/kamon/metrics/TickMetricSnapshotBufferSpec.scala81
-rw-r--r--kamon-core/src/test/scala/kamon/metrics/instrument/MinMaxCounterSpec.scala110
6 files changed, 0 insertions, 618 deletions
diff --git a/kamon-core/src/test/scala/kamon/metrics/ActorMetricsSpec.scala b/kamon-core/src/test/scala/kamon/metrics/ActorMetricsSpec.scala
deleted file mode 100644
index 645ca96a..00000000
--- a/kamon-core/src/test/scala/kamon/metrics/ActorMetricsSpec.scala
+++ /dev/null
@@ -1,172 +0,0 @@
-/* =========================================================================================
- * 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.metrics
-
-import org.scalatest.{ WordSpecLike, Matchers }
-import akka.testkit.{ TestProbe, TestKitBase }
-import akka.actor.{ ActorRef, Actor, Props, ActorSystem }
-import com.typesafe.config.ConfigFactory
-import scala.concurrent.duration._
-import kamon.Kamon
-import kamon.metrics.Subscriptions.TickMetricSnapshot
-import kamon.metrics.ActorMetrics.ActorMetricSnapshot
-import kamon.metrics.MetricSnapshot.Measurement
-
-class ActorMetricsSpec extends TestKitBase with WordSpecLike with Matchers {
- implicit lazy val system: ActorSystem = ActorSystem("actor-metrics-spec", ConfigFactory.parseString(
- """
- |kamon.metrics {
- | filters = [
- | {
- | actor {
- | includes = [ "user/tracked-*" ]
- | excludes = [ "user/tracked-explicitly-excluded"]
- | }
- | }
- | ]
- |}
- """.stripMargin))
-
- "the Kamon actor metrics" should {
- "respect the configured include and exclude filters" in new DelayableActorFixture {
- val tracked = system.actorOf(Props[DelayableActor], "tracked-actor")
- val nonTracked = system.actorOf(Props[DelayableActor], "non-tracked-actor")
- val trackedExplicitlyExcluded = system.actorOf(Props[DelayableActor], "tracked-explicitly-excluded")
-
- Kamon(Metrics).subscribe(ActorMetrics, "*", testActor, permanently = true)
- expectMsgType[TickMetricSnapshot]
-
- tracked ! Discard
- nonTracked ! Discard
- trackedExplicitlyExcluded ! Discard
-
- within(2 seconds) {
- val tickSnapshot = expectMsgType[TickMetricSnapshot]
- tickSnapshot.metrics.keys should contain(ActorMetrics("user/tracked-actor"))
- tickSnapshot.metrics.keys should not contain (ActorMetrics("user/non-tracked-actor"))
- tickSnapshot.metrics.keys should not contain (ActorMetrics("user/tracked-explicitly-excluded"))
- }
- }
-
- "record mailbox-size, processing-time and time-in-mailbox metrics under regular conditions" in new DelayableActorFixture {
- val (delayable, metricsListener) = delayableActor("tracked-normal-conditions")
-
- for (_ ← 1 to 10) {
- delayable ! Discard
- }
-
- val actorMetrics = expectActorMetrics("user/tracked-normal-conditions", metricsListener, 3 seconds)
- actorMetrics.mailboxSize.max should be <= 10L
- actorMetrics.processingTime.numberOfMeasurements should be(10L)
- actorMetrics.timeInMailbox.numberOfMeasurements should be(10L)
- }
-
- "keep a correct mailbox-size even if the actor is blocked processing a message" in new DelayableActorFixture {
- val (delayable, metricsListener) = delayableActor("tracked-mailbox-size-queueing-up")
-
- delayable ! Delay(2500 milliseconds)
- for (_ ← 1 to 9) {
- delayable ! Discard
- }
-
- // let the first snapshot pass
- metricsListener.expectMsgType[TickMetricSnapshot]
-
- // process the tick in which the actor is stalled.
- val stalledTickMetrics = expectActorMetrics("user/tracked-mailbox-size-queueing-up", metricsListener, 2 seconds)
- stalledTickMetrics.mailboxSize.numberOfMeasurements should equal(30)
- // only the automatic last-value recording should be taken, and includes the message being currently processed.
- stalledTickMetrics.mailboxSize.measurements should contain only (Measurement(10, 30))
- stalledTickMetrics.mailboxSize.min should equal(10)
- stalledTickMetrics.mailboxSize.max should equal(10)
- stalledTickMetrics.processingTime.numberOfMeasurements should be(0L)
- stalledTickMetrics.timeInMailbox.numberOfMeasurements should be(0L)
-
- // process the tick after the actor is unblocked.
- val afterStallTickMetrics = expectActorMetrics("user/tracked-mailbox-size-queueing-up", metricsListener, 2 seconds)
- afterStallTickMetrics.processingTime.numberOfMeasurements should be(10L)
- afterStallTickMetrics.timeInMailbox.numberOfMeasurements should be(10L)
- afterStallTickMetrics.processingTime.max should be(2500.milliseconds.toNanos +- 100.milliseconds.toNanos)
- afterStallTickMetrics.timeInMailbox.max should be(2500.milliseconds.toNanos +- 100.milliseconds.toNanos)
- }
-
- "track the number of errors" in new ErrorActorFixture {
- val (error, metricsListener) = failedActor("tracked-errors")
-
- for (_ ← 1 to 5) {
- error ! Error
- }
-
- val actorMetrics = expectActorMetrics("user/tracked-errors", metricsListener, 3 seconds)
- actorMetrics.errorCounter.numberOfMeasurements should be(5L)
- }
- }
-
- def expectActorMetrics(actorPath: String, listener: TestProbe, waitTime: FiniteDuration): ActorMetricSnapshot = {
- val tickSnapshot = within(waitTime) {
- listener.expectMsgType[TickMetricSnapshot]
- }
- val actorMetricsOption = tickSnapshot.metrics.get(ActorMetrics(actorPath))
- actorMetricsOption should not be empty
- actorMetricsOption.get.asInstanceOf[ActorMetricSnapshot]
- }
-
- trait DelayableActorFixture {
- def delayableActor(name: String): (ActorRef, TestProbe) = {
- val actor = system.actorOf(Props[DelayableActor], name)
- val metricsListener = TestProbe()
-
- Kamon(Metrics).subscribe(ActorMetrics, "user/" + name, metricsListener.ref, permanently = true)
- // Wait for one empty snapshot before proceeding to the test.
- metricsListener.expectMsgType[TickMetricSnapshot]
-
- (actor, metricsListener)
- }
- }
-
- trait ErrorActorFixture {
- def failedActor(name: String): (ActorRef, TestProbe) = {
- val actor = system.actorOf(Props[FailedActor], name)
- val metricsListener = TestProbe()
-
- Kamon(Metrics).subscribe(ActorMetrics, "user/" + name, metricsListener.ref, permanently = true)
- // Wait for one empty snapshot before proceeding to the test.
- metricsListener.expectMsgType[TickMetricSnapshot]
-
- (actor, metricsListener)
- }
- }
-}
-
-class DelayableActor extends Actor {
- def receive = {
- case Delay(time) ⇒ Thread.sleep(time.toMillis)
- case Discard ⇒
- }
-}
-
-class FailedActor extends Actor {
- def receive = {
- case Error ⇒ 1 / 0
- case Discard ⇒
- }
-}
-
-case object Discard
-
-case class Delay(time: FiniteDuration)
-
-case class Error()
diff --git a/kamon-core/src/test/scala/kamon/metrics/CustomMetricSpec.scala b/kamon-core/src/test/scala/kamon/metrics/CustomMetricSpec.scala
deleted file mode 100644
index 1e072f71..00000000
--- a/kamon-core/src/test/scala/kamon/metrics/CustomMetricSpec.scala
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * =========================================================================================
- * 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.metrics
-
-import akka.testkit.TestKitBase
-import org.scalatest.{ Matchers, WordSpecLike }
-import akka.actor.ActorSystem
-import scala.concurrent.duration._
-import com.typesafe.config.ConfigFactory
-import kamon.Kamon
-import kamon.metrics.Subscriptions.TickMetricSnapshot
-import kamon.metrics.MetricSnapshot.Measurement
-
-class CustomMetricSpec extends TestKitBase with WordSpecLike with Matchers {
- implicit lazy val system: ActorSystem = ActorSystem("actor-metrics-spec", ConfigFactory.parseString(
- """
- |kamon.metrics {
- | filters = [
- | {
- | custom-metric {
- | includes = [ "test/*" ]
- | excludes = [ ]
- | }
- | }
- | ]
- |}
- """.stripMargin))
-
- "the Kamon custom metrics support" should {
- "allow registering a custom metric with the Metrics extension" in {
- val recorder = Kamon(Metrics).register(CustomMetric("test/sample-counter"), CustomMetric.histogram(100, 2, Scale.Unit))
-
- recorder should be('defined)
- }
-
- "allow subscriptions to custom metrics using the default subscription protocol" in {
- val recorder = Kamon(Metrics).register(CustomMetric("test/sample-counter"), CustomMetric.histogram(100, 2, Scale.Unit))
-
- recorder.map { r ⇒
- r.record(100)
- r.record(15)
- r.record(0)
- r.record(50)
- }
-
- Kamon(Metrics).subscribe(CustomMetric, "test/sample-counter", testActor)
-
- val recordedValues = within(5 seconds) {
- val snapshot = expectMsgType[TickMetricSnapshot]
- snapshot.metrics(CustomMetric("test/sample-counter")).metrics(CustomMetric.RecordedValues)
- }
-
- recordedValues.min should equal(0)
- recordedValues.max should equal(100)
- recordedValues.numberOfMeasurements should equal(4)
- recordedValues.measurements should contain allOf (
- Measurement(0, 1),
- Measurement(15, 1),
- Measurement(50, 1),
- Measurement(100, 1))
- }
- }
-
-}
diff --git a/kamon-core/src/test/scala/kamon/metrics/DispatcherMetricsSpec.scala b/kamon-core/src/test/scala/kamon/metrics/DispatcherMetricsSpec.scala
deleted file mode 100644
index 2a9cb6b4..00000000
--- a/kamon-core/src/test/scala/kamon/metrics/DispatcherMetricsSpec.scala
+++ /dev/null
@@ -1,105 +0,0 @@
-/* =========================================================================================
- * 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. 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.metrics
-
-import org.scalatest.{ WordSpecLike, Matchers }
-import akka.testkit.{ TestProbe, TestKitBase }
-import akka.actor.{ ActorRef, Props, ActorSystem }
-import com.typesafe.config.ConfigFactory
-import scala.concurrent.duration._
-import kamon.Kamon
-import kamon.metrics.Subscriptions.TickMetricSnapshot
-import kamon.metrics.DispatcherMetrics.DispatcherMetricSnapshot
-
-class DispatcherMetricsSpec extends TestKitBase with WordSpecLike with Matchers {
- implicit lazy val system: ActorSystem = ActorSystem("dispatcher-metrics-spec", ConfigFactory.parseString(
- """
- |kamon.metrics {
- | filters = [
- | {
- | dispatcher {
- | includes = ["*"]
- | excludes = ["dispatcher-explicitly-excluded"]
- | }
- | }
- | ]
- |}
- |
- |dispatcher-explicitly-excluded {
- | type = "Dispatcher"
- | executor = "fork-join-executor"
- |}
- |
- |tracked-dispatcher {
- | type = "Dispatcher"
- | executor = "thread-pool-executor"
- |}
- |
- """.stripMargin))
-
- "the Kamon dispatcher metrics" should {
- "respect the configured include and exclude filters" in {
- system.actorOf(Props[DelayableActor].withDispatcher("tracked-dispatcher"), "actor-with-tracked-dispatcher")
- system.actorOf(Props[DelayableActor].withDispatcher("dispatcher-explicitly-excluded"), "actor-with-excluded-dispatcher")
-
- Kamon(Metrics).subscribe(DispatcherMetrics, "*", testActor, permanently = true)
- expectMsgType[TickMetricSnapshot]
-
- within(2 seconds) {
- val tickSnapshot = expectMsgType[TickMetricSnapshot]
- tickSnapshot.metrics.keys should contain(DispatcherMetrics("tracked-dispatcher"))
- tickSnapshot.metrics.keys should not contain (DispatcherMetrics("dispatcher-explicitly-excluded"))
- }
- }
-
- "record maximumPoolSize, runningThreadCount, queueTaskCount, poolSize metrics" in new DelayableActorFixture {
- val (delayable, metricsListener) = delayableActor("worker-actor", "tracked-dispatcher")
-
- for (_ ← 1 to 100) {
- delayable ! Discard
- }
-
- val dispatcherMetrics = expectDispatcherMetrics("tracked-dispatcher", metricsListener, 3 seconds)
- dispatcherMetrics.maximumPoolSize.max should be <= 64L //fail in travis
- dispatcherMetrics.poolSize.max should be <= 22L //fail in travis
- dispatcherMetrics.queueTaskCount.max should be(0L)
- dispatcherMetrics.runningThreadCount.max should be(0L)
- }
-
- }
-
- def expectDispatcherMetrics(dispatcherId: String, listener: TestProbe, waitTime: FiniteDuration): DispatcherMetricSnapshot = {
- val tickSnapshot = within(waitTime) {
- listener.expectMsgType[TickMetricSnapshot]
- }
- val dispatcherMetricsOption = tickSnapshot.metrics.get(DispatcherMetrics(dispatcherId))
- dispatcherMetricsOption should not be empty
- dispatcherMetricsOption.get.asInstanceOf[DispatcherMetricSnapshot]
- }
-
- trait DelayableActorFixture {
- def delayableActor(name: String, dispatcher: String): (ActorRef, TestProbe) = {
- val actor = system.actorOf(Props[DelayableActor].withDispatcher(dispatcher), name)
- val metricsListener = TestProbe()
-
- Kamon(Metrics).subscribe(DispatcherMetrics, "*", metricsListener.ref, permanently = true)
- // Wait for one empty snapshot before proceeding to the test.
- metricsListener.expectMsgType[TickMetricSnapshot]
-
- (actor, metricsListener)
- }
- }
-}
diff --git a/kamon-core/src/test/scala/kamon/metrics/MetricSnapshotSpec.scala b/kamon-core/src/test/scala/kamon/metrics/MetricSnapshotSpec.scala
deleted file mode 100644
index 4d6ebc49..00000000
--- a/kamon-core/src/test/scala/kamon/metrics/MetricSnapshotSpec.scala
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * =========================================================================================
- * 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.metrics
-
-import org.scalatest.{ Matchers, WordSpec }
-import kamon.metrics.MetricSnapshot.Measurement
-
-class MetricSnapshotSpec extends WordSpec with Matchers {
-
- "a metric snapshot" should {
- "support a max operation" in new SnapshotFixtures {
- snapshotA.max should be(17)
- snapshotB.max should be(10)
- snapshotC.max should be(1)
- }
-
- "support a min operation" in new SnapshotFixtures {
- snapshotA.min should be(1)
- snapshotB.min should be(2)
- snapshotC.min should be(1)
- }
-
- "be able to merge with other snapshot" in new SnapshotFixtures {
- val merged = snapshotA.merge(snapshotB).merge(snapshotC)
-
- merged.min should be(1)
- merged.max should be(17)
- merged.numberOfMeasurements should be(300)
- merged.measurements.map(_.value) should contain inOrderOnly (1, 2, 4, 5, 7, 10, 17)
- }
-
- "be able to merge with empty snapshots" in new SnapshotFixtures {
- snapshotA.merge(emptySnapshot) should be(snapshotA)
- emptySnapshot.merge(snapshotA).merge(emptySnapshot) should be(snapshotA)
- snapshotC.merge(emptySnapshot) should be(snapshotC)
- }
-
- }
-
- trait SnapshotFixtures {
- val emptySnapshot = MetricSnapshot(InstrumentTypes.Histogram, 0, Scale.Unit, Vector.empty)
-
- val snapshotA = MetricSnapshot(InstrumentTypes.Histogram, 100, Scale.Unit, Vector(
- Measurement(1, 3),
- Measurement(2, 15),
- Measurement(5, 68),
- Measurement(7, 13),
- Measurement(17, 1)))
-
- val snapshotB = MetricSnapshot(InstrumentTypes.Histogram, 100, Scale.Unit, Vector(
- Measurement(2, 6),
- Measurement(4, 48),
- Measurement(5, 39),
- Measurement(10, 7)))
-
- val snapshotC = MetricSnapshot(InstrumentTypes.Counter, 100, Scale.Unit, Vector(Measurement(1, 100)))
- }
-}
diff --git a/kamon-core/src/test/scala/kamon/metrics/TickMetricSnapshotBufferSpec.scala b/kamon-core/src/test/scala/kamon/metrics/TickMetricSnapshotBufferSpec.scala
deleted file mode 100644
index d0a0c707..00000000
--- a/kamon-core/src/test/scala/kamon/metrics/TickMetricSnapshotBufferSpec.scala
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * =========================================================================================
- * 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.metrics
-
-import org.scalatest.{ Matchers, WordSpecLike }
-import akka.testkit.TestKit
-import akka.actor.ActorSystem
-import scala.concurrent.duration._
-import kamon.metrics.Subscriptions.TickMetricSnapshot
-import kamon.metrics.MetricSnapshot.Measurement
-
-class TickMetricSnapshotBufferSpec extends TestKit(ActorSystem("tick-metric-snapshot-buffer")) with WordSpecLike with Matchers {
-
- "the TickMetricSnapshotBuffer" should {
- "merge TickMetricSnapshots received until the flush timeout is reached and fix the from/to fields" in new SnapshotFixtures {
- val buffer = system.actorOf(TickMetricSnapshotBuffer.props(3 seconds, testActor))
-
- buffer ! firstEmpty
- buffer ! secondEmpty
- buffer ! thirdEmpty
-
- within(2 seconds)(expectNoMsg())
- val mergedSnapshot = expectMsgType[TickMetricSnapshot]
-
- mergedSnapshot.from should equal(1000)
- mergedSnapshot.to should equal(4000)
- mergedSnapshot.metrics should be('empty)
- }
-
- "merge empty and non-empty snapshots" in new SnapshotFixtures {
- val buffer = system.actorOf(TickMetricSnapshotBuffer.props(3 seconds, testActor))
-
- buffer ! firstNonEmpty
- buffer ! secondNonEmpty
- buffer ! thirdEmpty
-
- within(2 seconds)(expectNoMsg())
- val mergedSnapshot = expectMsgType[TickMetricSnapshot]
-
- mergedSnapshot.from should equal(1000)
- mergedSnapshot.to should equal(4000)
- mergedSnapshot.metrics should not be ('empty)
-
- val testMetricSnapshot = mergedSnapshot.metrics(CustomMetric("test-metric")).metrics(CustomMetric.RecordedValues)
- testMetricSnapshot.min should equal(1)
- testMetricSnapshot.max should equal(10)
- testMetricSnapshot.numberOfMeasurements should equal(35)
- testMetricSnapshot.measurements should contain allOf (Measurement(1, 10), Measurement(4, 9), Measurement(10, 16))
-
- }
- }
-
- trait SnapshotFixtures {
- val firstEmpty = TickMetricSnapshot(1000, 2000, Map.empty)
- val secondEmpty = TickMetricSnapshot(2000, 3000, Map.empty)
- val thirdEmpty = TickMetricSnapshot(3000, 4000, Map.empty)
-
- val firstNonEmpty = TickMetricSnapshot(1000, 2000,
- Map((CustomMetric("test-metric") -> SimpleGroupSnapshot(Map(CustomMetric.RecordedValues -> MetricSnapshot(InstrumentTypes.Histogram, 20, Scale.Unit, Vector(Measurement(1, 10), Measurement(10, 10))))))))
-
- val secondNonEmpty = TickMetricSnapshot(1000, 2000,
- Map((CustomMetric("test-metric") -> SimpleGroupSnapshot(Map(CustomMetric.RecordedValues -> MetricSnapshot(InstrumentTypes.Histogram, 15, Scale.Unit, Vector(Measurement(4, 9), Measurement(10, 6))))))))
-
- }
-
- case class SimpleGroupSnapshot(metrics: Map[MetricIdentity, MetricSnapshotLike]) extends MetricGroupSnapshot
-}
diff --git a/kamon-core/src/test/scala/kamon/metrics/instrument/MinMaxCounterSpec.scala b/kamon-core/src/test/scala/kamon/metrics/instrument/MinMaxCounterSpec.scala
deleted file mode 100644
index 14f1573f..00000000
--- a/kamon-core/src/test/scala/kamon/metrics/instrument/MinMaxCounterSpec.scala
+++ /dev/null
@@ -1,110 +0,0 @@
-/* =========================================================================================
- * 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. 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.metrics.instrument
-
-import org.scalatest.{ Matchers, WordSpecLike }
-import kamon.metrics.instruments.MinMaxCounter
-import kamon.metrics.instruments.MinMaxCounter.CounterMeasurement
-
-class MinMaxCounterSpec extends WordSpecLike with Matchers {
-
- "the MinMaxCounter" should {
- "increment" in {
- val counter = MinMaxCounter()
-
- counter.increment()
- counter.increment()
- counter.increment()
- counter.increment()
- counter.increment()
-
- val CounterMeasurement(_, _, current) = counter.collect()
-
- current should be(5)
- }
-
- "decrement" in {
- val counter = MinMaxCounter()
- counter.increment(5L)
-
- counter.decrement()
- counter.decrement()
- counter.decrement()
- counter.decrement()
- counter.decrement()
-
- val CounterMeasurement(_, _, current) = counter.collect()
-
- current should be(0)
- }
-
- "reset the min and max with the sum value when the collect method is called" in {
- val counter = MinMaxCounter()
-
- counter.increment(10)
- counter.increment(20)
- counter.increment(30)
- counter.increment(40)
- counter.increment(50)
-
- counter.collect() //only for check the last value after reset min max
-
- val CounterMeasurement(min, max, current) = counter.collect()
-
- min should be(current)
- max should be(current)
- current should be(150)
- }
- }
-
- "track the min value" in {
- val counter = MinMaxCounter()
-
- counter.increment(10)
- counter.increment(20)
- counter.increment(30)
- counter.increment(40)
- counter.increment(50)
-
- val CounterMeasurement(min, _, _) = counter.collect()
-
- min should be(0)
-
- counter.increment(50)
-
- val CounterMeasurement(minAfterCollectAndAddSomeValues, _, _) = counter.collect()
-
- minAfterCollectAndAddSomeValues should be(150)
- }
-
- "track the max value" in {
- val counter = MinMaxCounter()
- counter.increment(10)
- counter.increment(20)
- counter.increment(30)
- counter.increment(40)
- counter.increment(50)
-
- val CounterMeasurement(_, max, _) = counter.collect()
-
- max should be(150)
-
- counter.increment(200)
-
- val CounterMeasurement(_, maxAfterCollectAndAddSomeValues, _) = counter.collect()
-
- maxAfterCollectAndAddSomeValues should be(350)
- }
-}