Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
<PackageVersion Include="Polly.Testing" Version="$(PollyVersion)" />
<PackageVersion Include="Polly.Contrib.WaitAndRetry" Version="1.1.1" />
<PackageVersion Include="ReportGenerator" Version="5.4.3" />
<PackageVersion Include="Shouldly" Version="4.2.1" />
<PackageVersion Include="SonarAnalyzer.CSharp" Version="10.5.0.109200" />
<PackageVersion Include="StyleCop.Analyzers" Version="1.2.0-beta.556" />
<PackageVersion Include="System.ComponentModel.Annotations" Version="4.5.0" />
Expand Down
4 changes: 1 addition & 3 deletions eng/Test.targets
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,11 @@
</PropertyGroup>

<ItemGroup>
<Using Include="FluentAssertions"/>
<Using Include="Xunit"/>
<Using Include="Xunit" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="coverlet.msbuild" PrivateAssets="all" />
<PackageReference Include="FluentAssertions" />
<PackageReference Include="GitHubActionsTestLogger" />
<PackageReference Include="Microsoft.NET.Test.Sdk" />
<PackageReference Include="NSubstitute" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,9 @@ public void Constructor_Old_Ok()

var args = new BreakDurationGeneratorArguments(expectedFailureRate, failureCount, context);

args.FailureRate.Should().Be(expectedFailureRate);
args.FailureCount.Should().Be(failureCount);
args.Context.Should().Be(context);
args.FailureRate.ShouldBe(expectedFailureRate);
args.FailureCount.ShouldBe(failureCount);
args.Context.ShouldBe(context);
}

[Fact]
Expand All @@ -28,9 +28,9 @@ public void Constructor_Ok()

var args = new BreakDurationGeneratorArguments(expectedFailureRate, failureCount, context, 99);

args.FailureRate.Should().Be(expectedFailureRate);
args.FailureCount.Should().Be(failureCount);
args.Context.Should().Be(context);
args.HalfOpenAttempts.Should().Be(99);
args.FailureRate.ShouldBe(expectedFailureRate);
args.FailureCount.ShouldBe(failureCount);
args.Context.ShouldBe(context);
args.HalfOpenAttempts.ShouldBe(99);
}
}
44 changes: 22 additions & 22 deletions test/Polly.Core.Tests/CircuitBreaker/BrokenCircuitExceptionTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,50 +8,50 @@ public class BrokenCircuitExceptionTests
public void Ctor_Default_Ok()
{
var exception = new BrokenCircuitException();
exception.Message.Should().Be("The circuit is now open and is not allowing calls.");
exception.RetryAfter.Should().BeNull();
exception.Message.ShouldBe("The circuit is now open and is not allowing calls.");
exception.RetryAfter.ShouldBeNull();
}

[Fact]
public void Ctor_Message_Ok()
{
var exception = new BrokenCircuitException(TestMessage);
exception.Message.Should().Be(TestMessage);
exception.RetryAfter.Should().BeNull();
exception.Message.ShouldBe(TestMessage);
exception.RetryAfter.ShouldBeNull();
}

[Fact]
public void Ctor_RetryAfter_Ok()
{
var exception = new BrokenCircuitException(TestRetryAfter);
exception.Message.Should().Be($"The circuit is now open and is not allowing calls. It can be retried after '{TestRetryAfter}'.");
exception.RetryAfter.Should().Be(TestRetryAfter);
exception.Message.ShouldBe($"The circuit is now open and is not allowing calls. It can be retried after '{TestRetryAfter}'.");
exception.RetryAfter.ShouldBe(TestRetryAfter);
}

[Fact]
public void Ctor_Message_RetryAfter_Ok()
{
var exception = new BrokenCircuitException(TestMessage, TestRetryAfter);
exception.Message.Should().Be(TestMessage);
exception.RetryAfter.Should().Be(TestRetryAfter);
exception.Message.ShouldBe(TestMessage);
exception.RetryAfter.ShouldBe(TestRetryAfter);
}

[Fact]
public void Ctor_Message_InnerException_Ok()
{
var exception = new BrokenCircuitException(TestMessage, new InvalidOperationException());
exception.Message.Should().Be(TestMessage);
exception.InnerException.Should().BeOfType<InvalidOperationException>();
exception.RetryAfter.Should().BeNull();
exception.Message.ShouldBe(TestMessage);
exception.InnerException.ShouldBeOfType<InvalidOperationException>();
exception.RetryAfter.ShouldBeNull();
}

