Skip to content

Commit

Permalink
fix: refactoring throttling test
Browse files Browse the repository at this point in the history
  • Loading branch information
kulbachnyi.v committed Dec 18, 2023
1 parent 0c69a04 commit eb2972d
Showing 1 changed file with 34 additions and 51 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,17 @@ public void TestSetup()
}

[Test]
public void Should_handle_null_priority_how_sheddable()
public void Should_correctly_compute_rejection_probability_for_different_priority()
{
Accept(1, RequestPriority.Critical);
Reject(1, RequestPriority.Ordinary);
var criticalProbability = module.RejectionProbability(RequestPriority.Critical);
var ordinaryProbability = module.RejectionProbability(RequestPriority.Ordinary);
criticalProbability.Should().BeLessThan(ordinaryProbability);
}

[Test]
public void Should_handle_null_priority_as_sheddable()
{
Accept(1);
module.Accepts(RequestPriority.Sheddable).Should().Be(1);
Expand All @@ -53,20 +63,21 @@ public void Should_handle_null_priority_how_sheddable()
module.Accepts(RequestPriority.Sheddable).Should().Be(1);
module.Requests(RequestPriority.Sheddable).Should().Be(2);
}

[TestCase(RequestPriority.Critical)]
[TestCase(RequestPriority.Ordinary)]
[TestCase(RequestPriority.Sheddable)]
public void Should_correctly_handle_request_by_priority(RequestPriority? priority)
{
var priorities = new[] {RequestPriority.Critical, RequestPriority.Ordinary, RequestPriority.Sheddable};

Accept(1, priority);
module.Accepts(priority).Should().Be(1);
foreach (var p in priorities)
{
module.Requests(p).Should().Be(p == priority ? 1 : 0);
}

Reject(1, priority);
module.Accepts(priority).Should().Be(1);
foreach (var p in priorities)
Expand All @@ -75,10 +86,7 @@ public void Should_correctly_handle_request_by_priority(RequestPriority? priorit
}
}

[TestCase(null)]
[TestCase(RequestPriority.Critical)]
[TestCase(RequestPriority.Ordinary)]
[TestCase(RequestPriority.Sheddable)]
[TestCaseSource(nameof(PriorityCase))]
public void Should_increment_according_to_priority_requests_and_accepts_on_accepted_results(RequestPriority? priority)
{
for (var i = 1; i <= 10; i++)
Expand All @@ -90,10 +98,7 @@ public void Should_increment_according_to_priority_requests_and_accepts_on_accep
}
}

[TestCase(null)]
[TestCase(RequestPriority.Critical)]
[TestCase(RequestPriority.Ordinary)]
[TestCase(RequestPriority.Sheddable)]
[TestCaseSource(nameof(PriorityCase))]
public void Should_increment_according_to_priority_requests_and_accepts_on_OperationCancelledException_when_request_is_cancelled_by_token(RequestPriority? priority)
{
using (var cts = new CancellationTokenSource())
Expand All @@ -112,10 +117,7 @@ public void Should_increment_according_to_priority_requests_and_accepts_on_Opera
}
}

[TestCase(null)]
[TestCase(RequestPriority.Critical)]
[TestCase(RequestPriority.Ordinary)]
[TestCase(RequestPriority.Sheddable)]
[TestCaseSource(nameof(PriorityCase))]
public void Should_increment_according_to_priority_only_requests_on_OperationCancelledException_when_token_is_not_signaled(RequestPriority? priority)
{
using (var cts = new CancellationTokenSource())
Expand All @@ -132,10 +134,7 @@ public void Should_increment_according_to_priority_only_requests_on_OperationCan
}
}

[TestCase(null)]
[TestCase(RequestPriority.Critical)]
[TestCase(RequestPriority.Ordinary)]
[TestCase(RequestPriority.Sheddable)]
[TestCaseSource(nameof(PriorityCase))]
public void Should_increment_according_to_priority_only_requests_on_rejected_results(RequestPriority? priority)
{
for (var i = 1; i <= 10; i++)
Expand All @@ -147,10 +146,7 @@ public void Should_increment_according_to_priority_only_requests_on_rejected_res
}
}

[TestCase(null)]
[TestCase(RequestPriority.Critical)]
[TestCase(RequestPriority.Ordinary)]
[TestCase(RequestPriority.Sheddable)]
[TestCaseSource(nameof(PriorityCase))]
public void Should_correctly_compute_according_to_priority_requests_to_accepts_ratio(RequestPriority? priority)
{
module.Ratio(priority).Should().Be(0.0);
Expand All @@ -164,20 +160,14 @@ public void Should_correctly_compute_according_to_priority_requests_to_accepts_r
module.Ratio(priority).Should().Be(2.0);
}

