github.com/ydb-platform/ydb-go-sdk/v3@v3.89.2/internal/meta/trace_id_test.go (about) 1 package meta 2 3 import ( 4 "context" 5 "errors" 6 "testing" 7 8 "github.com/google/uuid" 9 "github.com/stretchr/testify/require" 10 "google.golang.org/grpc/metadata" 11 ) 12 13 func TestTraceID(t *testing.T) { 14 t.Run("TraceID from rand", func(t *testing.T) { 15 ctx, id, err := TraceID( 16 context.Background(), 17 func(opts *newTraceIDOpts) { 18 opts.newRandom = func() (uuid.UUID, error) { 19 return uuid.UUID{}, nil 20 } 21 }, 22 ) 23 require.NoError(t, err) 24 require.Equal(t, "00000000-0000-0000-0000-000000000000", id) 25 md, has := metadata.FromOutgoingContext(ctx) 26 require.True(t, has) 27 require.Len(t, md[HeaderTraceID], 1) 28 require.Equal(t, id, md[HeaderTraceID][0]) 29 }) 30 t.Run("TraceID from rand failed", func(t *testing.T) { 31 _, _, err := TraceID( 32 context.Background(), 33 func(opts *newTraceIDOpts) { 34 opts.newRandom = func() (uuid.UUID, error) { 35 return uuid.UUID{}, errors.New("") 36 } 37 }, 38 ) 39 require.Error(t, err) 40 }) 41 t.Run("TraceID from outgoing metadata", func(t *testing.T) { 42 ctx, id, err := TraceID( 43 WithTraceID(context.Background(), "{test}"), 44 func(opts *newTraceIDOpts) { 45 opts.newRandom = func() (uuid.UUID, error) { 46 return uuid.UUID{}, errors.New("") 47 } 48 }, 49 ) 50 require.NoError(t, err) 51 require.Equal(t, "{test}", id) 52 md, has := metadata.FromOutgoingContext(ctx) 53 require.True(t, has) 54 require.Len(t, md[HeaderTraceID], 1) 55 require.Equal(t, id, md[HeaderTraceID][0]) 56 }) 57 }