[Fact]
public void Ctor_Message_RetryAfter_InnerException_Ok()
{
var exception = new BrokenCircuitException(TestMessage, TestRetryAfter, new InvalidOperationException());
exception.Message.Should().Be(TestMessage);
exception.InnerException.Should().BeOfType<InvalidOperationException>();
exception.RetryAfter.Should().Be(TestRetryAfter);
exception.Message.ShouldBe(TestMessage);
exception.InnerException.ShouldBeOfType<InvalidOperationException>();
exception.RetryAfter.ShouldBe(TestRetryAfter);
}

#if NETFRAMEWORK
Expand All @@ -60,21 +60,21 @@ public void BinarySerialization_NonNullRetryAfter_Ok()
{
var exception = new BrokenCircuitException(TestMessage, TestRetryAfter, new InvalidOperationException());
BrokenCircuitException roundtripResult = BinarySerializationUtil.SerializeAndDeserializeException(exception);
roundtripResult.Should().NotBeNull();
roundtripResult.Message.Should().Be(TestMessage);
roundtripResult.InnerException.Should().BeOfType<InvalidOperationException>();
roundtripResult.RetryAfter.Should().Be(TestRetryAfter);
roundtripResult.ShouldNotBeNull();
roundtripResult.Message.ShouldBe(TestMessage);
roundtripResult.InnerException.ShouldBeOfType<InvalidOperationException>();
roundtripResult.RetryAfter.ShouldBe(TestRetryAfter);
}

[Fact]
public void BinarySerialization_NullRetryAfter_Ok()
{
var exception = new BrokenCircuitException(TestMessage, new InvalidOperationException());
BrokenCircuitException roundtripResult = BinarySerializationUtil.SerializeAndDeserializeException(exception);
roundtripResult.Should().NotBeNull();
roundtripResult.Message.Should().Be(TestMessage);
roundtripResult.InnerException.Should().BeOfType<InvalidOperationException>();
roundtripResult.RetryAfter.Should().BeNull();
roundtripResult.ShouldNotBeNull();
roundtripResult.Message.ShouldBe(TestMessage);
roundtripResult.InnerException.ShouldBeOfType<InvalidOperationException>();
roundtripResult.RetryAfter.ShouldBeNull();
}
#endif

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,13 @@ public void Ctor_Isolated(bool isolated)
using var reg = control.Initialize(
c =>
{
c.IsSynchronous.Should().BeTrue();
c.IsSynchronous.ShouldBeTrue();
isolateCalled = true;
return Task.CompletedTask;
},
_ => Task.CompletedTask);

isolateCalled.Should().Be(isolated);
isolateCalled.ShouldBe(isolated);
}

[InlineData(true)]
Expand All @@ -42,24 +42,21 @@ public async Task IsolateAsync_NotInitialized_Ok(bool closedAfter)
using var reg = control.Initialize(
c =>
{
c.IsSynchronous.Should().BeTrue();
c.IsSynchronous.ShouldBeTrue();
isolated = true;
return Task.CompletedTask;
},
_ => Task.CompletedTask);

isolated.Should().Be(!closedAfter);
isolated.ShouldBe(!closedAfter);
}

[Fact]
public async Task ResetAsync_NotInitialized_Ok()
{
var control = new CircuitBreakerManualControl();

await control
.Invoking(c => c.CloseAsync())
.Should()
.NotThrowAsync();
await Should.NotThrowAsync(() => control.CloseAsync());
}

[Fact]
Expand All @@ -74,7 +71,7 @@ public async Task Initialize_Twice_Ok()
await control.IsolateAsync(cancellationToken);
await control.CloseAsync(cancellationToken);

called.Should().Be(2);
called.ShouldBe(2);
}

[Fact]
Expand All @@ -93,7 +90,7 @@ public async Task Initialize_DisposeRegistration_ShuldBeCancelled()
await control.IsolateAsync(cancellationToken);
await control.CloseAsync(cancellationToken);

called.Should().Be(2);
called.ShouldBe(2);
}

