aboutsummaryrefslogtreecommitdiff
path: root/kamon-core/src/test/scala/kamon/metric/instrument/GaugeSpec.scala
diff options
context:
space:
mode:
Diffstat (limited to 'kamon-core/src/test/scala/kamon/metric/instrument/GaugeSpec.scala')
-rw-r--r--kamon-core/src/test/scala/kamon/metric/instrument/GaugeSpec.scala66
1 files changed, 28 insertions, 38 deletions
diff --git a/kamon-core/src/test/scala/kamon/metric/instrument/GaugeSpec.scala b/kamon-core/src/test/scala/kamon/metric/instrument/GaugeSpec.scala
index 9192d999..bd39652c 100644
--- a/kamon-core/src/test/scala/kamon/metric/instrument/GaugeSpec.scala
+++ b/kamon-core/src/test/scala/kamon/metric/instrument/GaugeSpec.scala
@@ -1,72 +1,62 @@
package kamon.metric.instrument
import java.util.concurrent.atomic.AtomicLong
-
-import akka.actor.ActorSystem
-import com.typesafe.config.ConfigFactory
-import kamon.Kamon
-import kamon.metric.{ Metrics, Scale, CollectionContext }
-import org.scalatest.{ Matchers, WordSpecLike }
+import kamon.metric.instrument.Histogram.DynamicRange
+import kamon.testkit.BaseKamonSpec
import scala.concurrent.duration._
-class GaugeSpec extends WordSpecLike with Matchers {
- implicit val system = ActorSystem("gauge-spec", ConfigFactory.parseString(
- """
- |kamon.metrics {
- | flush-interval = 1 hour
- | default-collection-context-buffer-size = 10
- | precision {
- | default-gauge-precision {
- | refresh-interval = 100 milliseconds
- | highest-trackable-value = 999999999
- | significant-value-digits = 2
- | }
- | }
- |}
- """.stripMargin))
+class GaugeSpec extends BaseKamonSpec("gauge-spec") {
"a Gauge" should {
- "automatically record the current value using the configured refresh-interval" in {
- val numberOfValuesRecorded = new AtomicLong(0)
- val gauge = Gauge.fromDefaultConfig(system) { () ⇒ numberOfValuesRecorded.addAndGet(1) }
-
+ "automatically record the current value using the configured refresh-interval" in new GaugeFixture {
+ val (numberOfValuesRecorded, gauge) = createGauge()
Thread.sleep(1.second.toMillis)
+
numberOfValuesRecorded.get() should be(10L +- 1L)
gauge.cleanup
}
- "stop automatically recording after a call to cleanup" in {
- val numberOfValuesRecorded = new AtomicLong(0)
- val gauge = Gauge.fromDefaultConfig(system) { () ⇒ numberOfValuesRecorded.addAndGet(1) }
-
+ "stop automatically recording after a call to cleanup" in new GaugeFixture {
+ val (numberOfValuesRecorded, gauge) = createGauge()
Thread.sleep(1.second.toMillis)
+
gauge.cleanup
numberOfValuesRecorded.get() should be(10L +- 1L)
Thread.sleep(1.second.toMillis)
+
numberOfValuesRecorded.get() should be(10L +- 1L)
}
- "produce a Histogram snapshot including all the recorded values" in {
- val numberOfValuesRecorded = new AtomicLong(0)
- val gauge = Gauge.fromDefaultConfig(system) { () ⇒ numberOfValuesRecorded.addAndGet(1) }
+ "produce a Histogram snapshot including all the recorded values" in new GaugeFixture {
+ val (numberOfValuesRecorded, gauge) = createGauge()
Thread.sleep(1.second.toMillis)
gauge.cleanup
- val snapshot = gauge.collect(Kamon(Metrics).buildDefaultCollectionContext)
+ val snapshot = gauge.collect(kamon.metrics.buildDefaultCollectionContext)
snapshot.numberOfMeasurements should be(10L +- 1L)
snapshot.min should be(1)
snapshot.max should be(10L +- 1L)
}
- "not record the current value when doing a collection" in {
- val numberOfValuesRecorded = new AtomicLong(0)
- val gauge = Gauge(Histogram.Precision.Normal, 10000L, Scale.Unit, 1 hour, system)(() ⇒ numberOfValuesRecorded.addAndGet(1))
-
- val snapshot = gauge.collect(Kamon(Metrics).buildDefaultCollectionContext)
+ "not record the current value when doing a collection" in new GaugeFixture {
+ val (numberOfValuesRecorded, gauge) = createGauge(10 seconds)
+ val snapshot = gauge.collect(kamon.metrics.buildDefaultCollectionContext)
snapshot.numberOfMeasurements should be(0)
numberOfValuesRecorded.get() should be(0)
}
}
+
+ trait GaugeFixture {
+ def createGauge(refreshInterval: FiniteDuration = 100 millis): (AtomicLong, Gauge) = {
+ val recordedValuesCounter = new AtomicLong(0)
+ val gauge = Gauge(DynamicRange(1, 100, 2), refreshInterval, kamon.metrics.settings.refreshScheduler, {
+ () ⇒ recordedValuesCounter.addAndGet(1)
+ })
+
+ (recordedValuesCounter, gauge)
+ }
+
+ }
}