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  }