Files
grafana/pkg/storage/unified/resource/grpc/authenticator_test.go
T
Peter Štibraný eeb01126b3 grpc: wrapContext should not replace existing metadata, but append to it. (#107126)
* grpc: wrapContext should not replace existing metadata, but append to it.

* Add test for wrapContext if there's no previous metadata.

* Rename encodeIdentityInMetadata to encodeIdentityInMetadataPairs
2025-06-25 08:06:45 +00:00

65 lines
1.8 KiB
Go

package grpc
import (
"context"
"testing"
"github.com/stretchr/testify/require"
"google.golang.org/grpc/metadata"
claims "github.com/grafana/authlib/types"
"go.opentelemetry.io/otel/trace/noop"
"github.com/grafana/grafana/pkg/apimachinery/identity"
)
func TestBasicEncodeDecode(t *testing.T) {
before := &identity.StaticRequester{
UserID: 123,
UserUID: "abc",
Login: "test",
Type: claims.TypeUser,
OrgID: 456,
OrgRole: identity.RoleAdmin,
}
auth := &Authenticator{Tracer: noop.NewTracerProvider().Tracer("")}
md := encodeIdentityInMetadataPairs(before)
after, err := auth.decodeMetadata(metadata.Pairs(md...))
require.NoError(t, err)
require.Equal(t, before.GetID(), after.GetID())
require.Equal(t, before.GetUID(), after.GetUID())
require.Equal(t, before.GetIdentityType(), after.GetIdentityType())
require.Equal(t, before.GetLogin(), after.GetLogin())
require.Equal(t, before.GetOrgID(), after.GetOrgID())
require.Equal(t, before.GetOrgName(), after.GetOrgName())
require.Equal(t, before.GetOrgRole(), after.GetOrgRole())
}
func TestWrapContext(t *testing.T) {
const key = "some-random-metadata"
ctx := metadata.NewOutgoingContext(context.Background(), metadata.Pairs(key, "random-metadata"))
ctx, _ = identity.WithServiceIdentity(ctx, 12345)
var err error
ctx, err = wrapContext(ctx)
require.NoError(t, err)
outmd, ok := metadata.FromOutgoingContext(ctx)
require.True(t, ok)
val := outmd.Get(key)
require.Equal(t, []string{"random-metadata"}, val)
}
func TestWrapContextWithNoPreviousMetadata(t *testing.T) {
ctx, _ := identity.WithServiceIdentity(context.Background(), 12345)
ctx, err := wrapContext(ctx)
require.NoError(t, err)
outmd, ok := metadata.FromOutgoingContext(ctx)
require.True(t, ok)
val := outmd.Get(mdOrgID)
require.Equal(t, []string{"12345"}, val)
}