[Fact]
Expand All @@ -107,23 +104,23 @@ public async Task Initialize_Ok()
control.Initialize(
context =>
{
context.IsVoid.Should().BeTrue();
context.IsSynchronous.Should().BeFalse();
context.IsVoid.ShouldBeTrue();
context.IsSynchronous.ShouldBeFalse();
isolateCalled = true;
return Task.CompletedTask;
},
context =>
{
context.IsVoid.Should().BeTrue();
context.IsSynchronous.Should().BeFalse();
context.IsVoid.ShouldBeTrue();
context.IsSynchronous.ShouldBeFalse();
resetCalled = true;
return Task.CompletedTask;
});

await control.IsolateAsync(cancellationToken);
await control.CloseAsync(cancellationToken);

isolateCalled.Should().BeTrue();
resetCalled.Should().BeTrue();
isolateCalled.ShouldBeTrue();
resetCalled.ShouldBeTrue();
}
}
35 changes: 16 additions & 19 deletions test/Polly.Core.Tests/CircuitBreaker/CircuitBreakerOptionsTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,25 +12,25 @@ public async Task ShouldHandle_EnsureDefaults()
var options = new CircuitBreakerStrategyOptions();
var context = ResilienceContextPool.Shared.Get();

(await options.ShouldHandle(new CircuitBreakerPredicateArguments<object>(context, Outcome.FromResult<object>("dummy")))).Should().Be(false);
(await options.ShouldHandle(new CircuitBreakerPredicateArguments<object>(context, Outcome.FromException<object>(new OperationCanceledException())))).Should().Be(false);
(await options.ShouldHandle(new CircuitBreakerPredicateArguments<object>(context, Outcome.FromException<object>(new InvalidOperationException())))).Should().Be(true);
(await options.ShouldHandle(new CircuitBreakerPredicateArguments<object>(context, Outcome.FromResult<object>("dummy")))).ShouldBe(false);
(await options.ShouldHandle(new CircuitBreakerPredicateArguments<object>(context, Outcome.FromException<object>(new OperationCanceledException())))).ShouldBe(false);
(await options.ShouldHandle(new CircuitBreakerPredicateArguments<object>(context, Outcome.FromException<object>(new InvalidOperationException())))).ShouldBe(true);
}

[Fact]
public void Ctor_Defaults()
{
var options = new CircuitBreakerStrategyOptions<int>();

options.BreakDuration.Should().Be(TimeSpan.FromSeconds(5));
options.FailureRatio.Should().Be(0.1);
options.MinimumThroughput.Should().Be(100);
options.SamplingDuration.Should().Be(TimeSpan.FromSeconds(30));
options.OnOpened.Should().BeNull();
options.OnClosed.Should().BeNull();
options.OnHalfOpened.Should().BeNull();
options.ShouldHandle.Should().NotBeNull();
options.Name.Should().Be("CircuitBreaker");
options.BreakDuration.ShouldBe(TimeSpan.FromSeconds(5));
options.FailureRatio.ShouldBe(0.1);
options.MinimumThroughput.ShouldBe(100);
options.SamplingDuration.ShouldBe(TimeSpan.FromSeconds(30));
options.OnOpened.ShouldBeNull();
options.OnClosed.ShouldBeNull();
options.OnHalfOpened.ShouldBeNull();
options.ShouldHandle.ShouldNotBeNull();
options.Name.ShouldBe("CircuitBreaker");

// now set to min values
options.FailureRatio = 0.001;
Expand All @@ -56,18 +56,15 @@ public void InvalidOptions_Validate()
ShouldHandle = null!,
};

options
.Invoking(o => ValidationHelper.ValidateObject(new(o, "Dummy.")))
.Should()
.Throw<ValidationException>()
.WithMessage("""
var exception = Should.Throw<ValidationException>(() => ValidationHelper.ValidateObject(new(options, "Dummy.")));
exception.Message.Trim().ShouldBe("""
Dummy.

Validation Errors:
The field MinimumThroughput must be between 2 and 2147483647.
The field SamplingDuration must be between 00:00:00.5000000 and 1.00:00:00.
The field BreakDuration must be between 00:00:00.5000000 and 1.00:00:00.
The ShouldHandle field is required.
""");
""",
StringCompareShould.IgnoreLineEndings);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public static void Ctor_Ok()
ResilienceContextPool.Shared.Get(CancellationToken.None),
Outcome.FromResult(1));

args.Context.Should().NotBeNull();
args.Outcome.Result.Should().Be(1);
args.Context.ShouldNotBeNull();
args.Outcome.Result.ShouldBe(1);
}
}
Loading