1
0
mirror of https://github.com/open-telemetry/opentelemetry-go.git synced 2025-11-23 22:34:47 +02:00
Files
opentelemetry-go/trace/context_test.go
Flc゛ 80cb909774 refactor: replace context.Background() with t.Context()/b.Context() in tests (#7352)
Based on the Go version we currently use, the dependency already
supports 1.24+, which allows using `t.Context()` and `b.Context()` in
unit tests and benchmarks respectively.

- Enable `context-background` and `context-todo` in
[`usetesting`](https://golangci-lint.run/docs/linters/configuration/#usetesting)
- Adjust the code to support linter detection

---------

Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
Co-authored-by: Tyler Yahn <codingalias@gmail.com>
Co-authored-by: Damien Mathieu <42@dmathieu.com>
2025-09-23 09:52:45 +02:00

93 lines
2.2 KiB
Go

// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
package trace // import "go.opentelemetry.io/otel/trace"
import (
"context"
"testing"
"github.com/stretchr/testify/assert"
)
type testSpan struct {
noopSpan
ID byte
Remote bool
}
func (s testSpan) SpanContext() SpanContext {
return SpanContext{
traceID: [16]byte{1},
spanID: [8]byte{s.ID},
remote: s.Remote,
}
}
var (
emptySpan = noopSpan{}
localSpan = testSpan{ID: 1, Remote: false}
remoteSpan = testSpan{ID: 1, Remote: true}
wrappedSpan = nonRecordingSpan{sc: remoteSpan.SpanContext()}
)
func TestSpanFromContext(t *testing.T) {
testCases := []struct {
name string
context context.Context
expectedSpan Span
}{
{
name: "empty context",
context: nil,
expectedSpan: emptySpan,
},
{
name: "background context",
context: t.Context(),
expectedSpan: emptySpan,
},
{
name: "local span",
context: ContextWithSpan(t.Context(), localSpan),
expectedSpan: localSpan,
},
{
name: "remote span",
context: ContextWithSpan(t.Context(), remoteSpan),
expectedSpan: remoteSpan,
},
{
name: "wrapped remote span",
context: ContextWithRemoteSpanContext(t.Context(), remoteSpan.SpanContext()),
expectedSpan: wrappedSpan,
},
{
name: "wrapped local span becomes remote",
context: ContextWithRemoteSpanContext(t.Context(), localSpan.SpanContext()),
expectedSpan: wrappedSpan,
},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
assert.Equal(t, tc.expectedSpan, SpanFromContext(tc.context))
// Ensure SpanContextFromContext is just
// SpanFromContext(…).SpanContext().
assert.Equal(t, tc.expectedSpan.SpanContext(), SpanContextFromContext(tc.context))
// Check that SpanFromContext does not produce any heap allocation.
assert.Equal(t, 0.0, testing.AllocsPerRun(5, func() {
SpanFromContext(tc.context)
}), "SpanFromContext allocs")
// Check that SpanContextFromContext does not produce any heap allocation.
assert.Equal(t, 0.0, testing.AllocsPerRun(5, func() {
SpanContextFromContext(tc.context)
}), "SpanContextFromContext allocs")
})
}
}