metadata: fix for grpc case (#370)
All checks were successful
test / test (push) Successful in 42s

Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
Reviewed-on: #370
This commit is contained in:
Василий Толстов 2024-12-09 19:06:49 +03:00
parent 38c5fe8b5a
commit 2b62ad04f2
2 changed files with 15 additions and 0 deletions

View File

@ -4,6 +4,7 @@ package metadata
import ( import (
"net/textproto" "net/textproto"
"sort" "sort"
"strings"
) )
var ( var (
@ -73,6 +74,9 @@ func (md Metadata) Get(key string) (string, bool) {
if !ok { if !ok {
// slow path // slow path
val, ok = md[textproto.CanonicalMIMEHeaderKey(key)] val, ok = md[textproto.CanonicalMIMEHeaderKey(key)]
if !ok {
val, ok = md[strings.ToLower(key)]
}
} }
return val, ok return val, ok
} }
@ -94,6 +98,8 @@ func (md Metadata) Del(keys ...string) {
delete(md, key) delete(md, key)
// slow path // slow path
delete(md, textproto.CanonicalMIMEHeaderKey(key)) delete(md, textproto.CanonicalMIMEHeaderKey(key))
// very slow path
delete(md, strings.ToLower(key))
} }
} }

View File

@ -5,6 +5,15 @@ import (
"testing" "testing"
) )
func TestLowercase(t *testing.T) {
md := New(1)
md["x-request-id"] = "12345"
v, ok := md.Get("X-Request-Id")
if !ok || v == "" {
t.Fatalf("metadata invalid %#+v", md)
}
}
func TestMultipleUsage(t *testing.T) { func TestMultipleUsage(t *testing.T) {
ctx := context.TODO() ctx := context.TODO()
md := New(0) md := New(0)