aboutsummaryrefslogtreecommitdiff
path: root/kamon-core-tests
diff options
context:
space:
mode:
authorIvan Topolnjak <ivantopo@gmail.com>2017-08-21 09:23:07 +0200
committerIvan Topolnjak <ivantopo@gmail.com>2017-08-21 10:37:08 +0200
commita152a3098b564ed43766a857b32b7c7d7445f9ce (patch)
tree7651f61e598f316ee9dca415c5a5c67ce530bad5 /kamon-core-tests
parent3cb974e5dfd381b9b28ffef9977047cf35242121 (diff)
downloadKamon-a152a3098b564ed43766a857b32b7c7d7445f9ce.tar.gz
Kamon-a152a3098b564ed43766a857b32b7c7d7445f9ce.tar.bz2
Kamon-a152a3098b564ed43766a857b32b7c7d7445f9ce.zip
binary encoding of context and entries
Diffstat (limited to 'kamon-core-tests')
-rw-r--r--kamon-core-tests/src/test/scala/kamon/context/ContextCodecSpec.scala100
1 files changed, 96 insertions, 4 deletions
diff --git a/kamon-core-tests/src/test/scala/kamon/context/ContextCodecSpec.scala b/kamon-core-tests/src/test/scala/kamon/context/ContextCodecSpec.scala
index 242c3345..ceac4e58 100644
--- a/kamon-core-tests/src/test/scala/kamon/context/ContextCodecSpec.scala
+++ b/kamon-core-tests/src/test/scala/kamon/context/ContextCodecSpec.scala
@@ -1,18 +1,110 @@
package kamon.context
+import java.nio.ByteBuffer
+
import kamon.Kamon
-import org.scalatest.{Matchers, WordSpec}
+import kamon.testkit.ContextTesting
+import org.scalatest.{Matchers, OptionValues, WordSpec}
-class ContextCodecSpec extends WordSpec with Matchers {
+class ContextCodecSpec extends WordSpec with Matchers with ContextTesting with OptionValues {
"the Context Codec" when {
"encoding/decoding to HttpHeaders" should {
- "encode stuff" in {
+ "round trip a empty context" in {
+ val textMap = ContextCodec.HttpHeaders.encode(Context.Empty)
+ val decodedContext = ContextCodec.HttpHeaders.decode(textMap)
+
+ decodedContext shouldBe Context.Empty
+ }
+
+ "round trip a context with only local keys" in {
+ val localOnlyContext = Context.create(StringKey, Some("string-value"))
+ val textMap = ContextCodec.HttpHeaders.encode(localOnlyContext)
+ val decodedContext = ContextCodec.HttpHeaders.decode(textMap)
+
+ decodedContext shouldBe Context.Empty
+ }
+
+ "round trip a context with local and broadcast keys" in {
+ val initialContext = Context.create()
+ .withKey(StringKey, Some("string-value"))
+ .withKey(StringBroadcastKey, Some("this-should-be-round-tripped"))
+
+ val textMap = ContextCodec.HttpHeaders.encode(initialContext)
+ val decodedContext = ContextCodec.HttpHeaders.decode(textMap)
+
+ decodedContext.get(StringKey) shouldBe empty
+ decodedContext.get(StringBroadcastKey).value shouldBe "this-should-be-round-tripped"
+ }
+ }
+
+ "encoding/decoding to Binary" should {
+ "round trip a empty context" in {
+ val byteBuffer = ContextCodec.Binary.encode(Context.Empty)
+
+ val decodedContext = ContextCodec.Binary.decode(byteBuffer)
+
+ decodedContext shouldBe Context.Empty
+ }
+
+ "round trip a context with only local keys" in {
+ val localOnlyContext = Context.create(StringKey, Some("string-value"))
+ val byteBuffer = ContextCodec.Binary.encode(localOnlyContext)
+ val decodedContext = ContextCodec.Binary.decode(byteBuffer)
+
+ decodedContext shouldBe Context.Empty
+ }
+ "round trip a context with local and broadcast keys" in {
+ val initialContext = Context.create()
+ .withKey(StringKey, Some("string-value"))
+ .withKey(StringBroadcastKey, Some("this-should-be-round-tripped"))
+ val byteBuffer = ContextCodec.Binary.encode(initialContext)
+ val decodedContext = ContextCodec.Binary.decode(byteBuffer)
+ decodedContext.get(StringKey) shouldBe empty
+ decodedContext.get(StringBroadcastKey).value shouldBe "this-should-be-round-tripped"
}
}
}
- val ContextCodec = new Codec(Kamon.config())
+ val ContextCodec = new Codecs(Kamon.config())
+}
+
+object SimpleStringCodec {
+ final class Headers extends Codecs.ForEntry[TextMap] {
+ private val dataKey = "X-String-Value"
+
+ override def encode(context: Context): TextMap = {
+ val textMap = TextMap.Default()
+ context.get(ContextTesting.StringBroadcastKey).foreach { value =>
+ textMap.put(dataKey, value)
+ }
+
+ textMap
+ }
+
+ override def decode(carrier: TextMap, context: Context): Context = {
+ carrier.get(dataKey) match {
+ case value @ Some(_) => context.withKey(ContextTesting.StringBroadcastKey, value)
+ case None => context
+ }
+ }
+ }
+
+ final class Binary extends Codecs.ForEntry[ByteBuffer] {
+ val emptyBuffer = ByteBuffer.allocate(0)
+
+ override def encode(context: Context): ByteBuffer = {
+ context.get(ContextTesting.StringBroadcastKey) match {
+ case Some(value) => ByteBuffer.wrap(value.getBytes)
+ case None => emptyBuffer
+ }
+ }
+
+ override def decode(carrier: ByteBuffer, context: Context): Context = {
+ context.withKey(ContextTesting.StringBroadcastKey, Some(new String(carrier.array())))
+ }
+ }
+
}