52 lines
1.9 KiB
C#
52 lines
1.9 KiB
C#
using System;
|
|
using Paca.Mobile.Core;
|
|
using Xunit;
|
|
|
|
namespace Paca.Tests.Core;
|
|
|
|
public class BandwidthRateLimiterGateTests
|
|
{
|
|
[Fact]
|
|
public void Gate277_BandwidthRateLimiter_UnlimitedPreset_AllowsFullSpeed()
|
|
{
|
|
var limiter = new BandwidthRateLimiter(BandwidthLimitPreset.Unlimited);
|
|
|
|
var delay = limiter.ComputeThrottleDelayMs(chunkBytes: 10_000_000, elapsedMs: 10);
|
|
Assert.Equal(0, delay);
|
|
}
|
|
|
|
[Fact]
|
|
public void Gate278_BandwidthRateLimiter_TokenBucket_EnforcesByteCap()
|
|
{
|
|
// 1 MB/s = 1,000,000 bytes/sec
|
|
var limiter = new BandwidthRateLimiter(bytesPerSecond: 1_000_000);
|
|
|
|
// Downloaded 1MB in 200ms -> should throttle ~800ms
|
|
var delay = limiter.ComputeThrottleDelayMs(chunkBytes: 1_000_000, elapsedMs: 200);
|
|
Assert.InRange(delay, 750, 850);
|
|
}
|
|
|
|
[Fact]
|
|
public void Gate279_BandwidthRateLimiter_Presets_FormatLabelsCleanly()
|
|
{
|
|
Assert.Equal("무제한", BandwidthRateLimiter.GetPresetLabel(BandwidthLimitPreset.Unlimited));
|
|
Assert.Equal("10 MB/s (고속)", BandwidthRateLimiter.GetPresetLabel(BandwidthLimitPreset.Fast10MB));
|
|
Assert.Equal("5 MB/s (일반)", BandwidthRateLimiter.GetPresetLabel(BandwidthLimitPreset.Medium5MB));
|
|
Assert.Equal("1 MB/s (절약)", BandwidthRateLimiter.GetPresetLabel(BandwidthLimitPreset.Low1MB));
|
|
}
|
|
|
|
[Fact]
|
|
public void Gate280_BandwidthRateLimiter_DynamicRateChange_TakesEffectImmediately()
|
|
{
|
|
var limiter = new BandwidthRateLimiter(bytesPerSecond: 1_000_000);
|
|
Assert.Equal(1_000_000, limiter.BytesPerSecond);
|
|
|
|
// Update mid-stream
|
|
limiter.SetRate(5_000_000);
|
|
Assert.Equal(5_000_000, limiter.BytesPerSecond);
|
|
|
|
// Now 1MB at 5MB/s expects 200ms total time, elapsed 100ms -> delay ~100ms
|
|
var delay = limiter.ComputeThrottleDelayMs(chunkBytes: 1_000_000, elapsedMs: 100);
|
|
Assert.InRange(delay, 80, 120);
|
|
}
|
|
}
|