mirror of
https://github.com/Kareadita/Kavita.git
synced 2025-05-31 20:24:27 -04:00
80 lines
1.8 KiB
C#
80 lines
1.8 KiB
C#
using System;
|
|
using API.Helpers;
|
|
using Xunit;
|
|
|
|
namespace API.Tests.Helpers;
|
|
|
|
public class RateLimiterTests
|
|
{
|
|
[Fact]
|
|
public void AcquireTokens_Successful()
|
|
{
|
|
// Arrange
|
|
var limiter = new RateLimiter(3, TimeSpan.FromSeconds(1));
|
|
|
|
// Act & Assert
|
|
Assert.True(limiter.TryAcquire("test_key"));
|
|
Assert.True(limiter.TryAcquire("test_key"));
|
|
Assert.True(limiter.TryAcquire("test_key"));
|
|
}
|
|
|
|
[Fact]
|
|
public void AcquireTokens_ExceedLimit()
|
|
{
|
|
// Arrange
|
|
var limiter = new RateLimiter(2, TimeSpan.FromSeconds(10), false);
|
|
|
|
// Act
|
|
limiter.TryAcquire("test_key");
|
|
limiter.TryAcquire("test_key");
|
|
|
|
// Assert
|
|
Assert.False(limiter.TryAcquire("test_key"));
|
|
}
|
|
|
|
[Fact]
|
|
public void AcquireTokens_Refill()
|
|
{
|
|
// Arrange
|
|
var limiter = new RateLimiter(2, TimeSpan.FromSeconds(1));
|
|
|
|
// Act
|
|
limiter.TryAcquire("test_key");
|
|
limiter.TryAcquire("test_key");
|
|
|
|
// Wait for refill
|
|
System.Threading.Thread.Sleep(1100);
|
|
|
|
// Assert
|
|
Assert.True(limiter.TryAcquire("test_key"));
|
|
}
|
|
|
|
[Fact]
|
|
public void AcquireTokens_Refill_WithOff()
|
|
{
|
|
// Arrange
|
|
var limiter = new RateLimiter(2, TimeSpan.FromSeconds(10), false);
|
|
|
|
// Act
|
|
limiter.TryAcquire("test_key");
|
|
limiter.TryAcquire("test_key");
|
|
|
|
// Wait for refill
|
|
System.Threading.Thread.Sleep(2100);
|
|
|
|
// Assert
|
|
Assert.False(limiter.TryAcquire("test_key"));
|
|
}
|
|
|
|
[Fact]
|
|
public void AcquireTokens_MultipleKeys()
|
|
{
|
|
// Arrange
|
|
var limiter = new RateLimiter(2, TimeSpan.FromSeconds(1));
|
|
|
|
// Act & Assert
|
|
Assert.True(limiter.TryAcquire("key1"));
|
|
Assert.True(limiter.TryAcquire("key2"));
|
|
}
|
|
}
|