Skip to content

Commit cec36cb

Browse files
authored
Introduce TelemetryResilienceStrategy (App-vNext#1140)
1 parent a3b57f9 commit cec36cb

File tree

49 files changed

+1040
-549
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+1040
-549
lines changed

eng/Library.targets

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
</ItemGroup>
4141
</Target>
4242

43-
<Target Name="AddInternalsVisibleToTest" BeforeTargets="BeforeCompile">
43+
<Target Name="AddInternalsVisibleToTest" BeforeTargets="BeforeCompile" Condition="'@(InternalsVisibleToTest)' != ''">
4444
<ItemGroup>
4545
<InternalsVisibleTo Include="%(InternalsVisibleToTest.Identity)$(PollyPublicKeySuffix)" />
4646
</ItemGroup>

src/Polly.Core.Tests/Helpers/TestArguments.cs

Lines changed: 0 additions & 10 deletions
This file was deleted.

src/Polly.Core.Tests/Helpers/TestUtils.cs

Lines changed: 0 additions & 40 deletions
This file was deleted.

src/Polly.Core.Tests/Polly.Core.Tests.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,11 @@
1313

1414
<ItemGroup>
1515
<ProjectReference Include="..\Polly.Core\Polly.Core.csproj" />
16+
<ProjectReference Include="..\Polly.TestUtils\Polly.TestUtils.csproj" />
1617
</ItemGroup>
1718

1819
<ItemGroup>
20+
<Using Include="Polly.TestUtils" />
1921
<Using Include="Polly.Core.Tests.Helpers" />
2022
</ItemGroup>
2123
</Project>

src/Polly.Core.Tests/ResilienceContextTests.cs

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
using Polly.Strategy;
2+
13
namespace Polly.Core.Tests;
24

35
public class ResilienceContextTests
@@ -19,7 +21,7 @@ public void Get_EnsureDefaults()
1921
[Fact]
2022
public async Task Get_EnsurePooled()
2123
{
22-
await TestUtils.AssertWithTimeoutAsync(() =>
24+
await TestUtilities.AssertWithTimeoutAsync(() =>
2325
{
2426
var context = ResilienceContext.Get();
2527

@@ -35,17 +37,29 @@ public void Return_Null_Throws()
3537
Assert.Throws<ArgumentNullException>(() => ResilienceContext.Return(null!));
3638
}
3739

40+
[Fact]
41+
public void AddResilienceEvent_Ok()
42+
{
43+
var context = ResilienceContext.Get();
44+
45+
context.AddResilienceEvent(new ReportedResilienceEvent("Dummy"));
46+
47+
context.ResilienceEvents.Should().HaveCount(1);
48+
context.ResilienceEvents.Should().Contain(new ReportedResilienceEvent("Dummy"));
49+
}
50+
3851
[Fact]
3952
public async Task Return_EnsureDefaults()
4053
{
41-
await TestUtils.AssertWithTimeoutAsync(() =>
54+
await TestUtilities.AssertWithTimeoutAsync(() =>
4255
{
4356
using var cts = new CancellationTokenSource();
4457
var context = ResilienceContext.Get();
4558
context.CancellationToken = cts.Token;
4659
context.Initialize<bool>(true);
4760
context.CancellationToken.Should().Be(cts.Token);
4861
context.Properties.Set(new ResiliencePropertyKey<int>("abc"), 10);
62+
context.AddResilienceEvent(new ReportedResilienceEvent("dummy"));
4963
ResilienceContext.Return(context);
5064

5165
AssertDefaults(context);
@@ -91,5 +105,6 @@ private static void AssertDefaults(ResilienceContext context)
91105
context.IsSynchronous.Should().BeFalse();
92106
context.CancellationToken.Should().Be(CancellationToken.None);
93107
context.Properties.Should().BeEmpty();
108+
context.ResilienceEvents.Should().BeEmpty();
94109
}
95110
}

src/Polly.Core.Tests/ResilienceStrategyBuilderTests.cs

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,29 @@ public void BuildStrategy_EnsureCorrectContext()
292292
verified2.Should().BeTrue();
293293
}
294294

295+
[Fact]
296+
public void Build_OnCreatingStrategy_EnsureRespected()
297+
{
298+
// arrange
299+
var strategy = new TestResilienceStrategy();
300+
var builder = new ResilienceStrategyBuilder
301+
{
302+
OnCreatingStrategy = strategies =>
303+
{
304+
strategies.Should().ContainSingle(s => s == strategy);
305+
strategies.Insert(0, new TestResilienceStrategy());
306+
}
307+
};
308+
309+
builder.AddStrategy(strategy);
310+
311+
// act
312+
var finalStrategy = builder.Build();
313+
314+
// assert
315+
finalStrategy.Should().BeOfType<ResilienceStrategyPipeline>();
316+
}
317+
295318
private class Strategy : ResilienceStrategy
296319
{
297320
public Action? Before { get; set; }

src/Polly.Core.Tests/Retry/RetryResilienceStrategyTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public class RetryResilienceStrategyTests
1111
private readonly ResilienceStrategyTelemetry _telemetry;
1212
private readonly Mock<DiagnosticSource> _diagnosticSource = new();
1313

14-
public RetryResilienceStrategyTests() => _telemetry = TestUtils.CreateResilienceTelemetry(_diagnosticSource.Object);
14+
public RetryResilienceStrategyTests() => _telemetry = TestUtilities.CreateResilienceTelemetry(_diagnosticSource.Object);
1515

1616
[Fact]
1717
public void ShouldRetryEmpty_Skipped()
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using Polly.Strategy;
2+
3+
namespace Polly.Core.Tests.Strategy;
4+
5+
public class ReportedResilienceEventTests
6+
{
7+
[Fact]
8+
public void Ctor_Ok()
9+
{
10+
var ev = new ReportedResilienceEvent("A");
11+
12+
ev.ToString().Should().Be("A");
13+
}
14+
15+
[Fact]
16+
public void Equality_Ok()
17+
{
18+
(new ReportedResilienceEvent("A") == new ReportedResilienceEvent("A")).Should().BeTrue();
19+
(new ReportedResilienceEvent("A") != new ReportedResilienceEvent("A")).Should().BeFalse();
20+
(new ReportedResilienceEvent("A") == new ReportedResilienceEvent("B")).Should().BeFalse();
21+
}
22+
}

src/Polly.Core.Tests/Timeout/TimeoutResilienceStrategyTests.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
using Moq;
2-
using Polly.Core.Tests.Helpers;
32
using Polly.Strategy;
43
using Polly.Timeout;
54

@@ -16,7 +15,7 @@ public class TimeoutResilienceStrategyTests : IDisposable
1615

1716
public TimeoutResilienceStrategyTests()
1817
{
19-
_telemetry = TestUtils.CreateResilienceTelemetry(_diagnosticSource.Object);
18+
_telemetry = TestUtilities.CreateResilienceTelemetry(_diagnosticSource.Object);
2019
_timeProvider = new FakeTimeProvider();
2120
_options = new TimeoutStrategyOptions();
2221
_cancellationSource = new CancellationTokenSource();

src/Polly.Core.Tests/Utils/SystemTimeProviderTests.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public void TimestampFrequency_Ok()
1313
[Fact]
1414
public async Task CancelAfter_Ok()
1515
{
16-
await TestUtils.AssertWithTimeoutAsync(async () =>
16+
await TestUtilities.AssertWithTimeoutAsync(async () =>
1717
{
1818
using var cts = new CancellationTokenSource();
1919
TimeProvider.System.CancelAfter(cts, TimeSpan.FromMilliseconds(10));
@@ -28,7 +28,7 @@ public async Task Delay_Ok()
2828
{
2929
using var cts = new CancellationTokenSource();
3030

31-
await TestUtils.AssertWithTimeoutAsync(() =>
31+
await TestUtilities.AssertWithTimeoutAsync(() =>
3232
{
3333
TimeProvider.System.Delay(TimeSpan.FromMilliseconds(10)).IsCompleted.Should().BeFalse();
3434
});
@@ -48,16 +48,20 @@ public async Task GetElapsedTime_Ok()
4848
var delay = TimeSpan.FromMilliseconds(10);
4949
var delayWithTolerance = TimeSpan.FromMilliseconds(30);
5050

51-
await TestUtils.AssertWithTimeoutAsync(async () =>
51+
await TestUtilities.AssertWithTimeoutAsync(async () =>
5252
{
5353
var stamp1 = TimeProvider.System.GetTimestamp();
5454
await Task.Delay(10);
5555
var stamp2 = TimeProvider.System.GetTimestamp();
5656

5757
var elapsed = TimeProvider.System.GetElapsedTime(stamp1, stamp2);
58+
var elapsed2 = TimeProvider.System.GetElapsedTime(stamp1);
5859

5960
elapsed.Should().BeGreaterThanOrEqualTo(delay);
6061
elapsed.Should().BeLessThan(delayWithTolerance);
62+
63+
elapsed2.Should().BeGreaterThanOrEqualTo(delay);
64+
elapsed2.Should().BeLessThan(delayWithTolerance);
6165
});
6266
}
6367

@@ -81,7 +85,7 @@ public void GetElapsedTime_Mocked_Ok()
8185
[Fact]
8286
public async Task UtcNow_Ok()
8387
{
84-
await TestUtils.AssertWithTimeoutAsync(() =>
88+
await TestUtilities.AssertWithTimeoutAsync(() =>
8589
{
8690
var now = TimeProvider.System.UtcNow;
8791
(DateTimeOffset.UtcNow - now).Should().BeLessThanOrEqualTo(TimeSpan.FromMilliseconds(10));

0 commit comments

Comments
 (0)