[TestCase(null)]
[TestCase(RequestPriority.Critical)]
[TestCase(RequestPriority.Ordinary)]
[TestCase(RequestPriority.Sheddable)]
[TestCaseSource(nameof(PriorityCase))]
public void Should_not_reject_according_to_priority_requests_until_minimum_count_is_reached(RequestPriority? priority)
{
for (var i = 0; i < MinimumRequests - 1; i++)
Execute(rejectedResult, priority).Should().BeSameAs(rejectedResult);
}

[TestCase(null)]
[TestCase(RequestPriority.Critical)]
[TestCase(RequestPriority.Ordinary)]
[TestCase(RequestPriority.Sheddable)]
[TestCaseSource(nameof(PriorityCase))]
public void Should_honor_according_to_priority_rejection_probability_cap(RequestPriority? priority)
{
Accept(1, priority);
Expand All @@ -187,10 +177,7 @@ public void Should_honor_according_to_priority_rejection_probability_cap(Request
module.RejectionProbability(priority).Should().Be(ProbabilityCap);
}

[TestCase(null)]
[TestCase(RequestPriority.Critical)]
[TestCase(RequestPriority.Ordinary)]
[TestCase(RequestPriority.Sheddable)]
[TestCaseSource(nameof(PriorityCase))]
public void Should_increase_according_to_priority_rejection_probability_as_more_requests_are_rejected(RequestPriority? priority)
{
Accept(1, priority);
Expand All @@ -206,10 +193,7 @@ public void Should_increase_according_to_priority_rejection_probability_as_more_
}
}

[TestCase(null)]
[TestCase(RequestPriority.Critical)]
[TestCase(RequestPriority.Ordinary)]
[TestCase(RequestPriority.Sheddable)]
[TestCaseSource(nameof(PriorityCase))]
public void Should_gradually_decrease_according_to_priority_rejection_probability_to_zero_after_requests_become_accepted_after_big_failure(RequestPriority? priority)
{
Accept(10, priority);
Expand All @@ -230,10 +214,7 @@ public void Should_gradually_decrease_according_to_priority_rejection_probabilit
Assert.Fail("Rejection probability did not vanish after 10k accepts.");
}

[TestCase(null)]
[TestCase(RequestPriority.Critical)]
[TestCase(RequestPriority.Ordinary)]
[TestCase(RequestPriority.Sheddable)]
[TestCaseSource(nameof(PriorityCase))]
public void Should_reject_according_to_priority_with_throttled_result_when_rejection_probability_allows(RequestPriority? priority)
{
options = new AdaptiveThrottlingOptions(Guid.NewGuid().ToString(), 1, MinimumRequests, CriticalRatio, 1.0);
Expand Down Expand Up @@ -261,10 +242,7 @@ public void Should_reject_according_to_priority_with_throttled_result_when_rejec
Assert.Fail("No requests were rejected in 100 attempts, which was highly expected.");
}

[TestCase(null)]
[TestCase(RequestPriority.Critical)]
[TestCase(RequestPriority.Ordinary)]
[TestCase(RequestPriority.Sheddable)]
[TestCaseSource(nameof(PriorityCase))]
[Explicit]
public void Should_forget_according_to_priority_old_information_as_time_passes(RequestPriority? priority)
{
Expand All @@ -277,10 +255,7 @@ public void Should_forget_according_to_priority_old_information_as_time_passes(R
module.Accepts(priority).Should().Be(0);
}

[TestCase(null)]
[TestCase(RequestPriority.Critical)]
[TestCase(RequestPriority.Ordinary)]
[TestCase(RequestPriority.Sheddable)]
[TestCaseSource(nameof(PriorityCase))]
public void Should_not_account_according_to_priority_for_requests_still_in_progress(RequestPriority? priority)
{
var parameters = new RequestParameters(priority: priority);
Expand Down Expand Up @@ -311,6 +286,14 @@ public void Should_not_account_according_to_priority_for_requests_still_in_progr
Console.Out.WriteLine(module.RejectionProbability);
}

public static object[] PriorityCase =
{
new object[] {null},
new object[] {RequestPriority.Critical},
new object[] {RequestPriority.Ordinary},
new object[] {RequestPriority.Sheddable}
};

private void Accept(int count, RequestPriority? priority = null)
{
for (var i = 0; i < count; i++)
Expand Down

0 comments on commit eb2972d

Please sign in to comment.