diff --git a/DebugProbe.AspNetCore.Tests/Configuration/DebugProbeOptionsTests.cs b/DebugProbe.AspNetCore.Tests/Configuration/DebugProbeOptionsTests.cs index e7cbc14..69f760a 100644 --- a/DebugProbe.AspNetCore.Tests/Configuration/DebugProbeOptionsTests.cs +++ b/DebugProbe.AspNetCore.Tests/Configuration/DebugProbeOptionsTests.cs @@ -60,4 +60,31 @@ public void Custom_options_are_registered_and_used() Assert.Equal("***", options.RedactionText); Assert.NotNull(store.Environment); } + [Fact] + public void MaxEntries_zero_throws_InvalidOperationException() + { + var services = new ServiceCollection(); + + var exception = Assert.Throws(() => + services.AddDebugProbe(options => + { + options.MaxEntries = 0; + })); + + Assert.Contains("MaxEntries", exception.Message); + } + + [Fact] + public void MaxEntries_negative_throws_InvalidOperationException() + { + var services = new ServiceCollection(); + + var exception = Assert.Throws(() => + services.AddDebugProbe(options => + { + options.MaxEntries = -1; + })); + + Assert.Contains("MaxEntries", exception.Message); + } } diff --git a/DebugProbe.AspNetCore/Extensions/DebugProbeExtensions.cs b/DebugProbe.AspNetCore/Extensions/DebugProbeExtensions.cs index 9bb5522..229465a 100644 --- a/DebugProbe.AspNetCore/Extensions/DebugProbeExtensions.cs +++ b/DebugProbe.AspNetCore/Extensions/DebugProbeExtensions.cs @@ -36,6 +36,11 @@ public static IServiceCollection AddDebugProbe(this IServiceCollection services, configure?.Invoke(options); + var validator = new DebugProbeOptionsValidator(); + var result = validator.Validate(null, options); + if (result.Failed) + throw new InvalidOperationException(result.FailureMessage); + services.AddSingleton(options); services.AddSingleton(); diff --git a/DebugProbe.AspNetCore/Options/DebugProbeOptionsValidator.cs b/DebugProbe.AspNetCore/Options/DebugProbeOptionsValidator.cs new file mode 100644 index 0000000..008a002 --- /dev/null +++ b/DebugProbe.AspNetCore/Options/DebugProbeOptionsValidator.cs @@ -0,0 +1,22 @@ +using Microsoft.Extensions.Options; + +namespace DebugProbe.AspNetCore.Options; + +internal sealed class DebugProbeOptionsValidator + : IValidateOptions +{ + public ValidateOptionsResult Validate( + string? name, + DebugProbeOptions options) + { + if (options.MaxEntries < 1) + { + return ValidateOptionsResult.Fail( + $"DebugProbe configuration is invalid. " + + $"MaxEntries must be greater than or equal to 1. " + + $"Provided value: {options.MaxEntries}."); + } + + return ValidateOptionsResult.Success; + } +} \ No newline at end of file