diff --git a/tracer/ebpf_integration_test.go b/tracer/ebpf_integration_test.go index 511fdfdf2..b14816d0b 100644 --- a/tracer/ebpf_integration_test.go +++ b/tracer/ebpf_integration_test.go @@ -8,6 +8,7 @@ package tracer_test import ( "context" "math" + "os" "runtime" "slices" "sync" @@ -29,6 +30,13 @@ import ( "go.opentelemetry.io/otel/metric/noop" ) +func TestMain(m *testing.M) { + // Initialize metrics once to avoid concurrent map access between + // metrics.Start() and metrics.AddSlice() called from lingering periodiccaller goroutines. + metrics.Start(noop.Meter{}) + os.Exit(m.Run()) +} + type mockIntervals struct{} func (mockIntervals) MonitorInterval() time.Duration { return 1 * time.Second } @@ -91,8 +99,6 @@ func TestTracerErrorPropagation(t *testing.T) { ctx, cancelFn := context.WithCancel(t.Context()) defer cancelFn() - metrics.Start(noop.Meter{}) - tr, err := tracer.NewTracer(ctx, &tracer.Config{ Intervals: &mockIntervals{}, FilterErrorFrames: false, @@ -135,8 +141,6 @@ func TestTracerMapMonitorsError(t *testing.T) { ctx, cancelFn := context.WithCancel(t.Context()) defer cancelFn() - metrics.Start(noop.Meter{}) - tr, err := tracer.NewTracer(ctx, &tracer.Config{ Intervals: &mockIntervals{}, FilterErrorFrames: false, @@ -163,8 +167,6 @@ func TestTraceTransmissionAndParsing(t *testing.T) { ctx, cancelFn := context.WithCancel(t.Context()) defer cancelFn() - metrics.Start(noop.Meter{}) - enabledTracers, _ := tracertypes.Parse("") enabledTracers.Enable(tracertypes.PythonTracer) tr, err := tracer.NewTracer(ctx, &tracer.Config{