aboutsummaryrefslogtreecommitdiff
path: root/kamon-core/src/test/scala/kamon/metric
diff options
context:
space:
mode:
authorDiego <diegolparra@gmail.com>2017-06-08 23:27:09 -0300
committerDiego <diegolparra@gmail.com>2017-06-08 23:27:09 -0300
commit0ad117a9255ccdbf26ce30222508070545579056 (patch)
tree0a53cb1051ca9275ff7e64671470410309b2c4e9 /kamon-core/src/test/scala/kamon/metric
parent0d3eb13669d3e9297b36d00aef03d177246efa27 (diff)
downloadKamon-0ad117a9255ccdbf26ce30222508070545579056.tar.gz
Kamon-0ad117a9255ccdbf26ce30222508070545579056.tar.bz2
Kamon-0ad117a9255ccdbf26ce30222508070545579056.zip
* Introduce Java 8 Unsafe intrinsics in LogAdder (lock addq and lock xchg)
* Introduce atomic variant of LongAdder::sumThenReset -> LongAdder::sumAndReset * Remove LongMaxUpdater in favor to AtomicLongMaxUpdater
Diffstat (limited to 'kamon-core/src/test/scala/kamon/metric')
-rw-r--r--kamon-core/src/test/scala/kamon/metric/FilterSpec.scala124
-rw-r--r--kamon-core/src/test/scala/kamon/metric/RecorderRegistrySpec.scala76
-rw-r--r--kamon-core/src/test/scala/kamon/metric/instrument/CounterSpec.scala94
-rw-r--r--kamon-core/src/test/scala/kamon/metric/instrument/MinMaxCounterSpec.scala90
4 files changed, 240 insertions, 144 deletions
diff --git a/kamon-core/src/test/scala/kamon/metric/FilterSpec.scala b/kamon-core/src/test/scala/kamon/metric/FilterSpec.scala
index 095c9426..c0f0e2e1 100644
--- a/kamon-core/src/test/scala/kamon/metric/FilterSpec.scala
+++ b/kamon-core/src/test/scala/kamon/metric/FilterSpec.scala
@@ -5,65 +5,65 @@ import com.typesafe.config.ConfigFactory
import org.scalatest.{Matchers, WordSpec}
-class FilterSpec extends WordSpec with Matchers {
- val testConfig = ConfigFactory.parseString(
- """
- |kamon.metric.filters {
- | accept-unmatched-categories = false
- |
- | some-category {
- | includes = ["**"]
- | excludes = ["not-me"]
- | }
- |
- | only-includes {
- | includes = ["only-me"]
- | }
- |
- | only-excludes {
- | excludes = ["not-me"]
- | }
- |
- | specific-rules {
- | includes = ["glob:/user/**", "regex:test-[0-5]"]
- | }
- |}
- """.stripMargin
- )
-
- "the entity filters" should {
- "use the accept-unmatched-categories setting when there is no configuration for a given category" in {
- val acceptUnmatched = Filter.fromConfig(ConfigFactory.parseString("kamon.metric.filters.accept-unmatched-categories=true"))
- val rejectUnmatched = Filter.fromConfig(ConfigFactory.parseString("kamon.metric.filters.accept-unmatched-categories=false"))
-
- acceptUnmatched.accept(Entity("a", "b", Map.empty)) shouldBe true
- rejectUnmatched.accept(Entity("a", "b", Map.empty)) shouldBe false
- }
-
- "accept entities that are matched by any include and none exclude filters" in {
- val entityFilter = Filter.fromConfig(testConfig)
-
- entityFilter.accept(Entity("anything", "anything", Map.empty)) shouldBe false
- entityFilter.accept(Entity("anything", "some-category", Map.empty)) shouldBe true
- entityFilter.accept(Entity("not-me", "some-category", Map.empty)) shouldBe false
- }
-
- "allow configuring includes only or excludes only for any category" in {
- val entityFilter = Filter.fromConfig(testConfig)
-
- entityFilter.accept(Entity("only-me", "only-includes", Map.empty)) shouldBe true
- entityFilter.accept(Entity("anything", "only-includes", Map.empty)) shouldBe false
- entityFilter.accept(Entity("any-other", "only-excludes", Map.empty)) shouldBe false
- entityFilter.accept(Entity("not-me", "only-excludes", Map.empty)) shouldBe false
- }
-
- "allow to explicitly decide whether patterns are treated as Glob or Regex" in {
- val entityFilter = Filter.fromConfig(testConfig)
-
- entityFilter.accept(Entity("/user/accepted", "specific-rules", Map.empty)) shouldBe true
- entityFilter.accept(Entity("/other/rejected/", "specific-rules", Map.empty)) shouldBe false
- entityFilter.accept(Entity("test-5", "specific-rules", Map.empty)) shouldBe true
- entityFilter.accept(Entity("test-6", "specific-rules", Map.empty)) shouldBe false
- }
- }
-} \ No newline at end of file
+//class FilterSpec extends WordSpec with Matchers {
+// val testConfig = ConfigFactory.parseString(
+// """
+// |kamon.metric.filters {
+// | accept-unmatched-categories = false
+// |
+// | some-category {
+// | includes = ["**"]
+// | excludes = ["not-me"]
+// | }
+// |
+// | only-includes {
+// | includes = ["only-me"]
+// | }
+// |
+// | only-excludes {
+// | excludes = ["not-me"]
+// | }
+// |
+// | specific-rules {
+// | includes = ["glob:/user/**", "regex:test-[0-5]"]
+// | }
+// |}
+// """.stripMargin
+// )
+//
+// "the entity filters" should {
+// "use the accept-unmatched-categories setting when there is no configuration for a given category" in {
+// val acceptUnmatched = Filter.fromConfig(ConfigFactory.parseString("kamon.metric.filters.accept-unmatched-categories=true"))
+// val rejectUnmatched = Filter.fromConfig(ConfigFactory.parseString("kamon.metric.filters.accept-unmatched-categories=false"))
+//
+// acceptUnmatched.accept(Entity("a", "b", Map.empty)) shouldBe true
+// rejectUnmatched.accept(Entity("a", "b", Map.empty)) shouldBe false
+// }
+//
+// "accept entities that are matched by any include and none exclude filters" in {
+// val entityFilter = Filter.fromConfig(testConfig)
+//
+// entityFilter.accept(Entity("anything", "anything", Map.empty)) shouldBe false
+// entityFilter.accept(Entity("anything", "some-category", Map.empty)) shouldBe true
+// entityFilter.accept(Entity("not-me", "some-category", Map.empty)) shouldBe false
+// }
+//
+// "allow configuring includes only or excludes only for any category" in {
+// val entityFilter = Filter.fromConfig(testConfig)
+//
+// entityFilter.accept(Entity("only-me", "only-includes", Map.empty)) shouldBe true
+// entityFilter.accept(Entity("anything", "only-includes", Map.empty)) shouldBe false
+// entityFilter.accept(Entity("any-other", "only-excludes", Map.empty)) shouldBe false
+// entityFilter.accept(Entity("not-me", "only-excludes", Map.empty)) shouldBe false
+// }
+//
+// "allow to explicitly decide whether patterns are treated as Glob or Regex" in {
+// val entityFilter = Filter.fromConfig(testConfig)
+//
+// entityFilter.accept(Entity("/user/accepted", "specific-rules", Map.empty)) shouldBe true
+// entityFilter.accept(Entity("/other/rejected/", "specific-rules", Map.empty)) shouldBe false
+// entityFilter.accept(Entity("test-5", "specific-rules", Map.empty)) shouldBe true
+// entityFilter.accept(Entity("test-6", "specific-rules", Map.empty)) shouldBe false
+// }
+// }
+//} \ No newline at end of file
diff --git a/kamon-core/src/test/scala/kamon/metric/RecorderRegistrySpec.scala b/kamon-core/src/test/scala/kamon/metric/RecorderRegistrySpec.scala
index d865e71b..1053aa5f 100644
--- a/kamon-core/src/test/scala/kamon/metric/RecorderRegistrySpec.scala
+++ b/kamon-core/src/test/scala/kamon/metric/RecorderRegistrySpec.scala
@@ -18,41 +18,41 @@ package kamon.metric
import com.typesafe.config.ConfigFactory
import org.scalatest.{Matchers, WordSpec}
-class RecorderRegistrySpec extends WordSpec with Matchers {
- private val testConfig = ConfigFactory.parseString(
- """
- |kamon.metric.filters {
- | accept-unmatched = false
- |
- | my-category {
- | includes = ["**"]
- | excludes = ["excluded"]
- | }
- |}
- """.stripMargin
- )
- private val recorderRegistry = new RecorderRegistryImpl(testConfig.withFallback(ConfigFactory.load()))
-
-
- "the RecorderRegistry" should {
- "create entity recorders as requested and always return the same instance for a given entity" in {
- val myFirstEntityRecorder = recorderRegistry.getRecorder(Entity("my-entity", "my-category", Map.empty))
- val mySecondEntityRecorder = recorderRegistry.getRecorder(Entity("my-entity", "my-category", Map.empty))
- mySecondEntityRecorder shouldBe theSameInstanceAs(myFirstEntityRecorder)
- }
-
- "properly advice regarding entity filtering read from configuration" in {
- recorderRegistry.shouldTrack(Entity("my-entity", "my-category", Map.empty)) shouldBe true
- recorderRegistry.shouldTrack(Entity("other-eny", "my-category", Map.empty)) shouldBe true
- recorderRegistry.shouldTrack(Entity("excluded", "my-category", Map.empty)) shouldBe false
- }
-
- "allow removing entities" in {
- val myFirstEntityRecorder = recorderRegistry.getRecorder(Entity("my-entity", "my-category", Map.empty))
- recorderRegistry.removeRecorder(Entity("my-entity", "my-category", Map.empty))
-
- val mySecondEntityRecorder = recorderRegistry.getRecorder(Entity("my-entity", "my-category", Map.empty))
- mySecondEntityRecorder shouldNot be theSameInstanceAs(myFirstEntityRecorder)
- }
- }
-}
+//class RecorderRegistrySpec extends WordSpec with Matchers {
+// private val testConfig = ConfigFactory.parseString(
+// """
+// |kamon.metric.filters {
+// | accept-unmatched = false
+// |
+// | my-category {
+// | includes = ["**"]
+// | excludes = ["excluded"]
+// | }
+// |}
+// """.stripMargin
+// )
+// private val recorderRegistry = new RecorderRegistryImpl(testConfig.withFallback(ConfigFactory.load()))
+//
+//
+// "the RecorderRegistry" should {
+// "create entity recorders as requested and always return the same instance for a given entity" in {
+// val myFirstEntityRecorder = recorderRegistry.getRecorder(Entity("my-entity", "my-category", Map.empty))
+// val mySecondEntityRecorder = recorderRegistry.getRecorder(Entity("my-entity", "my-category", Map.empty))
+// mySecondEntityRecorder shouldBe theSameInstanceAs(myFirstEntityRecorder)
+// }
+//
+// "properly advice regarding entity filtering read from configuration" in {
+// recorderRegistry.shouldTrack(Entity("my-entity", "my-category", Map.empty)) shouldBe true
+// recorderRegistry.shouldTrack(Entity("other-eny", "my-category", Map.empty)) shouldBe true
+// recorderRegistry.shouldTrack(Entity("excluded", "my-category", Map.empty)) shouldBe false
+// }
+//
+// "allow removing entities" in {
+// val myFirstEntityRecorder = recorderRegistry.getRecorder(Entity("my-entity", "my-category", Map.empty))
+// recorderRegistry.removeRecorder(Entity("my-entity", "my-category", Map.empty))
+//
+// val mySecondEntityRecorder = recorderRegistry.getRecorder(Entity("my-entity", "my-category", Map.empty))
+// mySecondEntityRecorder shouldNot be theSameInstanceAs(myFirstEntityRecorder)
+// }
+// }
+//}
diff --git a/kamon-core/src/test/scala/kamon/metric/instrument/CounterSpec.scala b/kamon-core/src/test/scala/kamon/metric/instrument/CounterSpec.scala
index d76b3613..b4e3fe96 100644
--- a/kamon-core/src/test/scala/kamon/metric/instrument/CounterSpec.scala
+++ b/kamon-core/src/test/scala/kamon/metric/instrument/CounterSpec.scala
@@ -1,46 +1,52 @@
+/* =========================================================================================
+ * Copyright © 2013-2017 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.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)
-//// }
-//// }
-//}
+import kamon.testkit.DefaultInstrumentFactory
+import org.scalatest.{Matchers, WordSpec}
+
+class CounterSpec extends WordSpec with Matchers with DefaultInstrumentFactory {
+
+ "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)
+
+ 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/MinMaxCounterSpec.scala b/kamon-core/src/test/scala/kamon/metric/instrument/MinMaxCounterSpec.scala
new file mode 100644
index 00000000..3de2f385
--- /dev/null
+++ b/kamon-core/src/test/scala/kamon/metric/instrument/MinMaxCounterSpec.scala
@@ -0,0 +1,90 @@
+/* =========================================================================================
+ * Copyright © 2013-2017 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.metric.instrument
+
+import kamon.metric.Bucket
+import kamon.testkit.DefaultInstrumentFactory
+import org.scalatest.{Matchers, WordSpec}
+
+case class TemporalBucket(value: Long, frequency: Long) extends Bucket
+
+class MinMaxCounterSpec extends WordSpec with Matchers with DefaultInstrumentFactory {
+
+ "a MinMaxCounter" should {
+
+ "track ascending tendencies" in {
+ val mmCounter = buildMinMaxCounter("track-ascending")
+ mmCounter.increment()
+ mmCounter.increment(3)
+ mmCounter.increment()
+
+ mmCounter.sample()
+
+ val snapshot = mmCounter.snapshot()
+
+ snapshot.distribution.min should be(0)
+ snapshot.distribution.max should be(5)
+ }
+
+ "track descending tendencies" in {
+ val mmCounter = buildMinMaxCounter("track-descending")
+ mmCounter.increment(5)
+ mmCounter.decrement()
+ mmCounter.decrement(3)
+ mmCounter.decrement()
+
+ mmCounter.sample()
+
+ val snapshot = mmCounter.snapshot()
+
+ snapshot.distribution.min should be(0)
+ snapshot.distribution.max should be(5)
+ }
+
+ "reset the min and max to the current value after taking a snapshot" in {
+ val mmCounter = buildMinMaxCounter("reset-min-max-to-current")
+
+ mmCounter.increment(5)
+ mmCounter.decrement(3)
+
+ mmCounter.sample()
+
+ val firstSnapshot = mmCounter.snapshot()
+
+ firstSnapshot.distribution.min should be(0)
+ firstSnapshot.distribution.max should be(5)
+
+ mmCounter.sample()
+
+ val secondSnapshot = mmCounter.snapshot()
+
+ secondSnapshot.distribution.min should be(2)
+ secondSnapshot.distribution.max should be(2)
+ }
+
+ "report zero as the min and current values if the current value fell bellow zero" in {
+ val mmCounter = buildMinMaxCounter("report-zero")
+
+ mmCounter.decrement(3)
+
+ val snapshot = mmCounter.snapshot()
+
+ snapshot.distribution.min should be(0)
+ snapshot.distribution.max should be(0)
+ }
+ }
+} \ No newline at end of file