github.com/muhammadn/cortex@v1.9.1-0.20220510110439-46bb7000d03d/pkg/util/spanlogger/spanlogger_test.go (about)

     1  package spanlogger
     2  
     3  import (
     4  	"context"
     5  	"testing"
     6  
     7  	"github.com/go-kit/log"
     8  	"github.com/opentracing/opentracing-go"
     9  	"github.com/opentracing/opentracing-go/mocktracer"
    10  	"github.com/pkg/errors"
    11  	"github.com/stretchr/testify/require"
    12  	"github.com/weaveworks/common/user"
    13  )
    14  
    15  func TestSpanLogger_Log(t *testing.T) {
    16  	span, ctx := New(context.Background(), "test", "bar")
    17  	_ = span.Log("foo")
    18  	newSpan := FromContext(ctx)
    19  	require.Equal(t, span.Span, newSpan.Span)
    20  	_ = newSpan.Log("bar")
    21  	noSpan := FromContext(context.Background())
    22  	_ = noSpan.Log("foo")
    23  	require.Error(t, noSpan.Error(errors.New("err")))
    24  	require.NoError(t, noSpan.Error(nil))
    25  }
    26  
    27  func TestSpanLogger_CustomLogger(t *testing.T) {
    28  	var logged [][]interface{}
    29  	var logger funcLogger = func(keyvals ...interface{}) error {
    30  		logged = append(logged, keyvals)
    31  		return nil
    32  	}
    33  	span, ctx := NewWithLogger(context.Background(), logger, "test")
    34  	_ = span.Log("msg", "original spanlogger")
    35  
    36  	span = FromContextWithFallback(ctx, log.NewNopLogger())
    37  	_ = span.Log("msg", "restored spanlogger")
    38  
    39  	span = FromContextWithFallback(context.Background(), logger)
    40  	_ = span.Log("msg", "fallback spanlogger")
    41  
    42  	expect := [][]interface{}{
    43  		{"method", "test", "msg", "original spanlogger"},
    44  		{"msg", "restored spanlogger"},
    45  		{"msg", "fallback spanlogger"},
    46  	}
    47  	require.Equal(t, expect, logged)
    48  }
    49  
    50  func TestSpanCreatedWithTenantTag(t *testing.T) {
    51  	mockSpan := createSpan(user.InjectOrgID(context.Background(), "team-a"))
    52  
    53  	require.Equal(t, []string{"team-a"}, mockSpan.Tag(TenantIDTagName))
    54  }
    55  
    56  func TestSpanCreatedWithoutTenantTag(t *testing.T) {
    57  	mockSpan := createSpan(context.Background())
    58  
    59  	_, exist := mockSpan.Tags()[TenantIDTagName]
    60  	require.False(t, exist)
    61  }
    62  
    63  func createSpan(ctx context.Context) *mocktracer.MockSpan {
    64  	mockTracer := mocktracer.New()
    65  	opentracing.SetGlobalTracer(mockTracer)
    66  
    67  	logger, _ := New(ctx, "name")
    68  	return logger.Span.(*mocktracer.MockSpan)
    69  }
    70  
    71  type funcLogger func(keyvals ...interface{}) error
    72  
    73  func (f funcLogger) Log(keyvals ...interface{}) error {
    74  	return f(keyvals...)
    75  }