1
0
mirror of https://github.com/open-telemetry/opentelemetry-go.git synced 2025-08-10 22:31:50 +02:00

openteracing: test SetTag and bridgeFieldEncoder in the opentracing bridge (#6570)

Fix #6544 
Fix #6545

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Damien Mathieu <42@dmathieu.com>
This commit is contained in:
ian
2025-04-03 17:53:45 +08:00
committed by GitHub
parent fd18c1f231
commit f713339685

View File

@@ -12,16 +12,16 @@ import (
"strings" "strings"
"testing" "testing"
otlog "github.com/opentracing/opentracing-go/log"
ot "github.com/opentracing/opentracing-go" ot "github.com/opentracing/opentracing-go"
"github.com/opentracing/opentracing-go/ext" "github.com/opentracing/opentracing-go/ext"
otlog "github.com/opentracing/opentracing-go/log"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require" "github.com/stretchr/testify/require"
"go.opentelemetry.io/otel" "go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/attribute" "go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/bridge/opentracing/internal" "go.opentelemetry.io/otel/bridge/opentracing/internal"
"go.opentelemetry.io/otel/codes"
"go.opentelemetry.io/otel/propagation" "go.opentelemetry.io/otel/propagation"
"go.opentelemetry.io/otel/trace" "go.opentelemetry.io/otel/trace"
) )
@@ -467,6 +467,64 @@ func Test_otTagToOTelAttr(t *testing.T) {
} }
} }
func TestBridgeSpan_SetTag(t *testing.T) {
tracer := internal.NewMockTracer()
b, _ := NewTracerPair(tracer)
testCases := []struct {
name string
key string
value interface{}
expected attribute.KeyValue
}{
// span kind is ignored
{
name: "span kind",
key: string(ext.SpanKind),
value: "span kind",
},
{
name: "error tag false",
key: string(ext.Error),
value: false,
},
{
name: "error tag true",
key: string(ext.Error),
value: true,
expected: internal.StatusCodeKey.Int(int(codes.Error)),
},
{
name: "default tag",
key: "string.key",
value: "string.value",
expected: attribute.String("string.key", "string.value"),
},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
span := b.StartSpan("test")
span.SetTag(tc.key, tc.value)
mockSpan := span.(*bridgeSpan).otelSpan.(*internal.MockSpan)
if tc.key == string(ext.SpanKind) {
assert.Empty(t, mockSpan.Attributes)
return
}
if tc.key == string(ext.Error) {
if v, ok := tc.value.(bool); !v && ok {
assert.Empty(t, mockSpan.Attributes)
return
}
}
assert.Contains(t, mockSpan.Attributes, tc.expected)
})
}
}
func Test_otTagsToOTelAttributesKindAndError(t *testing.T) { func Test_otTagsToOTelAttributesKindAndError(t *testing.T) {
tracer := internal.NewMockTracer() tracer := internal.NewMockTracer()
sc := &bridgeSpanContext{} sc := &bridgeSpanContext{}
@@ -668,6 +726,80 @@ func TestBridgeCarrierBaggagePropagation(t *testing.T) {
} }
} }
func TestBridgeFiledEncoder(t *testing.T) {
t.Run("emit string", func(t *testing.T) {
encoder := &bridgeFieldEncoder{}
encoder.EmitString("stringKey", "bar")
assert.Equal(t, attribute.String("stringKey", "bar"), encoder.pairs[0])
})
t.Run("emit bool", func(t *testing.T) {
encoder := &bridgeFieldEncoder{}
encoder.EmitBool("boolKey", true)
assert.Equal(t, attribute.Bool("boolKey", true), encoder.pairs[0])
})
t.Run("emit int", func(t *testing.T) {
encoder := &bridgeFieldEncoder{}
encoder.EmitInt("intKey", 123)
assert.Equal(t, attribute.Int("intKey", 123), encoder.pairs[0])
})
t.Run("emit int32", func(t *testing.T) {
encoder := &bridgeFieldEncoder{}
encoder.EmitInt32("int32Key", int32(123))
assert.Equal(t, attribute.Int("int32Key", 123), encoder.pairs[0])
})
t.Run("emit int64", func(t *testing.T) {
encoder := &bridgeFieldEncoder{}
encoder.EmitInt64("int64Key", int64(123))
assert.Equal(t, attribute.Int("int64Key", 123), encoder.pairs[0])
})
t.Run("emit uint32", func(t *testing.T) {
encoder := &bridgeFieldEncoder{}
encoder.EmitUint32("uint32Key", uint32(123))
assert.Equal(t, attribute.Int64("uint32Key", 123), encoder.pairs[0])
})
t.Run("emit uint64", func(t *testing.T) {
encoder := &bridgeFieldEncoder{}
encoder.EmitUint64("uint64Key", uint64(123))
assert.Equal(t, attribute.String("uint64Key", strconv.FormatUint(123, 10)), encoder.pairs[0])
})
t.Run("emit float32", func(t *testing.T) {
encoder := &bridgeFieldEncoder{}
encoder.EmitFloat32("float32Key", float32(1.1))
attr := encoder.pairs[0]
assert.InDelta(t, float32(1.1), attr.Value.AsFloat64(), 0.0001)
})
t.Run("emit float64", func(t *testing.T) {
encoder := &bridgeFieldEncoder{}
encoder.EmitFloat64("float64Key", 1.1)
assert.Equal(t, attribute.Float64("float64Key", 1.1), encoder.pairs[0])
})
t.Run("emit object", func(t *testing.T) {
encoder := &bridgeFieldEncoder{}
encoder.EmitObject("objectKey", struct{}{})
assert.Equal(t, attribute.String("objectKey", "{}"), encoder.pairs[0])
})
t.Run("emit logger", func(t *testing.T) {
encoder := &bridgeFieldEncoder{}
called := false
encoder.EmitLazyLogger(func(oe otlog.Encoder) {
called = true
oe.EmitString("lazy", "value")
})
assert.True(t, called)
assert.Equal(t, attribute.String("lazy", "value"), encoder.pairs[0])
})
}
func TestBridgeSpan_LogFields(t *testing.T) { func TestBridgeSpan_LogFields(t *testing.T) {
testCases := []struct { testCases := []struct {
name string name string