Vasiliy Tolstov
9704ef2e5e
Co-authored-by: Aleksandr Tolstikhin <atolstikhin@mtsbank.ru> Reviewed-on: #365 Co-authored-by: Vasiliy Tolstov <v.tolstov@unistack.org> Co-committed-by: Vasiliy Tolstov <v.tolstov@unistack.org>
234 lines
4.5 KiB
Go
234 lines
4.5 KiB
Go
package metadata
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
)
|
|
|
|
func TestMultipleUsage(t *testing.T) {
|
|
ctx := context.TODO()
|
|
md := New(0)
|
|
md.Set("key1_1", "val1_1", "key1_2", "val1_2", "key1_3", "val1_3")
|
|
ctx = NewIncomingContext(ctx, Copy(md))
|
|
ctx = NewOutgoingContext(ctx, Copy(md))
|
|
imd, _ := FromIncomingContext(ctx)
|
|
omd, _ := FromOutgoingContext(ctx)
|
|
_ = func(x context.Context) context.Context {
|
|
m, _ := FromIncomingContext(x)
|
|
m.Del("key1_2")
|
|
return ctx
|
|
}(ctx)
|
|
_ = func(x context.Context) context.Context {
|
|
m, _ := FromIncomingContext(x)
|
|
m.Del("key1_3")
|
|
return ctx
|
|
}(ctx)
|
|
t.Logf("imd %#+v", imd)
|
|
t.Logf("omd %#+v", omd)
|
|
}
|
|
|
|
func TestMetadataSetMultiple(t *testing.T) {
|
|
md := New(4)
|
|
md.Set("key1", "val1", "key2", "val2", "key3")
|
|
|
|
if v, ok := md.Get("key1"); !ok || v != "val1" {
|
|
t.Fatalf("invalid kv %#+v", md)
|
|
}
|
|
if v, ok := md.Get("key2"); !ok || v != "val2" {
|
|
t.Fatalf("invalid kv %#+v", md)
|
|
}
|
|
if _, ok := md.Get("key3"); ok {
|
|
t.Fatalf("invalid kv %#+v", md)
|
|
}
|
|
}
|
|
|
|
func TestAppend(t *testing.T) {
|
|
ctx := context.Background()
|
|
ctx = AppendIncomingContext(ctx, "key1", "val1", "key2", "val2")
|
|
md, ok := FromIncomingContext(ctx)
|
|
if !ok {
|
|
t.Fatal("metadata empty")
|
|
}
|
|
if _, ok := md.Get("key1"); !ok {
|
|
t.Fatal("key1 not found")
|
|
}
|
|
}
|
|
|
|
func TestPairs(t *testing.T) {
|
|
md, ok := Pairs("key1", "val1", "key2", "val2")
|
|
if !ok {
|
|
t.Fatal("odd number of kv")
|
|
}
|
|
if _, ok = md.Get("key1"); !ok {
|
|
t.Fatal("key1 not found")
|
|
}
|
|
}
|
|
|
|
func testCtx(ctx context.Context) {
|
|
md := New(2)
|
|
md.Set("Key1", "Val1_new")
|
|
md.Set("Key3", "Val3")
|
|
SetOutgoingContext(ctx, md)
|
|
}
|
|
|
|
func TestPassing(t *testing.T) {
|
|
ctx := context.TODO()
|
|
md1 := New(2)
|
|
md1.Set("Key1", "Val1")
|
|
md1.Set("Key2", "Val2")
|
|
|
|
ctx = NewIncomingContext(ctx, md1)
|
|
testCtx(ctx)
|
|
md, ok := FromOutgoingContext(ctx)
|
|
if ok {
|
|
t.Fatalf("create outgoing context")
|
|
}
|
|
_ = md
|
|
|
|
ctx = NewOutgoingContext(ctx, New(1))
|
|
testCtx(ctx)
|
|
md, ok = FromOutgoingContext(ctx)
|
|
if !ok {
|
|
t.Fatalf("missing metadata from outgoing context")
|
|
}
|
|
if v, ok := md.Get("Key1"); !ok || v != "Val1_new" {
|
|
t.Fatalf("invalid metadata value %#+v", md)
|
|
}
|
|
}
|
|
|
|
func TestMerge(t *testing.T) {
|
|
omd := Metadata{
|
|
"key1": "val1",
|
|
}
|
|
mmd := Metadata{
|
|
"key2": "val2",
|
|
}
|
|
|
|
nmd := Merge(omd, mmd, true)
|
|
if len(nmd) != 2 {
|
|
t.Fatalf("merge failed: %v", nmd)
|
|
}
|
|
}
|
|
|
|
func TestIterator(t *testing.T) {
|
|
md := Metadata{
|
|
"1Last": "last",
|
|
"2First": "first",
|
|
"3Second": "second",
|
|
}
|
|
|
|
iter := md.Iterator()
|
|
var k, v string
|
|
|
|
for iter.Next(&k, &v) {
|
|
// fmt.Printf("k: %s, v: %s\n", k, v)
|
|
}
|
|
}
|
|
|
|
func TestMedataCanonicalKey(t *testing.T) {
|
|
md := New(1)
|
|
md.Set("x-request-id", "12345")
|
|
v, ok := md.Get("x-request-id")
|
|
if !ok {
|
|
t.Fatalf("failed to get x-request-id")
|
|
} else if v != "12345" {
|
|
t.Fatalf("invalid metadata value: %s != %s", "12345", v)
|
|
}
|
|
|
|
v, ok = md.Get("X-Request-Id")
|
|
if !ok {
|
|
t.Fatalf("failed to get x-request-id")
|
|
} else if v != "12345" {
|
|
t.Fatalf("invalid metadata value: %s != %s", "12345", v)
|
|
}
|
|
v, ok = md.Get("X-Request-ID")
|
|
if !ok {
|
|
t.Fatalf("failed to get x-request-id")
|
|
} else if v != "12345" {
|
|
t.Fatalf("invalid metadata value: %s != %s", "12345", v)
|
|
}
|
|
}
|
|
|
|
func TestMetadataSet(t *testing.T) {
|
|
md := New(1)
|
|
|
|
md.Set("Key", "val")
|
|
|
|
val, ok := md.Get("Key")
|
|
if !ok {
|
|
t.Fatal("key Key not found")
|
|
}
|
|
if val != "val" {
|
|
t.Errorf("key Key with value val != %v", val)
|
|
}
|
|
}
|
|
|
|
func TestMetadataDelete(t *testing.T) {
|
|
md := Metadata{
|
|
"Foo": "bar",
|
|
"Baz": "empty",
|
|
}
|
|
|
|
md.Del("Baz")
|
|
_, ok := md.Get("Baz")
|
|
if ok {
|
|
t.Fatal("key Baz not deleted")
|
|
}
|
|
}
|
|
|
|
func TestNilContext(t *testing.T) {
|
|
var ctx context.Context
|
|
|
|
_, ok := FromContext(ctx)
|
|
if ok {
|
|
t.Fatal("nil context")
|
|
}
|
|
}
|
|
|
|
func TestMetadataCopy(t *testing.T) {
|
|
md := Metadata{
|
|
"Foo": "bar",
|
|
"Bar": "baz",
|
|
}
|
|
|
|
cp := Copy(md)
|
|
|
|
for k, v := range md {
|
|
if cv := cp[k]; cv != v {
|
|
t.Fatalf("Got %s:%s for %s:%s", k, cv, k, v)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestMetadataContext(t *testing.T) {
|
|
md := Metadata{
|
|
"Foo": "bar",
|
|
}
|
|
|
|
ctx := NewContext(context.TODO(), md)
|
|
|
|
emd, ok := FromContext(ctx)
|
|
if !ok {
|
|
t.Errorf("Unexpected error retrieving metadata, got %t", ok)
|
|
}
|
|
|
|
if emd["Foo"] != md["Foo"] {
|
|
t.Errorf("Expected key: %s val: %s, got key: %s val: %s", "Foo", md["Foo"], "Foo", emd["Foo"])
|
|
}
|
|
|
|
if i := len(emd); i != 1 {
|
|
t.Errorf("Expected metadata length 1 got %d", i)
|
|
}
|
|
}
|
|
|
|
func TestCopy(t *testing.T) {
|
|
md := New(2)
|
|
md.Set("key1", "val1", "key2", "val2")
|
|
nmd := Copy(md, "key2")
|
|
if len(nmd) != 1 {
|
|
t.Fatal("Copy exclude not works")
|
|
} else if nmd["Key1"] != "val1" {
|
|
t.Fatal("Copy exclude not works")
|
|
}
|
|
}
|