Skip to content

Commit

Permalink
Stabilize AddHedging_IntegrationTest test (#1644)
Browse files Browse the repository at this point in the history
  • Loading branch information
martintmk authored Sep 27, 2023
1 parent 6ce1158 commit 32aa4bc
Showing 1 changed file with 51 additions and 32 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -36,45 +36,64 @@ public async Task AddHedging_IntegrationTest()
{
int hedgingCount = 0;

var strategy = _builder
.AddHedging(new()
var strategy = _builder.AddHedging(new()
{
MaxHedgedAttempts = 4,
Delay = System.Threading.Timeout.InfiniteTimeSpan,
ShouldHandle = args => args.Outcome.Result switch
{
MaxHedgedAttempts = 4,
Delay = TimeSpan.FromMilliseconds(20),
ShouldHandle = args => args.Outcome.Result switch
{
"error" => PredicateResult.True(),
_ => PredicateResult.False()
},
ActionGenerator = args =>
"error" => PredicateResult.True(),
_ => PredicateResult.False()
},
ActionGenerator = args =>
{
return () => args.AttemptNumber switch
{
return async () =>
{
await Task.Delay(25, args.ActionContext.CancellationToken);
3 => Outcome.FromResultAsValueTask("success"),
_ => Outcome.FromResultAsValueTask("error")
};
},
OnHedging = args =>
{
Interlocked.Increment(ref hedgingCount);
return default;
}
})
.Build();

if (args.AttemptNumber == 3)
{
return Outcome.FromResult("success");
}
var result = await strategy.ExecuteAsync(token => new ValueTask<string>("error"));
result.Should().Be("success");
hedgingCount.Should().Be(3);
}

return Outcome.FromResult("error");
};
},
OnHedging = args =>
[Fact]
public async Task AddHedging_IntegrationTestWithRealDelay()
{
var strategy = _builder.AddHedging(new()
{
MaxHedgedAttempts = 4,
ShouldHandle = args => args.Outcome.Result switch
{
"error" => PredicateResult.True(),
_ => PredicateResult.False()
},
ActionGenerator = args =>
{
return async () =>
{
hedgingCount++;
return default;
}
})
.Build();
await Task.Delay(20);
var result = await strategy.ExecuteAsync(async token =>
{
await Task.Delay(25, token);
return "error";
});
return args.AttemptNumber switch
{
3 => Outcome.FromResult("success"),
_ => Outcome.FromResult("error")
};
};
}
})
.Build();

var result = await strategy.ExecuteAsync(token => new ValueTask<string>("error"));
result.Should().Be("success");
hedgingCount.Should().Be(4);
}
}

0 comments on commit 32aa4bc

Please sign in to comment.