From dc6dedc6ad77b677dd9e41c73bbfdb354644789c Mon Sep 17 00:00:00 2001 From: Brennan Date: Mon, 12 Sep 2022 17:26:41 -0700 Subject: [PATCH 1/2] Disallow TimeSpan.Zero in rate limiters --- .../Threading/RateLimiting/FixedWindowRateLimiter.cs | 4 ++-- .../RateLimiting/FixedWindowRateLimiterOptions.cs | 3 +-- .../Threading/RateLimiting/SlidingWindowRateLimiter.cs | 4 ++-- .../RateLimiting/SlidingWindowRateLimiterOptions.cs | 3 +-- .../Threading/RateLimiting/TokenBucketRateLimiter.cs | 4 ++-- .../RateLimiting/TokenBucketRateLimiterOptions.cs | 3 +-- .../tests/FixedWindowRateLimiterTests.cs | 9 +++++++++ .../tests/SlidingWindowRateLimiterTests.cs | 10 ++++++++++ .../tests/TokenBucketRateLimiterTests.cs | 10 ++++++++++ 9 files changed, 38 insertions(+), 12 deletions(-) diff --git a/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/FixedWindowRateLimiter.cs b/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/FixedWindowRateLimiter.cs index 774a6876c245e..780eddd2cee2e 100644 --- a/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/FixedWindowRateLimiter.cs +++ b/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/FixedWindowRateLimiter.cs @@ -59,9 +59,9 @@ public FixedWindowRateLimiter(FixedWindowRateLimiterOptions options) { throw new ArgumentException($"{nameof(options.QueueLimit)} must be set to a value greater than or equal to 0.", nameof(options)); } - if (options.Window < TimeSpan.Zero) + if (options.Window <= TimeSpan.Zero) { - throw new ArgumentException($"{nameof(options.Window)} must be set to a value greater than or equal to TimeSpan.Zero.", nameof(options)); + throw new ArgumentException($"{nameof(options.Window)} must be set to a value greater than TimeSpan.Zero.", nameof(options)); } _options = new FixedWindowRateLimiterOptions diff --git a/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/FixedWindowRateLimiterOptions.cs b/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/FixedWindowRateLimiterOptions.cs index a6d2b16475552..8f7dbaa344beb 100644 --- a/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/FixedWindowRateLimiterOptions.cs +++ b/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/FixedWindowRateLimiterOptions.cs @@ -10,9 +10,8 @@ public sealed class FixedWindowRateLimiterOptions { /// /// Specifies the time window that takes in the requests. - /// Must be set to a value >= by the time these options are passed to the constructor of . + /// Must be set to a value greater than by the time these options are passed to the constructor of . /// - /// means the limiter will never replenish. public TimeSpan Window { get; set; } = TimeSpan.Zero; /// diff --git a/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/SlidingWindowRateLimiter.cs b/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/SlidingWindowRateLimiter.cs index a1fe3e2839ed2..5dfc36914487e 100644 --- a/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/SlidingWindowRateLimiter.cs +++ b/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/SlidingWindowRateLimiter.cs @@ -63,9 +63,9 @@ public SlidingWindowRateLimiter(SlidingWindowRateLimiterOptions options) { throw new ArgumentException($"{nameof(options.QueueLimit)} must be set to a value greater than or equal to 0.", nameof(options)); } - if (options.Window < TimeSpan.Zero) + if (options.Window <= TimeSpan.Zero) { - throw new ArgumentException($"{nameof(options.Window)} must be set to a value greater than or equal to TimeSpan.Zero.", nameof(options)); + throw new ArgumentException($"{nameof(options.Window)} must be set to a value greater than TimeSpan.Zero.", nameof(options)); } _options = new SlidingWindowRateLimiterOptions diff --git a/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/SlidingWindowRateLimiterOptions.cs b/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/SlidingWindowRateLimiterOptions.cs index f7f399e175b1f..93f7ba933b464 100644 --- a/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/SlidingWindowRateLimiterOptions.cs +++ b/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/SlidingWindowRateLimiterOptions.cs @@ -10,9 +10,8 @@ public sealed class SlidingWindowRateLimiterOptions { /// /// Specifies the minimum period between replenishments. - /// Must be set to a value >= by the time these options are passed to the constructor of . + /// Must be set to a value greater than by the time these options are passed to the constructor of . /// - /// means the limiter will never replenish. public TimeSpan Window { get; set; } = TimeSpan.Zero; /// diff --git a/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/TokenBucketRateLimiter.cs b/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/TokenBucketRateLimiter.cs index 9238a62a0c03e..f1fbcb4433c4d 100644 --- a/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/TokenBucketRateLimiter.cs +++ b/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/TokenBucketRateLimiter.cs @@ -61,9 +61,9 @@ public TokenBucketRateLimiter(TokenBucketRateLimiterOptions options) { throw new ArgumentException($"{nameof(options.QueueLimit)} must be set to a value greater than or equal to 0.", nameof(options)); } - if (options.ReplenishmentPeriod < TimeSpan.Zero) + if (options.ReplenishmentPeriod <= TimeSpan.Zero) { - throw new ArgumentException($"{nameof(options.ReplenishmentPeriod)} must be set to a value greater than or equal to TimeSpan.Zero.", nameof(options)); + throw new ArgumentException($"{nameof(options.ReplenishmentPeriod)} must be set to a value greater than TimeSpan.Zero.", nameof(options)); } _options = new TokenBucketRateLimiterOptions diff --git a/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/TokenBucketRateLimiterOptions.cs b/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/TokenBucketRateLimiterOptions.cs index b0371119ce3c0..2c065d9432e67 100644 --- a/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/TokenBucketRateLimiterOptions.cs +++ b/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/TokenBucketRateLimiterOptions.cs @@ -10,9 +10,8 @@ public sealed class TokenBucketRateLimiterOptions { /// /// Specifies the minimum period between replenishments. - /// Must be set to a value >= by the time these options are passed to the constructor of . + /// Must be set to a value greater than by the time these options are passed to the constructor of . /// - /// means the limiter will never replenish. public TimeSpan ReplenishmentPeriod { get; set; } = TimeSpan.Zero; /// diff --git a/src/libraries/System.Threading.RateLimiting/tests/FixedWindowRateLimiterTests.cs b/src/libraries/System.Threading.RateLimiting/tests/FixedWindowRateLimiterTests.cs index f5c75a0308ab2..1f597748d67f3 100644 --- a/src/libraries/System.Threading.RateLimiting/tests/FixedWindowRateLimiterTests.cs +++ b/src/libraries/System.Threading.RateLimiting/tests/FixedWindowRateLimiterTests.cs @@ -71,6 +71,15 @@ public override void InvalidOptionsThrows() Window = TimeSpan.FromMinutes(-2), AutoReplenishment = false, })); + Assert.Throws( + () => new FixedWindowRateLimiter(new FixedWindowRateLimiterOptions + { + PermitLimit = 1, + QueueProcessingOrder = QueueProcessingOrder.NewestFirst, + QueueLimit = 1, + Window = TimeSpan.Zero, + AutoReplenishment = false, + })); } [Fact] diff --git a/src/libraries/System.Threading.RateLimiting/tests/SlidingWindowRateLimiterTests.cs b/src/libraries/System.Threading.RateLimiting/tests/SlidingWindowRateLimiterTests.cs index bd0d0d298d5ad..66e6cb2d5f228 100644 --- a/src/libraries/System.Threading.RateLimiting/tests/SlidingWindowRateLimiterTests.cs +++ b/src/libraries/System.Threading.RateLimiting/tests/SlidingWindowRateLimiterTests.cs @@ -87,6 +87,16 @@ public override void InvalidOptionsThrows() SegmentsPerWindow = 1, AutoReplenishment = false })); + Assert.Throws( + () => new SlidingWindowRateLimiter(new SlidingWindowRateLimiterOptions + { + PermitLimit = 1, + QueueProcessingOrder = QueueProcessingOrder.NewestFirst, + QueueLimit = 1, + Window = TimeSpan.Zero, + SegmentsPerWindow = 1, + AutoReplenishment = false + })); } [Fact] diff --git a/src/libraries/System.Threading.RateLimiting/tests/TokenBucketRateLimiterTests.cs b/src/libraries/System.Threading.RateLimiting/tests/TokenBucketRateLimiterTests.cs index 69876938fdfba..79c368e2b6d34 100644 --- a/src/libraries/System.Threading.RateLimiting/tests/TokenBucketRateLimiterTests.cs +++ b/src/libraries/System.Threading.RateLimiting/tests/TokenBucketRateLimiterTests.cs @@ -87,6 +87,16 @@ public override void InvalidOptionsThrows() TokensPerPeriod = 1, AutoReplenishment = false })); + Assert.Throws( + () => new TokenBucketRateLimiter(new TokenBucketRateLimiterOptions + { + TokenLimit = 1, + QueueProcessingOrder = QueueProcessingOrder.NewestFirst, + QueueLimit = 1, + ReplenishmentPeriod = TimeSpan.Zero, + TokensPerPeriod = 1, + AutoReplenishment = false + })); } [Fact] From 22b71fd7c247f3b1fecaf84c9d7a92453e87d707 Mon Sep 17 00:00:00 2001 From: Brennan Conroy Date: Thu, 22 Sep 2022 14:25:37 -0700 Subject: [PATCH 2/2] fb --- .../src/Resources/Strings.resx | 9 +++++++++ .../Threading/RateLimiting/ConcurrencyLimiter.cs | 4 ++-- .../Threading/RateLimiting/FixedWindowRateLimiter.cs | 6 +++--- .../RateLimiting/SlidingWindowRateLimiter.cs | 12 ++++++++---- .../Threading/RateLimiting/TokenBucketRateLimiter.cs | 12 ++++++++---- .../tests/ConcurrencyLimiterTests.cs | 4 ++-- .../tests/FixedWindowRateLimiterTests.cs | 10 +++++----- .../tests/SlidingWindowRateLimiterTests.cs | 12 ++++++------ .../tests/TokenBucketRateLimiterTests.cs | 12 ++++++------ 9 files changed, 49 insertions(+), 32 deletions(-) diff --git a/src/libraries/System.Threading.RateLimiting/src/Resources/Strings.resx b/src/libraries/System.Threading.RateLimiting/src/Resources/Strings.resx index 0bbb8516816a2..cb67a1ee66da1 100644 --- a/src/libraries/System.Threading.RateLimiting/src/Resources/Strings.resx +++ b/src/libraries/System.Threading.RateLimiting/src/Resources/Strings.resx @@ -126,4 +126,13 @@ Over 49 days is not supported. + + {0} must be set to a value greater than 0. + + + {0} must be set to a value greater than or equal to 0. + + + {0} must be set to a value greater than TimeSpan.Zero. + \ No newline at end of file diff --git a/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/ConcurrencyLimiter.cs b/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/ConcurrencyLimiter.cs index 508340a2e138b..90c4620d18d33 100644 --- a/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/ConcurrencyLimiter.cs +++ b/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/ConcurrencyLimiter.cs @@ -47,11 +47,11 @@ public ConcurrencyLimiter(ConcurrencyLimiterOptions options) } if (options.PermitLimit <= 0) { - throw new ArgumentException($"{nameof(options.PermitLimit)} must be set to a value greater than 0.", nameof(options)); + throw new ArgumentException(SR.Format(SR.ShouldBeGreaterThan0, nameof(options.PermitLimit)), nameof(options)); } if (options.QueueLimit < 0) { - throw new ArgumentException($"{nameof(options.QueueLimit)} must be set to a value greater than or equal to 0.", nameof(options)); + throw new ArgumentException(SR.Format(SR.ShouldBeGreaterThanOrEqual0, nameof(options.QueueLimit)), nameof(options)); } _options = new ConcurrencyLimiterOptions diff --git a/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/FixedWindowRateLimiter.cs b/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/FixedWindowRateLimiter.cs index 780eddd2cee2e..71dd29faa1425 100644 --- a/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/FixedWindowRateLimiter.cs +++ b/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/FixedWindowRateLimiter.cs @@ -53,15 +53,15 @@ public FixedWindowRateLimiter(FixedWindowRateLimiterOptions options) } if (options.PermitLimit <= 0) { - throw new ArgumentException($"{nameof(options.PermitLimit)} must be set to a value greater than 0.", nameof(options)); + throw new ArgumentException(SR.Format(SR.ShouldBeGreaterThan0, nameof(options.PermitLimit)), nameof(options)); } if (options.QueueLimit < 0) { - throw new ArgumentException($"{nameof(options.QueueLimit)} must be set to a value greater than or equal to 0.", nameof(options)); + throw new ArgumentException(SR.Format(SR.ShouldBeGreaterThanOrEqual0, nameof(options.QueueLimit)), nameof(options)); } if (options.Window <= TimeSpan.Zero) { - throw new ArgumentException($"{nameof(options.Window)} must be set to a value greater than TimeSpan.Zero.", nameof(options)); + throw new ArgumentException(SR.Format(SR.ShouldBeGreaterThanTimeSpan0, nameof(options.Window)), nameof(options)); } _options = new FixedWindowRateLimiterOptions diff --git a/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/SlidingWindowRateLimiter.cs b/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/SlidingWindowRateLimiter.cs index 5dfc36914487e..205b2d5b5bc39 100644 --- a/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/SlidingWindowRateLimiter.cs +++ b/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/SlidingWindowRateLimiter.cs @@ -55,17 +55,21 @@ public SlidingWindowRateLimiter(SlidingWindowRateLimiterOptions options) { throw new ArgumentNullException(nameof(options)); } - if (options.PermitLimit <= 0 || options.SegmentsPerWindow <= 0) + if (options.PermitLimit <= 0) { - throw new ArgumentException($"Both {nameof(options.PermitLimit)} and {nameof(options.SegmentsPerWindow)} must be set to values greater than 0.", nameof(options)); + throw new ArgumentException(SR.Format(SR.ShouldBeGreaterThan0, nameof(options.PermitLimit)), nameof(options)); + } + if (options.SegmentsPerWindow <= 0) + { + throw new ArgumentException(SR.Format(SR.ShouldBeGreaterThan0, nameof(options.SegmentsPerWindow)), nameof(options)); } if (options.QueueLimit < 0) { - throw new ArgumentException($"{nameof(options.QueueLimit)} must be set to a value greater than or equal to 0.", nameof(options)); + throw new ArgumentException(SR.Format(SR.ShouldBeGreaterThanOrEqual0, nameof(options.QueueLimit)), nameof(options)); } if (options.Window <= TimeSpan.Zero) { - throw new ArgumentException($"{nameof(options.Window)} must be set to a value greater than TimeSpan.Zero.", nameof(options)); + throw new ArgumentException(SR.Format(SR.ShouldBeGreaterThanTimeSpan0, nameof(options.Window)), nameof(options)); } _options = new SlidingWindowRateLimiterOptions diff --git a/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/TokenBucketRateLimiter.cs b/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/TokenBucketRateLimiter.cs index f1fbcb4433c4d..8423b13a60351 100644 --- a/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/TokenBucketRateLimiter.cs +++ b/src/libraries/System.Threading.RateLimiting/src/System/Threading/RateLimiting/TokenBucketRateLimiter.cs @@ -53,17 +53,21 @@ public TokenBucketRateLimiter(TokenBucketRateLimiterOptions options) { throw new ArgumentNullException(nameof(options)); } - if (options.TokenLimit <= 0 || options.TokensPerPeriod <= 0) + if (options.TokenLimit <= 0) { - throw new ArgumentException($"Both {nameof(options.TokenLimit)} and {nameof(options.TokensPerPeriod)} must be set to values greater than 0.", nameof(options)); + throw new ArgumentException(SR.Format(SR.ShouldBeGreaterThan0, nameof(options.TokenLimit)), nameof(options)); + } + if (options.TokensPerPeriod <= 0) + { + throw new ArgumentException(SR.Format(SR.ShouldBeGreaterThan0, nameof(options.TokensPerPeriod)), nameof(options)); } if (options.QueueLimit < 0) { - throw new ArgumentException($"{nameof(options.QueueLimit)} must be set to a value greater than or equal to 0.", nameof(options)); + throw new ArgumentException(SR.Format(SR.ShouldBeGreaterThanOrEqual0, nameof(options.QueueLimit)), nameof(options)); } if (options.ReplenishmentPeriod <= TimeSpan.Zero) { - throw new ArgumentException($"{nameof(options.ReplenishmentPeriod)} must be set to a value greater than TimeSpan.Zero.", nameof(options)); + throw new ArgumentException(SR.Format(SR.ShouldBeGreaterThanTimeSpan0, nameof(options.ReplenishmentPeriod)), nameof(options)); } _options = new TokenBucketRateLimiterOptions diff --git a/src/libraries/System.Threading.RateLimiting/tests/ConcurrencyLimiterTests.cs b/src/libraries/System.Threading.RateLimiting/tests/ConcurrencyLimiterTests.cs index 54e2bbecc1975..0669a4bd6bc94 100644 --- a/src/libraries/System.Threading.RateLimiting/tests/ConcurrencyLimiterTests.cs +++ b/src/libraries/System.Threading.RateLimiting/tests/ConcurrencyLimiterTests.cs @@ -11,13 +11,13 @@ public class ConcurrencyLimiterTests : BaseRateLimiterTests [Fact] public override void InvalidOptionsThrows() { - Assert.Throws(() => new ConcurrencyLimiter(new ConcurrencyLimiterOptions + AssertExtensions.Throws("options", () => new ConcurrencyLimiter(new ConcurrencyLimiterOptions { PermitLimit = -1, QueueProcessingOrder = QueueProcessingOrder.NewestFirst, QueueLimit = 1 })); - Assert.Throws(() => new ConcurrencyLimiter(new ConcurrencyLimiterOptions + AssertExtensions.Throws("options", () => new ConcurrencyLimiter(new ConcurrencyLimiterOptions { PermitLimit = 1, QueueProcessingOrder = QueueProcessingOrder.NewestFirst, diff --git a/src/libraries/System.Threading.RateLimiting/tests/FixedWindowRateLimiterTests.cs b/src/libraries/System.Threading.RateLimiting/tests/FixedWindowRateLimiterTests.cs index 1f597748d67f3..3e67bd130d705 100644 --- a/src/libraries/System.Threading.RateLimiting/tests/FixedWindowRateLimiterTests.cs +++ b/src/libraries/System.Threading.RateLimiting/tests/FixedWindowRateLimiterTests.cs @@ -35,7 +35,7 @@ public override void CanAcquireResource() [Fact] public override void InvalidOptionsThrows() { - Assert.Throws( + AssertExtensions.Throws("options", () => new FixedWindowRateLimiter(new FixedWindowRateLimiterOptions { PermitLimit = -1, @@ -44,7 +44,7 @@ public override void InvalidOptionsThrows() Window = TimeSpan.FromMinutes(2), AutoReplenishment = false })); - Assert.Throws( + AssertExtensions.Throws("options", () => new FixedWindowRateLimiter(new FixedWindowRateLimiterOptions { PermitLimit = 1, @@ -53,7 +53,7 @@ public override void InvalidOptionsThrows() Window = TimeSpan.FromMinutes(2), AutoReplenishment = false })); - Assert.Throws( + AssertExtensions.Throws("options", () => new FixedWindowRateLimiter(new FixedWindowRateLimiterOptions { PermitLimit = 1, @@ -62,7 +62,7 @@ public override void InvalidOptionsThrows() Window = TimeSpan.MinValue, AutoReplenishment = false })); - Assert.Throws( + AssertExtensions.Throws("options", () => new FixedWindowRateLimiter(new FixedWindowRateLimiterOptions { PermitLimit = 1, @@ -71,7 +71,7 @@ public override void InvalidOptionsThrows() Window = TimeSpan.FromMinutes(-2), AutoReplenishment = false, })); - Assert.Throws( + AssertExtensions.Throws("options", () => new FixedWindowRateLimiter(new FixedWindowRateLimiterOptions { PermitLimit = 1, diff --git a/src/libraries/System.Threading.RateLimiting/tests/SlidingWindowRateLimiterTests.cs b/src/libraries/System.Threading.RateLimiting/tests/SlidingWindowRateLimiterTests.cs index 66e6cb2d5f228..c45b9d75140ec 100644 --- a/src/libraries/System.Threading.RateLimiting/tests/SlidingWindowRateLimiterTests.cs +++ b/src/libraries/System.Threading.RateLimiting/tests/SlidingWindowRateLimiterTests.cs @@ -37,7 +37,7 @@ public override void CanAcquireResource() [Fact] public override void InvalidOptionsThrows() { - Assert.Throws( + AssertExtensions.Throws("options", () => new SlidingWindowRateLimiter(new SlidingWindowRateLimiterOptions { PermitLimit = -1, @@ -47,7 +47,7 @@ public override void InvalidOptionsThrows() SegmentsPerWindow = 1, AutoReplenishment = false })); - Assert.Throws( + AssertExtensions.Throws("options", () => new SlidingWindowRateLimiter(new SlidingWindowRateLimiterOptions { PermitLimit = 1, @@ -57,7 +57,7 @@ public override void InvalidOptionsThrows() SegmentsPerWindow = 1, AutoReplenishment = false })); - Assert.Throws( + AssertExtensions.Throws("options", () => new SlidingWindowRateLimiter(new SlidingWindowRateLimiterOptions { PermitLimit = 1, @@ -67,7 +67,7 @@ public override void InvalidOptionsThrows() SegmentsPerWindow = -1, AutoReplenishment = false })); - Assert.Throws( + AssertExtensions.Throws("options", () => new SlidingWindowRateLimiter(new SlidingWindowRateLimiterOptions { PermitLimit = 1, @@ -77,7 +77,7 @@ public override void InvalidOptionsThrows() SegmentsPerWindow = 1, AutoReplenishment = false })); - Assert.Throws( + AssertExtensions.Throws("options", () => new SlidingWindowRateLimiter(new SlidingWindowRateLimiterOptions { PermitLimit = 1, @@ -87,7 +87,7 @@ public override void InvalidOptionsThrows() SegmentsPerWindow = 1, AutoReplenishment = false })); - Assert.Throws( + AssertExtensions.Throws("options", () => new SlidingWindowRateLimiter(new SlidingWindowRateLimiterOptions { PermitLimit = 1, diff --git a/src/libraries/System.Threading.RateLimiting/tests/TokenBucketRateLimiterTests.cs b/src/libraries/System.Threading.RateLimiting/tests/TokenBucketRateLimiterTests.cs index 79c368e2b6d34..e7fefcbf7a025 100644 --- a/src/libraries/System.Threading.RateLimiting/tests/TokenBucketRateLimiterTests.cs +++ b/src/libraries/System.Threading.RateLimiting/tests/TokenBucketRateLimiterTests.cs @@ -37,7 +37,7 @@ public override void CanAcquireResource() [Fact] public override void InvalidOptionsThrows() { - Assert.Throws( + AssertExtensions.Throws("options", () => new TokenBucketRateLimiter(new TokenBucketRateLimiterOptions { TokenLimit = -1, @@ -47,7 +47,7 @@ public override void InvalidOptionsThrows() TokensPerPeriod = 1, AutoReplenishment = false })); - Assert.Throws( + AssertExtensions.Throws("options", () => new TokenBucketRateLimiter(new TokenBucketRateLimiterOptions { TokenLimit = 1, @@ -57,7 +57,7 @@ public override void InvalidOptionsThrows() TokensPerPeriod = 1, AutoReplenishment = false })); - Assert.Throws( + AssertExtensions.Throws("options", () => new TokenBucketRateLimiter(new TokenBucketRateLimiterOptions { TokenLimit = 1, @@ -67,7 +67,7 @@ public override void InvalidOptionsThrows() TokensPerPeriod = -1, AutoReplenishment = false })); - Assert.Throws( + AssertExtensions.Throws("options", () => new TokenBucketRateLimiter(new TokenBucketRateLimiterOptions { TokenLimit = 1, @@ -77,7 +77,7 @@ public override void InvalidOptionsThrows() TokensPerPeriod = 1, AutoReplenishment = false })); - Assert.Throws( + AssertExtensions.Throws("options", () => new TokenBucketRateLimiter(new TokenBucketRateLimiterOptions { TokenLimit = 1, @@ -87,7 +87,7 @@ public override void InvalidOptionsThrows() TokensPerPeriod = 1, AutoReplenishment = false })); - Assert.Throws( + AssertExtensions.Throws("options", () => new TokenBucketRateLimiter(new TokenBucketRateLimiterOptions { TokenLimit = 1,