diff options
Diffstat (limited to 'kamon-core/src/test/scala/kamon')
4 files changed, 75 insertions, 2 deletions
diff --git a/kamon-core/src/test/scala/kamon/LogInterceptor.scala b/kamon-core/src/test/scala/kamon/LogInterceptor.scala new file mode 100644 index 00000000..b5b8a79c --- /dev/null +++ b/kamon-core/src/test/scala/kamon/LogInterceptor.scala @@ -0,0 +1,14 @@ +package kamon + +import uk.org.lidalia.slf4jext.Level +import uk.org.lidalia.slf4jtest.{LoggingEvent, TestLogger} + +trait LogInterceptor { + + def interceptLog[T](level: Level)(code: => T)(implicit tl: TestLogger): Seq[LoggingEvent] = { + import scala.collection.JavaConverters._ + tl.clear() + val run = code + tl.getLoggingEvents().asScala.filter(_.getLevel == level) + } +} diff --git a/kamon-core/src/test/scala/kamon/metric/instrument/CounterSpec.scala b/kamon-core/src/test/scala/kamon/metric/instrument/CounterSpec.scala new file mode 100644 index 00000000..26b3456d --- /dev/null +++ b/kamon-core/src/test/scala/kamon/metric/instrument/CounterSpec.scala @@ -0,0 +1,46 @@ +package kamon.metric.instrument + +import kamon.LogInterceptor +import kamon.metric.Entity +import kamon.testkit.DefaultInstrumentFactory +import org.scalatest.{Matchers, WordSpec} +import uk.org.lidalia.slf4jext.Level +import uk.org.lidalia.slf4jtest.TestLoggerFactory + +class CounterSpec extends WordSpec with Matchers with LogInterceptor with DefaultInstrumentFactory { + implicit val testLogger = TestLoggerFactory.getTestLogger(classOf[LongAdderCounter]) + + "a Counter" should { + + "allow unit and bundled increments" in { + val counter = buildCounter("unit-increments") + counter.increment() + counter.increment() + counter.increment(40) + + counter.snapshot().value shouldBe(42) + } + + "warn the user and ignore attempts to decrement the counter" in { + val counter = buildCounter("attempt-to-decrement") + counter.increment(100) + counter.increment(100) + counter.increment(100) + + interceptLog(Level.WARN) { + counter.increment(-10L) + }.head.getMessage() shouldBe(s"Ignored attempt to decrement counter [attempt-to-decrement] on entity [$defaultEntity]") + + counter.snapshot().value shouldBe(300) + } + + "reset the internal state to zero after taking snapshots" in { + val counter = buildCounter("reset-after-snapshot") + counter.increment() + counter.increment(10) + + counter.snapshot().value shouldBe(11) + counter.snapshot().value shouldBe(0) + } + } +} diff --git a/kamon-core/src/test/scala/kamon/metric/instrument/InstrumentFactorySpec.scala b/kamon-core/src/test/scala/kamon/metric/instrument/InstrumentFactorySpec.scala index fc82ddcd..5bf16d4c 100644 --- a/kamon-core/src/test/scala/kamon/metric/instrument/InstrumentFactorySpec.scala +++ b/kamon-core/src/test/scala/kamon/metric/instrument/InstrumentFactorySpec.scala @@ -68,7 +68,7 @@ class InstrumentFactorySpec extends WordSpec with Matchers{ | modified-histogram { | lowest-discernible-value = 99 | highest-trackable-value = 999 - | significant-value-digits = 7 + | significant-value-digits = 4 | } | | modified-mm-counter { @@ -92,7 +92,7 @@ class InstrumentFactorySpec extends WordSpec with Matchers{ modifiedHistogram.dynamicRange.lowestDiscernibleValue shouldBe(99) modifiedHistogram.dynamicRange.highestTrackableValue shouldBe(999) - modifiedHistogram.dynamicRange.significantValueDigits shouldBe(7) + modifiedHistogram.dynamicRange.significantValueDigits shouldBe(4) val defaultMMCounter = factory.buildMinMaxCounter(customEntity, "default-mm-counter") diff --git a/kamon-core/src/test/scala/kamon/testkit/DefaultInstrumentFactory.scala b/kamon-core/src/test/scala/kamon/testkit/DefaultInstrumentFactory.scala new file mode 100644 index 00000000..acec5915 --- /dev/null +++ b/kamon-core/src/test/scala/kamon/testkit/DefaultInstrumentFactory.scala @@ -0,0 +1,13 @@ +package kamon.testkit + +import com.typesafe.config.ConfigFactory +import kamon.metric.Entity +import kamon.metric.instrument.InstrumentFactory + +trait DefaultInstrumentFactory { + val defaultEntity = Entity("default-entity", "default-category", Map.empty) + val instrumentFactory = InstrumentFactory(ConfigFactory.load().getConfig("kamon.metric.instrument-factory")) + + def buildCounter(name: String) = instrumentFactory.buildCounter(defaultEntity, name) + +} |