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) + } +}