|
|
|
@ -6,10 +6,13 @@ |
|
|
|
// All rights reserved.
|
|
|
|
// ==========================================================================
|
|
|
|
|
|
|
|
using System; |
|
|
|
using System.Threading; |
|
|
|
using System.Threading.Tasks; |
|
|
|
using FakeItEasy; |
|
|
|
using Orleans; |
|
|
|
using Orleans.Runtime; |
|
|
|
using Squidex.Infrastructure.Tasks; |
|
|
|
using Xunit; |
|
|
|
|
|
|
|
namespace Squidex.Infrastructure.Orleans |
|
|
|
@ -37,5 +40,41 @@ namespace Squidex.Infrastructure.Orleans |
|
|
|
A.CallTo(() => grain.ActivateAsync()) |
|
|
|
.MustHaveHappened(); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public async Task Should_fail_on_non_rejection_exception() |
|
|
|
{ |
|
|
|
A.CallTo(() => grain.ActivateAsync()) |
|
|
|
.Throws(new InvalidOperationException()); |
|
|
|
|
|
|
|
await Assert.ThrowsAsync<InvalidOperationException>(() => sut.Execute(CancellationToken.None)); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public async Task Should_retry_after_rejection_exception() |
|
|
|
{ |
|
|
|
A.CallTo(() => grain.ActivateAsync()) |
|
|
|
.Returns(TaskHelper.Done); |
|
|
|
|
|
|
|
A.CallTo(() => grain.ActivateAsync()) |
|
|
|
.Throws(new OrleansException()).Once(); |
|
|
|
|
|
|
|
await sut.Execute(CancellationToken.None); |
|
|
|
|
|
|
|
A.CallTo(() => grain.ActivateAsync()) |
|
|
|
.MustHaveHappened(Repeated.Exactly.Twice); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public async Task Should_fail_after_10_rejection_exception() |
|
|
|
{ |
|
|
|
A.CallTo(() => grain.ActivateAsync()) |
|
|
|
.Throws(new OrleansException()); |
|
|
|
|
|
|
|
await Assert.ThrowsAsync<OrleansException>(() => sut.Execute(CancellationToken.None)); |
|
|
|
|
|
|
|
A.CallTo(() => grain.ActivateAsync()) |
|
|
|
.MustHaveHappened(Repeated.Exactly.Times(10)); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|