From 5754acae57ea6723a1872d1289a26748bea08ced Mon Sep 17 00:00:00 2001 From: "dean.wang" Date: Thu, 18 Jun 2026 13:31:40 +0800 Subject: [PATCH] add test for buldOpts error path --- .../caddyhttp/tracing/tracerprovider_test.go | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/modules/caddyhttp/tracing/tracerprovider_test.go b/modules/caddyhttp/tracing/tracerprovider_test.go index 80123f261..bb86e49f5 100644 --- a/modules/caddyhttp/tracing/tracerprovider_test.go +++ b/modules/caddyhttp/tracing/tracerprovider_test.go @@ -1,6 +1,7 @@ package tracing import ( + "errors" "testing" sdktrace "go.opentelemetry.io/otel/sdk/trace" @@ -74,3 +75,28 @@ func Test_tracersProvider_buildOptsOnlyOnCreate(t *testing.T) { t.Errorf("Tracer providers counter should equal to 6, got %d", tp.tracerProvidersCounter) } } + +// Test_tracersProvider_buildOptsError verifies that an error from buildOpts is +// propagated and that no provider is created nor the counter incremented, so a +// failed build leaves the tracerProvider in its initial state. +func Test_tracersProvider_buildOptsError(t *testing.T) { + tp := tracerProvider{} + + wantErr := errors.New("build failed") + build := func() ([]sdktrace.TracerProviderOption, error) { + return nil, wantErr + } + + _, err := tp.getTracerProvider(build) + if !errors.Is(err, wantErr) { + t.Errorf("Expected error %v, got %v", wantErr, err) + } + + if tp.tracerProvider != nil { + t.Errorf("There should be no tracer provider when buildOpts fails") + } + + if tp.tracerProvidersCounter != 0 { + t.Errorf("Tracer providers counter should equal to 0, got %d", tp.tracerProvidersCounter) + } +}