From 8e4abc4bd7bfcf04db275e0266f25d39858bf110 Mon Sep 17 00:00:00 2001 From: Martin Tomka Date: Thu, 22 Jun 2023 08:33:56 +0200 Subject: [PATCH 1/4] Sync with TimeProvider --- .../Controller/CircuitStateController.cs | 4 +- .../Health/RollingHealthMetrics.cs | 2 +- .../Health/SingleHealthMetrics.cs | 6 +- src/Polly.Core/ToBeRemoved/TimeProvider.cs | 80 ++++++++++++++++ src/Polly.Core/Utils/TimeProvider.cs | 53 ---------- src/Polly.Extensions/Polly.Extensions.csproj | 2 +- .../Telemetry/TelemetryResilienceStrategy.cs | 1 - ...itBreakerResilienceStrategyBuilderTests.cs | 4 +- .../CircuitBreakerResilienceStrategyTests.cs | 2 +- .../Controller/CircuitStateControllerTests.cs | 7 +- .../Hedging/HedgingTimeProvider.cs | 5 +- .../Helpers/FakeTimeProvider.cs | 3 +- .../Utils/SystemTimeProviderTests.cs | 96 ------------------- .../Polly.Extensions.Tests.csproj | 1 - 14 files changed, 96 insertions(+), 170 deletions(-) create mode 100644 src/Polly.Core/ToBeRemoved/TimeProvider.cs delete mode 100644 src/Polly.Core/Utils/TimeProvider.cs delete mode 100644 test/Polly.Core.Tests/Utils/SystemTimeProviderTests.cs diff --git a/src/Polly.Core/CircuitBreaker/Controller/CircuitStateController.cs b/src/Polly.Core/CircuitBreaker/Controller/CircuitStateController.cs index 130de1495ff..3414d238f80 100644 --- a/src/Polly.Core/CircuitBreaker/Controller/CircuitStateController.cs +++ b/src/Polly.Core/CircuitBreaker/Controller/CircuitStateController.cs @@ -280,7 +280,7 @@ private void CloseCircuit_NeedsLock(Outcome outcome, bool manual, ResilienceC private bool PermitHalfOpenCircuitTest_NeedsLock() { - var now = _timeProvider.UtcNow; + var now = _timeProvider.GetUtcNow(); if (now >= _blockedUntil) { _blockedUntil = now + _breakDuration; @@ -312,7 +312,7 @@ private void OpenCircuit_NeedsLock(Outcome outcome, bool manual, ResilienceCo private void OpenCircuitFor_NeedsLock(Outcome outcome, TimeSpan breakDuration, bool manual, ResilienceContext context, out Task? scheduledTask) { scheduledTask = null; - var utcNow = _timeProvider.UtcNow; + var utcNow = _timeProvider.GetUtcNow(); _blockedUntil = IsDateTimeOverflow(utcNow, breakDuration) ? DateTimeOffset.MaxValue : utcNow + breakDuration; diff --git a/src/Polly.Core/CircuitBreaker/Health/RollingHealthMetrics.cs b/src/Polly.Core/CircuitBreaker/Health/RollingHealthMetrics.cs index 658aea7b7b8..f00806a858a 100644 --- a/src/Polly.Core/CircuitBreaker/Health/RollingHealthMetrics.cs +++ b/src/Polly.Core/CircuitBreaker/Health/RollingHealthMetrics.cs @@ -44,7 +44,7 @@ public override HealthInfo GetHealthInfo() private HealthWindow UpdateCurrentWindow() { - var now = TimeProvider.UtcNow; + var now = TimeProvider.GetUtcNow(); if (_currentWindow == null || now - _currentWindow.StartedAt >= _windowDuration) { _currentWindow = new() diff --git a/src/Polly.Core/CircuitBreaker/Health/SingleHealthMetrics.cs b/src/Polly.Core/CircuitBreaker/Health/SingleHealthMetrics.cs index 60a5e1ba0ec..3dd66cf06fe 100644 --- a/src/Polly.Core/CircuitBreaker/Health/SingleHealthMetrics.cs +++ b/src/Polly.Core/CircuitBreaker/Health/SingleHealthMetrics.cs @@ -13,7 +13,7 @@ public SingleHealthMetrics(TimeSpan samplingDuration, TimeProvider timeProvider) : base(timeProvider) { _samplingDuration = samplingDuration; - _startedAt = timeProvider.UtcNow; + _startedAt = timeProvider.GetUtcNow(); } public override void IncrementSuccess() @@ -30,7 +30,7 @@ public override void IncrementFailure() public override void Reset() { - _startedAt = TimeProvider.UtcNow; + _startedAt = TimeProvider.GetUtcNow(); _successes = 0; _failures = 0; } @@ -44,7 +44,7 @@ public override HealthInfo GetHealthInfo() private void TryReset() { - if (TimeProvider.UtcNow - _startedAt >= _samplingDuration) + if (TimeProvider.GetUtcNow() - _startedAt >= _samplingDuration) { Reset(); } diff --git a/src/Polly.Core/ToBeRemoved/TimeProvider.cs b/src/Polly.Core/ToBeRemoved/TimeProvider.cs new file mode 100644 index 00000000000..1af0e0c59cf --- /dev/null +++ b/src/Polly.Core/ToBeRemoved/TimeProvider.cs @@ -0,0 +1,80 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +using System.Diagnostics; +using System.Diagnostics.CodeAnalysis; + +#pragma warning disable S3872 // Parameter names should not duplicate the names of their methods + +namespace System +{ + // Temporary, will be removed + // Copied from https://github.com/dotnet/runtime/blob/main/src/libraries/Common/src/System/TimeProvider.cs and trimmed some fat which is not relevant for internal stuff + + [ExcludeFromCodeCoverage] + internal abstract class TimeProvider + { + public static TimeProvider System { get; } = new SystemTimeProvider(); + + protected TimeProvider() + { + } + + public virtual DateTimeOffset GetUtcNow() => DateTimeOffset.UtcNow; + + private static readonly long MinDateTicks = DateTime.MinValue.Ticks; + private static readonly long MaxDateTicks = DateTime.MaxValue.Ticks; + + public DateTimeOffset GetLocalNow() + { + DateTimeOffset utcDateTime = GetUtcNow(); + TimeZoneInfo zoneInfo = LocalTimeZone; + if (zoneInfo is null) + { + throw new InvalidOperationException(); + } + + TimeSpan offset = zoneInfo.GetUtcOffset(utcDateTime); + + long localTicks = utcDateTime.Ticks + offset.Ticks; + if ((ulong)localTicks > (ulong)MaxDateTicks) + { + localTicks = localTicks < MinDateTicks ? MinDateTicks : MaxDateTicks; + } + + return new DateTimeOffset(localTicks, offset); + } + + public virtual TimeZoneInfo LocalTimeZone => TimeZoneInfo.Local; + + public virtual long TimestampFrequency => Stopwatch.Frequency; + + public virtual long GetTimestamp() => Stopwatch.GetTimestamp(); + + // This one is not on TimeProvider, temporarly we need to use it + public virtual Task Delay(TimeSpan delay, CancellationToken cancellationToken = default) => Task.Delay(delay, cancellationToken); + + // This one is not on TimeProvider, temporarly we need to use it + public virtual void CancelAfter(CancellationTokenSource source, TimeSpan delay) => source.CancelAfter(delay); + + public TimeSpan GetElapsedTime(long startingTimestamp, long endingTimestamp) + { + long timestampFrequency = TimestampFrequency; + if (timestampFrequency <= 0) + { + throw new InvalidOperationException(); + } + + return new TimeSpan((long)((endingTimestamp - startingTimestamp) * ((double)TimeSpan.TicksPerSecond / timestampFrequency))); + } + + public TimeSpan GetElapsedTime(long startingTimestamp) => GetElapsedTime(startingTimestamp, GetTimestamp()); + + private sealed class SystemTimeProvider : TimeProvider + { + internal SystemTimeProvider() + { + } + } + } +} diff --git a/src/Polly.Core/Utils/TimeProvider.cs b/src/Polly.Core/Utils/TimeProvider.cs deleted file mode 100644 index 400d5ff93e3..00000000000 --- a/src/Polly.Core/Utils/TimeProvider.cs +++ /dev/null @@ -1,53 +0,0 @@ -using System.Diagnostics.CodeAnalysis; - -namespace Polly.Utils; - -#pragma warning disable S3872 // Parameter names should not duplicate the names of their methods - -/// -/// TEMPORARY ONLY, to be replaced with System.TimeProvider - https://github.com/dotnet/runtime/issues/36617 later. -/// -/// We trimmed some of the API that's not relevant for us too. -[ExcludeFromCodeCoverage] -internal abstract class TimeProvider -{ - private readonly double _tickFrequency; - - public static TimeProvider System { get; } = new SystemTimeProvider(); - - protected TimeProvider(long timestampFrequency) - { - TimestampFrequency = timestampFrequency; - _tickFrequency = (double)TimeSpan.TicksPerSecond / TimestampFrequency; - } - - public abstract DateTimeOffset UtcNow { get; } - - public long TimestampFrequency { get; } - - public virtual long GetTimestamp() => Environment.TickCount; - - public TimeSpan GetElapsedTime(long startingTimestamp, long endingTimestamp) => new((long)((endingTimestamp - startingTimestamp) * _tickFrequency)); - - public TimeSpan GetElapsedTime(long startingTimestamp) => GetElapsedTime(startingTimestamp, GetTimestamp()); - - public abstract Task Delay(TimeSpan delay, CancellationToken cancellationToken = default); - - public abstract void CancelAfter(CancellationTokenSource source, TimeSpan delay); - - private sealed class SystemTimeProvider : TimeProvider - { - public SystemTimeProvider() - : base(Stopwatch.Frequency) - { - } - - public override long GetTimestamp() => Stopwatch.GetTimestamp(); - - public override Task Delay(TimeSpan delay, CancellationToken cancellationToken = default) => Task.Delay(delay, cancellationToken); - - public override void CancelAfter(CancellationTokenSource source, TimeSpan delay) => source.CancelAfter(delay); - - public override DateTimeOffset UtcNow => DateTimeOffset.UtcNow; - } -} diff --git a/src/Polly.Extensions/Polly.Extensions.csproj b/src/Polly.Extensions/Polly.Extensions.csproj index 922cb3ab629..24da2f80344 100644 --- a/src/Polly.Extensions/Polly.Extensions.csproj +++ b/src/Polly.Extensions/Polly.Extensions.csproj @@ -12,7 +12,7 @@ - + diff --git a/src/Polly.Extensions/Telemetry/TelemetryResilienceStrategy.cs b/src/Polly.Extensions/Telemetry/TelemetryResilienceStrategy.cs index d9a5be0db47..5082e456b9c 100644 --- a/src/Polly.Extensions/Telemetry/TelemetryResilienceStrategy.cs +++ b/src/Polly.Extensions/Telemetry/TelemetryResilienceStrategy.cs @@ -1,6 +1,5 @@ using System.Diagnostics.Metrics; using Microsoft.Extensions.Logging; -using Polly.Utils; namespace Polly.Extensions.Telemetry; diff --git a/test/Polly.Core.Tests/CircuitBreaker/CircuitBreakerResilienceStrategyBuilderTests.cs b/test/Polly.Core.Tests/CircuitBreaker/CircuitBreakerResilienceStrategyBuilderTests.cs index a848c964f91..6859833cd3a 100644 --- a/test/Polly.Core.Tests/CircuitBreaker/CircuitBreakerResilienceStrategyBuilderTests.cs +++ b/test/Polly.Core.Tests/CircuitBreaker/CircuitBreakerResilienceStrategyBuilderTests.cs @@ -103,7 +103,7 @@ public void AddCircuitBreaker_IntegrationTest() var timeProvider = new FakeTimeProvider(); var strategy = new ResilienceStrategyBuilder { TimeProvider = timeProvider.Object }.AddSimpleCircuitBreaker(options).Build(); var time = DateTime.UtcNow; - timeProvider.Setup(v => v.UtcNow).Returns(() => time); + timeProvider.Setup(v => v.GetUtcNow()).Returns(() => time); for (int i = 0; i < options.FailureThreshold; i++) { @@ -154,7 +154,7 @@ public void AddAdvancedCircuitBreaker_IntegrationTest() var timeProvider = new FakeTimeProvider(); var strategy = new ResilienceStrategyBuilder { TimeProvider = timeProvider.Object }.AddAdvancedCircuitBreaker(options).Build(); var time = DateTime.UtcNow; - timeProvider.Setup(v => v.UtcNow).Returns(() => time); + timeProvider.Setup(v => v.GetUtcNow()).Returns(() => time); for (int i = 0; i < 10; i++) { diff --git a/test/Polly.Core.Tests/CircuitBreaker/CircuitBreakerResilienceStrategyTests.cs b/test/Polly.Core.Tests/CircuitBreaker/CircuitBreakerResilienceStrategyTests.cs index 4743f508852..1da0a2ecbdd 100644 --- a/test/Polly.Core.Tests/CircuitBreaker/CircuitBreakerResilienceStrategyTests.cs +++ b/test/Polly.Core.Tests/CircuitBreaker/CircuitBreakerResilienceStrategyTests.cs @@ -16,7 +16,7 @@ public class CircuitBreakerResilienceStrategyTests : IDisposable public CircuitBreakerResilienceStrategyTests() { _timeProvider = new FakeTimeProvider(); - _timeProvider.Setup(v => v.UtcNow).Returns(DateTime.UtcNow); + _timeProvider.Setup(v => v.GetUtcNow()).Returns(DateTime.UtcNow); _behavior = new Mock(MockBehavior.Strict); _telemetry = TestUtilities.CreateResilienceTelemetry(Mock.Of()); _options = new SimpleCircuitBreakerStrategyOptions(); diff --git a/test/Polly.Core.Tests/CircuitBreaker/Controller/CircuitStateControllerTests.cs b/test/Polly.Core.Tests/CircuitBreaker/Controller/CircuitStateControllerTests.cs index 708b975a72d..fb56a5ac9dd 100644 --- a/test/Polly.Core.Tests/CircuitBreaker/Controller/CircuitStateControllerTests.cs +++ b/test/Polly.Core.Tests/CircuitBreaker/Controller/CircuitStateControllerTests.cs @@ -1,7 +1,6 @@ using Moq; using Polly.CircuitBreaker; using Polly.Telemetry; -using Polly.Utils; namespace Polly.Core.Tests.CircuitBreaker.Controller; public class CircuitStateControllerTests @@ -12,7 +11,7 @@ public class CircuitStateControllerTests private readonly Action _onTelemetry = _ => { }; private DateTimeOffset _utcNow = DateTimeOffset.UtcNow; - public CircuitStateControllerTests() => _timeProvider.Setup(v => v.UtcNow).Returns(() => _utcNow); + public CircuitStateControllerTests() => _timeProvider.Setup(v => v.GetUtcNow()).Returns(() => _utcNow); [Fact] public void Ctor_EnsureDefaults() @@ -42,7 +41,7 @@ public async Task IsolateAsync_Ok() return default; }; - _timeProvider.Setup(v => v.UtcNow).Returns(DateTime.UtcNow); + _timeProvider.Setup(v => v.GetUtcNow()).Returns(DateTime.UtcNow); using var controller = CreateController(); var context = ResilienceContext.Get(); @@ -80,7 +79,7 @@ public async Task BreakAsync_Ok() return default; }; - _timeProvider.Setup(v => v.UtcNow).Returns(DateTime.UtcNow); + _timeProvider.Setup(v => v.GetUtcNow()).Returns(DateTime.UtcNow); using var controller = CreateController(); await controller.IsolateCircuitAsync(ResilienceContext.Get()); _circuitBehavior.Setup(v => v.OnCircuitClosed()); diff --git a/test/Polly.Core.Tests/Hedging/HedgingTimeProvider.cs b/test/Polly.Core.Tests/Hedging/HedgingTimeProvider.cs index d1f04d52a07..6b971f675bd 100644 --- a/test/Polly.Core.Tests/Hedging/HedgingTimeProvider.cs +++ b/test/Polly.Core.Tests/Hedging/HedgingTimeProvider.cs @@ -6,8 +6,7 @@ internal class HedgingTimeProvider : TimeProvider { private DateTimeOffset _utcNow; - public HedgingTimeProvider() - : base(Stopwatch.Frequency) => _utcNow = DateTimeOffset.UtcNow; + public HedgingTimeProvider() => _utcNow = DateTimeOffset.UtcNow; public TimeSpan AutoAdvance { get; set; } @@ -25,7 +24,7 @@ public void Advance(TimeSpan diff) public List DelayEntries { get; } = new List(); - public override DateTimeOffset UtcNow => _utcNow; + public override DateTimeOffset GetUtcNow() => _utcNow; public override long GetTimestamp() => TimeStampProvider(); diff --git a/test/Polly.Core.Tests/Helpers/FakeTimeProvider.cs b/test/Polly.Core.Tests/Helpers/FakeTimeProvider.cs index d8a57bbcd46..06c7de260de 100644 --- a/test/Polly.Core.Tests/Helpers/FakeTimeProvider.cs +++ b/test/Polly.Core.Tests/Helpers/FakeTimeProvider.cs @@ -1,5 +1,4 @@ using Moq; -using Polly.Utils; namespace Polly.Core.Tests.Helpers; @@ -20,7 +19,7 @@ public FakeTimeProvider() public FakeTimeProvider SetupUtcNow(DateTimeOffset? time = null) { _time = time ?? DateTimeOffset.UtcNow; - Setup(x => x.UtcNow).Returns(() => _time.Value); + Setup(x => x.GetUtcNow()).Returns(() => _time.Value); return this; } diff --git a/test/Polly.Core.Tests/Utils/SystemTimeProviderTests.cs b/test/Polly.Core.Tests/Utils/SystemTimeProviderTests.cs deleted file mode 100644 index 85fb8311bcf..00000000000 --- a/test/Polly.Core.Tests/Utils/SystemTimeProviderTests.cs +++ /dev/null @@ -1,96 +0,0 @@ -using Polly.Core.Tests.Helpers; -using Polly.Utils; - -namespace Polly.Core.Tests.Utils; - -public class SystemTimeProviderTests -{ - [Fact] - public void TimestampFrequency_Ok() - { - TimeProvider.System.TimestampFrequency.Should().Be(Stopwatch.Frequency); - } - - [Fact] - public async Task CancelAfter_Ok() - { - await TestUtilities.AssertWithTimeoutAsync(async () => - { - using var cts = new CancellationTokenSource(); - TimeProvider.System.CancelAfter(cts, TimeSpan.FromMilliseconds(10)); - cts.IsCancellationRequested.Should().BeFalse(); - await Task.Delay(10); - cts.Token.IsCancellationRequested.Should().BeTrue(); - }); - } - - [Fact] - public async Task Delay_Ok() - { - using var cts = new CancellationTokenSource(); - - await TestUtilities.AssertWithTimeoutAsync(() => - { - TimeProvider.System.Delay(TimeSpan.FromMilliseconds(10)).IsCompleted.Should().BeFalse(); - }); - } - - [Fact] - public void Delay_NoDelay_Ok() - { - using var cts = new CancellationTokenSource(); - - TimeProvider.System.Delay(TimeSpan.Zero).IsCompleted.Should().BeTrue(); - } - - [Fact] - public async Task GetElapsedTime_Ok() - { - var delay = TimeSpan.FromMilliseconds(10); - var delayWithTolerance = TimeSpan.FromMilliseconds(30); - - await TestUtilities.AssertWithTimeoutAsync(async () => - { - var stamp1 = TimeProvider.System.GetTimestamp(); - await Task.Delay(10); - var stamp2 = TimeProvider.System.GetTimestamp(); - - var elapsed = TimeProvider.System.GetElapsedTime(stamp1, stamp2); - var elapsed2 = TimeProvider.System.GetElapsedTime(stamp1); - - elapsed.Should().BeGreaterThanOrEqualTo(delay); - elapsed.Should().BeLessThan(delayWithTolerance); - - elapsed2.Should().BeGreaterThanOrEqualTo(delay); - elapsed2.Should().BeLessThan(delayWithTolerance); - }); - } - - [Fact] - public void GetElapsedTime_Mocked_Ok() - { - var provider = new FakeTimeProvider(40); - provider.SetupSequence(v => v.GetTimestamp()).Returns(120000).Returns(480000); - - var stamp1 = provider.Object.GetTimestamp(); - var stamp2 = provider.Object.GetTimestamp(); - - var delay = provider.Object.GetElapsedTime(stamp1, stamp2); - - var tickFrequency = (double)TimeSpan.TicksPerSecond / 40; - var expected = new TimeSpan((long)((stamp2 - stamp1) * tickFrequency)); - - delay.Should().Be(expected); - } - - [Fact] - public async Task UtcNow_Ok() - { - await TestUtilities.AssertWithTimeoutAsync(() => - { - var now = TimeProvider.System.UtcNow; - (DateTimeOffset.UtcNow - now).Should().BeLessThanOrEqualTo(TimeSpan.FromMilliseconds(10)); - }); - } - -} diff --git a/test/Polly.Extensions.Tests/Polly.Extensions.Tests.csproj b/test/Polly.Extensions.Tests/Polly.Extensions.Tests.csproj index 0584b18890c..0a94443b656 100644 --- a/test/Polly.Extensions.Tests/Polly.Extensions.Tests.csproj +++ b/test/Polly.Extensions.Tests/Polly.Extensions.Tests.csproj @@ -12,7 +12,6 @@ - From 1aa7e6749c997101080b79e6eef27e63d92f16f1 Mon Sep 17 00:00:00 2001 From: Martin Tomka Date: Thu, 22 Jun 2023 08:43:08 +0200 Subject: [PATCH 2/4] Cleanup --- Polly.sln | 1 - .../GenericOverheadBenchmark.cs | 10 ++-------- bench/Polly.Core.Benchmarks/HedgingBenchmark.cs | 4 +--- bench/Polly.Core.Benchmarks/PredicateBenchmark.cs | 4 +--- bench/Polly.Core.Benchmarks/Program.cs | 1 - bench/Polly.Core.Benchmarks/Utils/MeteringUtil.cs | 4 +--- src/Polly.Core/Hedging/Controller/TaskExecution.cs | 8 ++------ src/Polly.Core/Hedging/HedgingResilienceStrategy.cs | 1 - src/Polly.Core/Outcome.TResult.cs | 1 - src/Polly.Core/Retry/RetryResilienceStrategy.cs | 1 - src/Polly.Core/ToBeRemoved/TimeProvider.cs | 1 - src/Polly.Core/Utils/DefaultPredicates.cs | 5 +---- src/Polly.Core/Utils/OutcomeResilienceStrategy.cs | 4 +--- src/Polly.Extensions/Telemetry/EnrichmentUtil.cs | 2 -- src/Polly.Extensions/Telemetry/TelemetryOptions.cs | 1 - ...RateLimiterResilienceStrategyBuilderExtensions.cs | 1 - .../CircuitBreaker/BrokenCircuitExceptionTests.cs | 1 - .../CircuitBreakerResilienceStrategyTests.cs | 1 - .../Controller/AdvancedCircuitBehaviorTests.cs | 1 - .../CircuitBreaker/Health/HealthMetricsTests.cs | 1 - .../Hedging/Controller/HedgingControllerTests.cs | 1 - test/Polly.Core.Tests/Hedging/HedgingActions.cs | 1 - test/Polly.Core.Tests/Hedging/HedgingHandlerTests.cs | 1 - .../Hedging/HedgingResilienceStrategyTests.cs | 1 - test/Polly.Core.Tests/Hedging/HedgingTimeProvider.cs | 12 ++---------- test/Polly.Core.Tests/Hedging/PrimaryStringTasks.cs | 2 -- test/Polly.Core.Tests/Helpers/FakeTimeProvider.cs | 9 +-------- .../ResilienceStrategyBuilderTests.cs | 1 - .../Telemetry/ExecutionAttemptArgumentsTests.cs | 3 +-- .../Telemetry/TelemetryEventArgumentsTests.cs | 3 +-- .../Utils/ExceptionUtilitiesTests.cs | 3 +-- .../Utils/OutcomeResilienceStrategyTests.cs | 4 +--- .../Utils/ReloadableResilienceStrategyTests.cs | 1 - .../Polly.Core.Tests/Utils/TypeNameFormatterTests.cs | 5 +---- .../IssuesTests.OverrideLibraryStrategies_1072.cs | 1 - .../Telemetry/TelemetryResilienceStrategyTests.cs | 2 -- .../Utils/TelemetryUtilTests.cs | 3 +-- 37 files changed, 18 insertions(+), 88 deletions(-) diff --git a/Polly.sln b/Polly.sln index 31538acd527..4d551a46d35 100644 --- a/Polly.sln +++ b/Polly.sln @@ -16,7 +16,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution GitVersion.yml = GitVersion.yml global.json = global.json README.md = README.md - Version.props = Version.props EndProjectSection EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Polly", "src\Polly\Polly.csproj", "{E273E6D8-87D4-4EC9-A2BE-734DD633EF15}" diff --git a/bench/Polly.Core.Benchmarks/GenericOverheadBenchmark.cs b/bench/Polly.Core.Benchmarks/GenericOverheadBenchmark.cs index 2b97b53917d..1dbae447046 100644 --- a/bench/Polly.Core.Benchmarks/GenericOverheadBenchmark.cs +++ b/bench/Polly.Core.Benchmarks/GenericOverheadBenchmark.cs @@ -22,18 +22,12 @@ public GenericOverheadBenchmark() public class GenericStrategy { [MethodImpl(MethodImplOptions.NoOptimization)] - public virtual ValueTask ExecuteAsync(Func> callback) - { - return callback(); - } + public virtual ValueTask ExecuteAsync(Func> callback) => callback(); } public class NonGenericStrategy { [MethodImpl(MethodImplOptions.NoOptimization)] - public virtual ValueTask ExecuteAsync(Func> callback) - { - return callback(); - } + public virtual ValueTask ExecuteAsync(Func> callback) => callback(); } } diff --git a/bench/Polly.Core.Benchmarks/HedgingBenchmark.cs b/bench/Polly.Core.Benchmarks/HedgingBenchmark.cs index 09452b5fb03..5d65a28e69f 100644 --- a/bench/Polly.Core.Benchmarks/HedgingBenchmark.cs +++ b/bench/Polly.Core.Benchmarks/HedgingBenchmark.cs @@ -5,10 +5,8 @@ public class HedgingBenchmark private ResilienceStrategy? _strategy; [GlobalSetup] - public void Setup() - { + public void Setup() => _strategy = Helper.CreateHedging(); - } [Benchmark(Baseline = true)] public async ValueTask Hedging_Primary() diff --git a/bench/Polly.Core.Benchmarks/PredicateBenchmark.cs b/bench/Polly.Core.Benchmarks/PredicateBenchmark.cs index f4f884bd9f2..8d98c7e3fdd 100644 --- a/bench/Polly.Core.Benchmarks/PredicateBenchmark.cs +++ b/bench/Polly.Core.Benchmarks/PredicateBenchmark.cs @@ -1,7 +1,5 @@ -using System; -using System.Net; +using System.Net; using System.Net.Http; -using System.Threading.Tasks; namespace Polly.Core.Benchmarks; diff --git a/bench/Polly.Core.Benchmarks/Program.cs b/bench/Polly.Core.Benchmarks/Program.cs index c5d8d203825..ef0c99ed512 100644 --- a/bench/Polly.Core.Benchmarks/Program.cs +++ b/bench/Polly.Core.Benchmarks/Program.cs @@ -1,6 +1,5 @@ using BenchmarkDotNet.Diagnosers; using BenchmarkDotNet.Toolchains.InProcess.Emit; -using Polly.Core.Benchmarks; var config = ManualConfig .Create(DefaultConfig.Instance) diff --git a/bench/Polly.Core.Benchmarks/Utils/MeteringUtil.cs b/bench/Polly.Core.Benchmarks/Utils/MeteringUtil.cs index 3a4245c6dbc..54feb388387 100644 --- a/bench/Polly.Core.Benchmarks/Utils/MeteringUtil.cs +++ b/bench/Polly.Core.Benchmarks/Utils/MeteringUtil.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.Metrics; +using System.Diagnostics.Metrics; namespace Polly.Core.Benchmarks.Utils; diff --git a/src/Polly.Core/Hedging/Controller/TaskExecution.cs b/src/Polly.Core/Hedging/Controller/TaskExecution.cs index 4af6d5064a8..f0a53a50a8b 100644 --- a/src/Polly.Core/Hedging/Controller/TaskExecution.cs +++ b/src/Polly.Core/Hedging/Controller/TaskExecution.cs @@ -1,4 +1,3 @@ -using System; using Polly.Hedging.Utils; using Polly.Telemetry; @@ -148,7 +147,7 @@ public async ValueTask ResetAsync() { OnReset?.Invoke(this); - if (_cancellationRegistration is CancellationTokenRegistration registration) + if (_cancellationRegistration is { } registration) { #if NETCOREAPP await registration.DisposeAsync().ConfigureAwait(false); @@ -204,10 +203,7 @@ private async Task ExecuteSecondaryActionAsync(Func>> actio await UpdateOutcomeAsync(outcome).ConfigureAwait(Context.ContinueOnCapturedContext); } - private async Task ExecuteCreateActionException(Exception e) - { - await UpdateOutcomeAsync(Polly.Outcome.FromException(e)).ConfigureAwait(Context.ContinueOnCapturedContext); - } + private async Task ExecuteCreateActionException(Exception e) => await UpdateOutcomeAsync(Polly.Outcome.FromException(e)).ConfigureAwait(Context.ContinueOnCapturedContext); private async Task ExecutePrimaryActionAsync(Func>> primaryCallback, TState state) { diff --git a/src/Polly.Core/Hedging/HedgingResilienceStrategy.cs b/src/Polly.Core/Hedging/HedgingResilienceStrategy.cs index 68bf4e38a32..d497271ac1c 100644 --- a/src/Polly.Core/Hedging/HedgingResilienceStrategy.cs +++ b/src/Polly.Core/Hedging/HedgingResilienceStrategy.cs @@ -1,5 +1,4 @@ using System.Diagnostics.CodeAnalysis; -using System.Threading; using Polly.Hedging.Utils; using Polly.Telemetry; diff --git a/src/Polly.Core/Outcome.TResult.cs b/src/Polly.Core/Outcome.TResult.cs index 8dff566cfe6..21e1c337426 100644 --- a/src/Polly.Core/Outcome.TResult.cs +++ b/src/Polly.Core/Outcome.TResult.cs @@ -1,6 +1,5 @@ #pragma warning disable CA1815 // Override equals and operator equals on value types -using System; using System.Runtime.CompilerServices; using System.Runtime.ExceptionServices; diff --git a/src/Polly.Core/Retry/RetryResilienceStrategy.cs b/src/Polly.Core/Retry/RetryResilienceStrategy.cs index 6b869424f4d..57e587b7d6c 100644 --- a/src/Polly.Core/Retry/RetryResilienceStrategy.cs +++ b/src/Polly.Core/Retry/RetryResilienceStrategy.cs @@ -1,5 +1,4 @@ using Polly.Telemetry; -using Polly.Utils; namespace Polly.Retry; diff --git a/src/Polly.Core/ToBeRemoved/TimeProvider.cs b/src/Polly.Core/ToBeRemoved/TimeProvider.cs index 1af0e0c59cf..58c519d7e9e 100644 --- a/src/Polly.Core/ToBeRemoved/TimeProvider.cs +++ b/src/Polly.Core/ToBeRemoved/TimeProvider.cs @@ -1,7 +1,6 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -using System.Diagnostics; using System.Diagnostics.CodeAnalysis; #pragma warning disable S3872 // Parameter names should not duplicate the names of their methods diff --git a/src/Polly.Core/Utils/DefaultPredicates.cs b/src/Polly.Core/Utils/DefaultPredicates.cs index bf210b47f52..312b8147abf 100644 --- a/src/Polly.Core/Utils/DefaultPredicates.cs +++ b/src/Polly.Core/Utils/DefaultPredicates.cs @@ -1,7 +1,4 @@ -using System; -using System.Threading.Tasks; - -namespace Polly.Utils; +namespace Polly.Utils; internal static class DefaultPredicates { diff --git a/src/Polly.Core/Utils/OutcomeResilienceStrategy.cs b/src/Polly.Core/Utils/OutcomeResilienceStrategy.cs index 181c84b10fe..2112930bc47 100644 --- a/src/Polly.Core/Utils/OutcomeResilienceStrategy.cs +++ b/src/Polly.Core/Utils/OutcomeResilienceStrategy.cs @@ -1,6 +1,4 @@ -using System.Runtime.CompilerServices; - -namespace Polly.Utils; +namespace Polly.Utils; /// /// This base strategy class is used to simplify the implementation of generic (reactive) diff --git a/src/Polly.Extensions/Telemetry/EnrichmentUtil.cs b/src/Polly.Extensions/Telemetry/EnrichmentUtil.cs index b63606d53a0..445a58d5895 100644 --- a/src/Polly.Extensions/Telemetry/EnrichmentUtil.cs +++ b/src/Polly.Extensions/Telemetry/EnrichmentUtil.cs @@ -1,5 +1,3 @@ -using System.Collections.Generic; - namespace Polly.Extensions.Telemetry; internal static class EnrichmentUtil diff --git a/src/Polly.Extensions/Telemetry/TelemetryOptions.cs b/src/Polly.Extensions/Telemetry/TelemetryOptions.cs index e6554cf519d..3b23c354be9 100644 --- a/src/Polly.Extensions/Telemetry/TelemetryOptions.cs +++ b/src/Polly.Extensions/Telemetry/TelemetryOptions.cs @@ -1,4 +1,3 @@ -using System; using System.ComponentModel.DataAnnotations; using System.Net.Http; using Microsoft.Extensions.Logging; diff --git a/src/Polly.RateLimiting/RateLimiterResilienceStrategyBuilderExtensions.cs b/src/Polly.RateLimiting/RateLimiterResilienceStrategyBuilderExtensions.cs index 78cf683715f..6fb9bd756eb 100644 --- a/src/Polly.RateLimiting/RateLimiterResilienceStrategyBuilderExtensions.cs +++ b/src/Polly.RateLimiting/RateLimiterResilienceStrategyBuilderExtensions.cs @@ -1,7 +1,6 @@ using System.ComponentModel.DataAnnotations; using System.Threading.RateLimiting; using Polly.RateLimiting; -using Polly.Utils; namespace Polly; diff --git a/test/Polly.Core.Tests/CircuitBreaker/BrokenCircuitExceptionTests.cs b/test/Polly.Core.Tests/CircuitBreaker/BrokenCircuitExceptionTests.cs index f29fe8d8dc0..075e04b55f1 100644 --- a/test/Polly.Core.Tests/CircuitBreaker/BrokenCircuitExceptionTests.cs +++ b/test/Polly.Core.Tests/CircuitBreaker/BrokenCircuitExceptionTests.cs @@ -7,7 +7,6 @@ public class BrokenCircuitExceptionTests [Fact] public void Ctor_Ok() { - var brokenCircuit = new BrokenCircuitException(); new BrokenCircuitException("Dummy.").Message.Should().Be("Dummy."); new BrokenCircuitException("Dummy.", new InvalidOperationException()).Message.Should().Be("Dummy."); new BrokenCircuitException("Dummy.", new InvalidOperationException()).InnerException.Should().BeOfType(); diff --git a/test/Polly.Core.Tests/CircuitBreaker/CircuitBreakerResilienceStrategyTests.cs b/test/Polly.Core.Tests/CircuitBreaker/CircuitBreakerResilienceStrategyTests.cs index 1da0a2ecbdd..29dbbd0f9da 100644 --- a/test/Polly.Core.Tests/CircuitBreaker/CircuitBreakerResilienceStrategyTests.cs +++ b/test/Polly.Core.Tests/CircuitBreaker/CircuitBreakerResilienceStrategyTests.cs @@ -1,7 +1,6 @@ using Moq; using Polly.CircuitBreaker; using Polly.Telemetry; -using Polly.Utils; namespace Polly.Core.Tests.CircuitBreaker; diff --git a/test/Polly.Core.Tests/CircuitBreaker/Controller/AdvancedCircuitBehaviorTests.cs b/test/Polly.Core.Tests/CircuitBreaker/Controller/AdvancedCircuitBehaviorTests.cs index b98fe759e1a..be8d8b58bc9 100644 --- a/test/Polly.Core.Tests/CircuitBreaker/Controller/AdvancedCircuitBehaviorTests.cs +++ b/test/Polly.Core.Tests/CircuitBreaker/Controller/AdvancedCircuitBehaviorTests.cs @@ -1,7 +1,6 @@ using Moq; using Polly.CircuitBreaker; using Polly.CircuitBreaker.Health; -using Polly.Utils; namespace Polly.Core.Tests.CircuitBreaker.Controller; diff --git a/test/Polly.Core.Tests/CircuitBreaker/Health/HealthMetricsTests.cs b/test/Polly.Core.Tests/CircuitBreaker/Health/HealthMetricsTests.cs index 7167e788024..71628fc2af1 100644 --- a/test/Polly.Core.Tests/CircuitBreaker/Health/HealthMetricsTests.cs +++ b/test/Polly.Core.Tests/CircuitBreaker/Health/HealthMetricsTests.cs @@ -1,5 +1,4 @@ using Polly.CircuitBreaker.Health; -using Polly.Utils; namespace Polly.Core.Tests.CircuitBreaker.Health; diff --git a/test/Polly.Core.Tests/Hedging/Controller/HedgingControllerTests.cs b/test/Polly.Core.Tests/Hedging/Controller/HedgingControllerTests.cs index 16be56e950f..55648169f6c 100644 --- a/test/Polly.Core.Tests/Hedging/Controller/HedgingControllerTests.cs +++ b/test/Polly.Core.Tests/Hedging/Controller/HedgingControllerTests.cs @@ -1,5 +1,4 @@ using Polly.Hedging.Utils; -using Polly.Telemetry; namespace Polly.Core.Tests.Hedging.Controller; diff --git a/test/Polly.Core.Tests/Hedging/HedgingActions.cs b/test/Polly.Core.Tests/Hedging/HedgingActions.cs index f1cbea46a97..b542803acf5 100644 --- a/test/Polly.Core.Tests/Hedging/HedgingActions.cs +++ b/test/Polly.Core.Tests/Hedging/HedgingActions.cs @@ -1,5 +1,4 @@ using Polly.Hedging; -using Polly.Utils; namespace Polly.Core.Tests.Hedging; diff --git a/test/Polly.Core.Tests/Hedging/HedgingHandlerTests.cs b/test/Polly.Core.Tests/Hedging/HedgingHandlerTests.cs index 2fffc3ce8d1..3f8775165bb 100644 --- a/test/Polly.Core.Tests/Hedging/HedgingHandlerTests.cs +++ b/test/Polly.Core.Tests/Hedging/HedgingHandlerTests.cs @@ -1,4 +1,3 @@ -using FluentAssertions; using Polly.Hedging; using Polly.Hedging.Utils; diff --git a/test/Polly.Core.Tests/Hedging/HedgingResilienceStrategyTests.cs b/test/Polly.Core.Tests/Hedging/HedgingResilienceStrategyTests.cs index 6bac6b73466..3119ff42a05 100644 --- a/test/Polly.Core.Tests/Hedging/HedgingResilienceStrategyTests.cs +++ b/test/Polly.Core.Tests/Hedging/HedgingResilienceStrategyTests.cs @@ -1,7 +1,6 @@ using Polly.Hedging; using Polly.Hedging.Utils; using Polly.Telemetry; -using Polly.TestUtils; using Xunit.Abstractions; namespace Polly.Core.Tests.Hedging; diff --git a/test/Polly.Core.Tests/Hedging/HedgingTimeProvider.cs b/test/Polly.Core.Tests/Hedging/HedgingTimeProvider.cs index 6b971f675bd..d3607aa3ddc 100644 --- a/test/Polly.Core.Tests/Hedging/HedgingTimeProvider.cs +++ b/test/Polly.Core.Tests/Hedging/HedgingTimeProvider.cs @@ -1,5 +1,3 @@ -using Polly.Utils; - namespace Polly.Core.Tests.Hedging; internal class HedgingTimeProvider : TimeProvider @@ -28,10 +26,7 @@ public void Advance(TimeSpan diff) public override long GetTimestamp() => TimeStampProvider(); - public override void CancelAfter(CancellationTokenSource source, TimeSpan delay) - { - throw new NotSupportedException(); - } + public override void CancelAfter(CancellationTokenSource source, TimeSpan delay) => throw new NotSupportedException(); public override Task Delay(TimeSpan delayValue, CancellationToken cancellationToken = default) { @@ -46,9 +41,6 @@ public override Task Delay(TimeSpan delayValue, CancellationToken cancellationTo public record DelayEntry(TimeSpan Delay, TaskCompletionSource Source, DateTimeOffset TimeStamp) { - public void Complete() - { - Source.TrySetResult(true); - } + public void Complete() => Source.TrySetResult(true); } } diff --git a/test/Polly.Core.Tests/Hedging/PrimaryStringTasks.cs b/test/Polly.Core.Tests/Hedging/PrimaryStringTasks.cs index d6dea7a3f89..7e3f095f734 100644 --- a/test/Polly.Core.Tests/Hedging/PrimaryStringTasks.cs +++ b/test/Polly.Core.Tests/Hedging/PrimaryStringTasks.cs @@ -1,5 +1,3 @@ -using Polly.Utils; - namespace Polly.Core.Tests.Hedging; internal class PrimaryStringTasks diff --git a/test/Polly.Core.Tests/Helpers/FakeTimeProvider.cs b/test/Polly.Core.Tests/Helpers/FakeTimeProvider.cs index 06c7de260de..c878d839339 100644 --- a/test/Polly.Core.Tests/Helpers/FakeTimeProvider.cs +++ b/test/Polly.Core.Tests/Helpers/FakeTimeProvider.cs @@ -6,15 +6,8 @@ internal class FakeTimeProvider : Mock { private DateTimeOffset? _time; - public FakeTimeProvider(long frequency) - : base(MockBehavior.Strict, frequency) - { - } - public FakeTimeProvider() - : this(Stopwatch.Frequency) - { - } + : base(MockBehavior.Strict) => Setup(v => v.TimestampFrequency).Returns(Stopwatch.Frequency); public FakeTimeProvider SetupUtcNow(DateTimeOffset? time = null) { diff --git a/test/Polly.Core.Tests/ResilienceStrategyBuilderTests.cs b/test/Polly.Core.Tests/ResilienceStrategyBuilderTests.cs index 48506ba1bfc..3d8b891a6ea 100644 --- a/test/Polly.Core.Tests/ResilienceStrategyBuilderTests.cs +++ b/test/Polly.Core.Tests/ResilienceStrategyBuilderTests.cs @@ -1,5 +1,4 @@ using System.ComponentModel.DataAnnotations; -using System.Linq; using Polly.Utils; namespace Polly.Core.Tests; diff --git a/test/Polly.Core.Tests/Telemetry/ExecutionAttemptArgumentsTests.cs b/test/Polly.Core.Tests/Telemetry/ExecutionAttemptArgumentsTests.cs index 80947ff0843..91a3c105c5d 100644 --- a/test/Polly.Core.Tests/Telemetry/ExecutionAttemptArgumentsTests.cs +++ b/test/Polly.Core.Tests/Telemetry/ExecutionAttemptArgumentsTests.cs @@ -1,5 +1,4 @@ -using System; -using Polly.Telemetry; +using Polly.Telemetry; namespace Polly.Extensions.Tests.Telemetry; diff --git a/test/Polly.Core.Tests/Telemetry/TelemetryEventArgumentsTests.cs b/test/Polly.Core.Tests/Telemetry/TelemetryEventArgumentsTests.cs index 0334a824179..e2e870dd196 100644 --- a/test/Polly.Core.Tests/Telemetry/TelemetryEventArgumentsTests.cs +++ b/test/Polly.Core.Tests/Telemetry/TelemetryEventArgumentsTests.cs @@ -1,5 +1,4 @@ -using System; -using Polly.Telemetry; +using Polly.Telemetry; namespace Polly.Extensions.Tests.Telemetry; diff --git a/test/Polly.Core.Tests/Utils/ExceptionUtilitiesTests.cs b/test/Polly.Core.Tests/Utils/ExceptionUtilitiesTests.cs index b804f466645..58b882b77a1 100644 --- a/test/Polly.Core.Tests/Utils/ExceptionUtilitiesTests.cs +++ b/test/Polly.Core.Tests/Utils/ExceptionUtilitiesTests.cs @@ -1,5 +1,4 @@ -using System; -using Polly.Utils; +using Polly.Utils; namespace Polly.Core.Tests.Utils; diff --git a/test/Polly.Core.Tests/Utils/OutcomeResilienceStrategyTests.cs b/test/Polly.Core.Tests/Utils/OutcomeResilienceStrategyTests.cs index 419f82294c7..98eccbaf40a 100644 --- a/test/Polly.Core.Tests/Utils/OutcomeResilienceStrategyTests.cs +++ b/test/Polly.Core.Tests/Utils/OutcomeResilienceStrategyTests.cs @@ -1,6 +1,4 @@ -using System; -using System.Threading.Tasks; -using Polly.Utils; +using Polly.Utils; namespace Polly.Core.Tests.Utils; diff --git a/test/Polly.Core.Tests/Utils/ReloadableResilienceStrategyTests.cs b/test/Polly.Core.Tests/Utils/ReloadableResilienceStrategyTests.cs index da2e4e7e8e7..de4fa05067c 100644 --- a/test/Polly.Core.Tests/Utils/ReloadableResilienceStrategyTests.cs +++ b/test/Polly.Core.Tests/Utils/ReloadableResilienceStrategyTests.cs @@ -1,4 +1,3 @@ -using System.Collections.Generic; using Polly.Telemetry; using Polly.Utils; diff --git a/test/Polly.Core.Tests/Utils/TypeNameFormatterTests.cs b/test/Polly.Core.Tests/Utils/TypeNameFormatterTests.cs index ee91f54bf80..72047606315 100644 --- a/test/Polly.Core.Tests/Utils/TypeNameFormatterTests.cs +++ b/test/Polly.Core.Tests/Utils/TypeNameFormatterTests.cs @@ -1,7 +1,4 @@ -using System.Collections.Generic; -using Polly.Utils; - -namespace Polly.Core.Tests.Utils; +namespace Polly.Core.Tests.Utils; public class TypeNameFormatterTests { diff --git a/test/Polly.Extensions.Tests/Issues/IssuesTests.OverrideLibraryStrategies_1072.cs b/test/Polly.Extensions.Tests/Issues/IssuesTests.OverrideLibraryStrategies_1072.cs index 01d9fb5c2e8..7e12e803e81 100644 --- a/test/Polly.Extensions.Tests/Issues/IssuesTests.OverrideLibraryStrategies_1072.cs +++ b/test/Polly.Extensions.Tests/Issues/IssuesTests.OverrideLibraryStrategies_1072.cs @@ -2,7 +2,6 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Polly.Registry; -using Polly.Retry; namespace Polly.Extensions.Tests.Issues; diff --git a/test/Polly.Extensions.Tests/Telemetry/TelemetryResilienceStrategyTests.cs b/test/Polly.Extensions.Tests/Telemetry/TelemetryResilienceStrategyTests.cs index c0a52540f7a..a20e4a15e86 100644 --- a/test/Polly.Extensions.Tests/Telemetry/TelemetryResilienceStrategyTests.cs +++ b/test/Polly.Extensions.Tests/Telemetry/TelemetryResilienceStrategyTests.cs @@ -1,5 +1,3 @@ -using System.Collections.Generic; -using FluentAssertions; using Microsoft.Extensions.Logging; using Polly.Extensions.Telemetry; using Polly.Telemetry; diff --git a/test/Polly.Extensions.Tests/Utils/TelemetryUtilTests.cs b/test/Polly.Extensions.Tests/Utils/TelemetryUtilTests.cs index b2efdeec2f6..23ea7f45c3c 100644 --- a/test/Polly.Extensions.Tests/Utils/TelemetryUtilTests.cs +++ b/test/Polly.Extensions.Tests/Utils/TelemetryUtilTests.cs @@ -1,5 +1,4 @@ -using FluentAssertions; -using Polly.Extensions.Telemetry; +using Polly.Extensions.Telemetry; namespace Polly.Extensions.Tests.Utils; From 03f534bbb3e9ed292b7e8a5aff3fa78f36b31433 Mon Sep 17 00:00:00 2001 From: Martin Tomka Date: Thu, 22 Jun 2023 09:04:05 +0200 Subject: [PATCH 3/4] fixes --- Polly.sln | 2 -- test/Polly.Core.Tests/Helpers/FakeTimeProvider.cs | 10 +++++++++- test/Polly.Core.Tests/Issues/IssuesTests.cs | 2 +- .../Retry/RetryResilienceStrategyTests.cs | 1 + 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/Polly.sln b/Polly.sln index 4d551a46d35..dde4741a533 100644 --- a/Polly.sln +++ b/Polly.sln @@ -10,10 +10,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution build.cake = build.cake .github\workflows\build.yml = .github\workflows\build.yml .github\dependabot.yml = .github\dependabot.yml - Directory.Build.props = Directory.Build.props Directory.Build.targets = Directory.Build.targets Directory.Packages.props = Directory.Packages.props - GitVersion.yml = GitVersion.yml global.json = global.json README.md = README.md EndProjectSection diff --git a/test/Polly.Core.Tests/Helpers/FakeTimeProvider.cs b/test/Polly.Core.Tests/Helpers/FakeTimeProvider.cs index c878d839339..9e909ea9ff3 100644 --- a/test/Polly.Core.Tests/Helpers/FakeTimeProvider.cs +++ b/test/Polly.Core.Tests/Helpers/FakeTimeProvider.cs @@ -7,7 +7,9 @@ internal class FakeTimeProvider : Mock private DateTimeOffset? _time; public FakeTimeProvider() - : base(MockBehavior.Strict) => Setup(v => v.TimestampFrequency).Returns(Stopwatch.Frequency); + : base(MockBehavior.Loose) + { + } public FakeTimeProvider SetupUtcNow(DateTimeOffset? time = null) { @@ -27,6 +29,12 @@ public FakeTimeProvider AdvanceTime(TimeSpan time) return this; } + public FakeTimeProvider SetupTimestampFrequency() + { + Setup(x => x.TimestampFrequency).Returns(Stopwatch.Frequency); + return this; + } + public FakeTimeProvider SetupAnyDelay(CancellationToken cancellationToken = default) { Setup(x => x.Delay(It.IsAny(), cancellationToken)).Returns(Task.CompletedTask); diff --git a/test/Polly.Core.Tests/Issues/IssuesTests.cs b/test/Polly.Core.Tests/Issues/IssuesTests.cs index 0bb15eef3b0..e3c58624f78 100644 --- a/test/Polly.Core.Tests/Issues/IssuesTests.cs +++ b/test/Polly.Core.Tests/Issues/IssuesTests.cs @@ -2,5 +2,5 @@ namespace Polly.Core.Tests.Issues; public partial class IssuesTests { - private FakeTimeProvider TimeProvider { get; } = new FakeTimeProvider().SetupUtcNow().SetupAnyDelay().SetupGetTimestamp(); + private FakeTimeProvider TimeProvider { get; } = new FakeTimeProvider().SetupUtcNow().SetupAnyDelay().SetupGetTimestamp().SetupTimestampFrequency(); } diff --git a/test/Polly.Core.Tests/Retry/RetryResilienceStrategyTests.cs b/test/Polly.Core.Tests/Retry/RetryResilienceStrategyTests.cs index bb59f0e31d0..e4a2663bec0 100644 --- a/test/Polly.Core.Tests/Retry/RetryResilienceStrategyTests.cs +++ b/test/Polly.Core.Tests/Retry/RetryResilienceStrategyTests.cs @@ -17,6 +17,7 @@ public RetryResilienceStrategyTests() _telemetry = TestUtilities.CreateResilienceTelemetry(_diagnosticSource.Object); _options.ShouldHandle = _ => new ValueTask(false); + _timeProvider.Setup(v => v.TimestampFrequency).Returns(Stopwatch.Frequency); _timeProvider.SetupSequence(v => v.GetTimestamp()).Returns(0).Returns(100); } From fd2a4b1d14973aaed6feb80336b5427b8ec0a8a0 Mon Sep 17 00:00:00 2001 From: Martin Tomka Date: Thu, 22 Jun 2023 10:34:56 +0200 Subject: [PATCH 4/4] fixes --- test/Polly.Core.Tests/Helpers/FakeTimeProvider.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/Polly.Core.Tests/Helpers/FakeTimeProvider.cs b/test/Polly.Core.Tests/Helpers/FakeTimeProvider.cs index 9e909ea9ff3..681581122e5 100644 --- a/test/Polly.Core.Tests/Helpers/FakeTimeProvider.cs +++ b/test/Polly.Core.Tests/Helpers/FakeTimeProvider.cs @@ -7,7 +7,7 @@ internal class FakeTimeProvider : Mock private DateTimeOffset? _time; public FakeTimeProvider() - : base(MockBehavior.Loose) + : base(MockBehavior.Strict) { }