From 3f54474c6a03fe50ab53c492ac55e29741ded05d Mon Sep 17 00:00:00 2001 From: Martin Tomka Date: Mon, 15 Jan 2024 13:34:27 +0100 Subject: [PATCH 1/2] Do not encourage returning the same instance from chaos strategies --- src/Polly.Core/PublicAPI.Unshipped.txt | 2 -- .../Fault/FaultPipelineBuilderExtensions.cs | 20 ------------ .../OutcomePipelineBuilderExtensions.cs | 24 -------------- ...aultChaosPipelineBuilderExtensionsTests.cs | 31 ------------------- ...comeChaosPipelineBuilderExtensionsTests.cs | 11 ------- 5 files changed, 88 deletions(-) diff --git a/src/Polly.Core/PublicAPI.Unshipped.txt b/src/Polly.Core/PublicAPI.Unshipped.txt index 14a878b70e0..049a4157934 100644 --- a/src/Polly.Core/PublicAPI.Unshipped.txt +++ b/src/Polly.Core/PublicAPI.Unshipped.txt @@ -100,11 +100,9 @@ Polly.Simmy.Outcomes.OutcomeStrategyOptions.OutcomeGenerator.set -> voi Polly.Simmy.Outcomes.OutcomeStrategyOptions.OutcomeStrategyOptions() -> void static Polly.Simmy.BehaviorPipelineBuilderExtensions.AddChaosBehavior(this TBuilder! builder, double injectionRate, System.Func! behavior) -> TBuilder! static Polly.Simmy.BehaviorPipelineBuilderExtensions.AddChaosBehavior(this TBuilder! builder, Polly.Simmy.Behavior.BehaviorStrategyOptions! options) -> TBuilder! -static Polly.Simmy.FaultPipelineBuilderExtensions.AddChaosFault(this TBuilder! builder, double injectionRate, System.Exception! fault) -> TBuilder! static Polly.Simmy.FaultPipelineBuilderExtensions.AddChaosFault(this TBuilder! builder, double injectionRate, System.Func! faultGenerator) -> TBuilder! static Polly.Simmy.FaultPipelineBuilderExtensions.AddChaosFault(this TBuilder! builder, Polly.Simmy.Fault.FaultStrategyOptions! options) -> TBuilder! static Polly.Simmy.LatencyPipelineBuilderExtensions.AddChaosLatency(this TBuilder! builder, double injectionRate, System.TimeSpan latency) -> TBuilder! static Polly.Simmy.LatencyPipelineBuilderExtensions.AddChaosLatency(this TBuilder! builder, Polly.Simmy.Latency.LatencyStrategyOptions! options) -> TBuilder! static Polly.Simmy.OutcomePipelineBuilderExtensions.AddChaosResult(this Polly.ResiliencePipelineBuilder! builder, double injectionRate, System.Func! resultGenerator) -> Polly.ResiliencePipelineBuilder! -static Polly.Simmy.OutcomePipelineBuilderExtensions.AddChaosResult(this Polly.ResiliencePipelineBuilder! builder, double injectionRate, TResult result) -> Polly.ResiliencePipelineBuilder! static Polly.Simmy.OutcomePipelineBuilderExtensions.AddChaosResult(this Polly.ResiliencePipelineBuilder! builder, Polly.Simmy.Outcomes.OutcomeStrategyOptions! options) -> Polly.ResiliencePipelineBuilder! diff --git a/src/Polly.Core/Simmy/Fault/FaultPipelineBuilderExtensions.cs b/src/Polly.Core/Simmy/Fault/FaultPipelineBuilderExtensions.cs index 3b9702a67c1..082e0afa805 100644 --- a/src/Polly.Core/Simmy/Fault/FaultPipelineBuilderExtensions.cs +++ b/src/Polly.Core/Simmy/Fault/FaultPipelineBuilderExtensions.cs @@ -8,26 +8,6 @@ namespace Polly.Simmy; /// public static class FaultPipelineBuilderExtensions { - /// - /// Adds a fault chaos strategy to the builder. - /// - /// The builder type. - /// The builder instance. - /// The injection rate for a given execution, which the value should be between [0, 1] (inclusive). - /// The exception to inject. - /// The builder instance with the retry strategy added. - public static TBuilder AddChaosFault(this TBuilder builder, double injectionRate, Exception fault) - where TBuilder : ResiliencePipelineBuilderBase - { - builder.AddChaosFault(new FaultStrategyOptions - { - Enabled = true, - InjectionRate = injectionRate, - Fault = fault - }); - return builder; - } - /// /// Adds a fault chaos strategy to the builder. /// diff --git a/src/Polly.Core/Simmy/Outcomes/OutcomePipelineBuilderExtensions.cs b/src/Polly.Core/Simmy/Outcomes/OutcomePipelineBuilderExtensions.cs index 652ab5f8ab4..3ec288b7f25 100644 --- a/src/Polly.Core/Simmy/Outcomes/OutcomePipelineBuilderExtensions.cs +++ b/src/Polly.Core/Simmy/Outcomes/OutcomePipelineBuilderExtensions.cs @@ -8,30 +8,6 @@ namespace Polly.Simmy; /// public static class OutcomePipelineBuilderExtensions { - /// - /// Adds an outcome chaos strategy to the builder. - /// - /// The type of result the retry strategy handles. - /// The builder instance. - /// The injection rate for a given execution, which the value should be between [0, 1] (inclusive). - /// The outcome to inject. For disposable outcomes use either the generator or the options overload. - /// The builder instance with the retry strategy added. - public static ResiliencePipelineBuilder AddChaosResult<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] TResult>( - this ResiliencePipelineBuilder builder, - double injectionRate, - TResult result) - { - Guard.NotNull(builder); - - builder.AddChaosResult(new OutcomeStrategyOptions - { - Enabled = true, - InjectionRate = injectionRate, - OutcomeGenerator = (_) => new ValueTask?>(Task.FromResult?>(Outcome.FromResult(result))) - }); - return builder; - } - /// /// Adds an outcome chaos strategy to the builder. /// diff --git a/test/Polly.Core.Tests/Simmy/Fault/FaultChaosPipelineBuilderExtensionsTests.cs b/test/Polly.Core.Tests/Simmy/Fault/FaultChaosPipelineBuilderExtensionsTests.cs index 34f4408b7e2..abb46fabae3 100644 --- a/test/Polly.Core.Tests/Simmy/Fault/FaultChaosPipelineBuilderExtensionsTests.cs +++ b/test/Polly.Core.Tests/Simmy/Fault/FaultChaosPipelineBuilderExtensionsTests.cs @@ -58,17 +58,6 @@ internal void AddFault_Options_Ok(Action configure) builder.Invoking(b => configure(b)).Should().NotThrow(); } - [Fact] - public void AddFault_Shortcut_Option_Ok() - { - var builder = new ResiliencePipelineBuilder(); - builder - .AddChaosFault(0.5, new InvalidOperationException("Dummy exception")) - .Build(); - - AssertFaultStrategy(builder, true, 0.5); - } - [Fact] public void AddFault_Generic_Shortcut_Generator_Option_Throws() { @@ -102,26 +91,6 @@ public void AddFault_Shortcut_Generator_Option_Ok() AssertFaultStrategy(builder, true, 0.5); } - [Fact] - public void AddFault_Generic_Shortcut_Option_Ok() - { - var builder = new ResiliencePipelineBuilder(); - builder - .AddChaosFault(0.5, new InvalidOperationException("Dummy exception")) - .Build(); - - AssertFaultStrategy(builder, true, 0.5); - } - - [Fact] - public void AddFault_Generic_Shortcut_Option_Throws() - { - new ResiliencePipelineBuilder() - .Invoking(b => b.AddChaosFault(-1, new InvalidOperationException())) - .Should() - .Throw(); - } - [Fact] public void AddFault_Generic_Shortcut_Generator_Option_Ok() { diff --git a/test/Polly.Core.Tests/Simmy/Outcomes/OutcomeChaosPipelineBuilderExtensionsTests.cs b/test/Polly.Core.Tests/Simmy/Outcomes/OutcomeChaosPipelineBuilderExtensionsTests.cs index bfc56cfb9e2..fb4a29b0254 100644 --- a/test/Polly.Core.Tests/Simmy/Outcomes/OutcomeChaosPipelineBuilderExtensionsTests.cs +++ b/test/Polly.Core.Tests/Simmy/Outcomes/OutcomeChaosPipelineBuilderExtensionsTests.cs @@ -43,17 +43,6 @@ internal void AddResult_Options_Ok(Action> config builder.Invoking(b => configure(b)).Should().NotThrow(); } - [Fact] - public void AddResult_Shortcut_Option_Ok() - { - var builder = new ResiliencePipelineBuilder(); - builder - .AddChaosResult(0.5, 120) - .Build(); - - AssertResultStrategy(builder, true, 0.5, new(120)); - } - [Fact] public void AddResult_Shortcut_Generator_Option_Ok() { From 8bfecf2a5f8fb3db10d6dca2d3b5ca5c8bbdd4df Mon Sep 17 00:00:00 2001 From: Martin Tomka Date: Mon, 15 Jan 2024 13:46:08 +0100 Subject: [PATCH 2/2] cleanup --- src/Polly.Core/Simmy/Fault/FaultPipelineBuilderExtensions.cs | 2 +- .../Simmy/Outcomes/OutcomePipelineBuilderExtensions.cs | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Polly.Core/Simmy/Fault/FaultPipelineBuilderExtensions.cs b/src/Polly.Core/Simmy/Fault/FaultPipelineBuilderExtensions.cs index 082e0afa805..467e2e9e905 100644 --- a/src/Polly.Core/Simmy/Fault/FaultPipelineBuilderExtensions.cs +++ b/src/Polly.Core/Simmy/Fault/FaultPipelineBuilderExtensions.cs @@ -23,7 +23,7 @@ public static TBuilder AddChaosFault(this TBuilder builder, double inj { Enabled = true, InjectionRate = injectionRate, - FaultGenerator = (_) => new ValueTask(Task.FromResult(faultGenerator())) + FaultGenerator = (_) => new ValueTask(faultGenerator()) }); return builder; } diff --git a/src/Polly.Core/Simmy/Outcomes/OutcomePipelineBuilderExtensions.cs b/src/Polly.Core/Simmy/Outcomes/OutcomePipelineBuilderExtensions.cs index 3ec288b7f25..4a2838595b6 100644 --- a/src/Polly.Core/Simmy/Outcomes/OutcomePipelineBuilderExtensions.cs +++ b/src/Polly.Core/Simmy/Outcomes/OutcomePipelineBuilderExtensions.cs @@ -27,7 +27,10 @@ public static class OutcomePipelineBuilderExtensions { Enabled = true, InjectionRate = injectionRate, - OutcomeGenerator = (_) => new ValueTask?>(Task.FromResult?>(Outcome.FromResult(resultGenerator()))) + OutcomeGenerator = (_) => + { + return new ValueTask?>(Outcome.FromResult(resultGenerator())); + } }); return builder; }