91 lines
3.3 KiB
C#
91 lines
3.3 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using Paca.Core;
|
|
using Xunit;
|
|
|
|
namespace Paca.Tests.Core;
|
|
|
|
public class BandwidthScheduleProfileGateTests
|
|
{
|
|
[Fact]
|
|
public void Gate313_BandwidthScheduleProfile_DefinesWorkAndNightProfiles()
|
|
{
|
|
var workProfile = new BandwidthProfile("WorkHours", MaxBytesPerSecond: 5 * 1024 * 1024, MaxConcurrentTasks: 2);
|
|
var nightProfile = new BandwidthProfile("NightUncapped", MaxBytesPerSecond: 0, MaxConcurrentTasks: 8);
|
|
|
|
Assert.Equal(5 * 1024 * 1024, workProfile.MaxBytesPerSecond);
|
|
Assert.Equal(2, workProfile.MaxConcurrentTasks);
|
|
Assert.True(nightProfile.IsUnlimited);
|
|
Assert.Equal(8, nightProfile.MaxConcurrentTasks);
|
|
}
|
|
|
|
[Fact]
|
|
public void Gate314_BandwidthScheduleProfile_SelectsWorkProfile_DuringDaytime()
|
|
{
|
|
var workProfile = new BandwidthProfile("WorkHours", 5 * 1024 * 1024, 2);
|
|
var defaultProfile = new BandwidthProfile("Default", 0, 4);
|
|
|
|
var config = new BandwidthScheduleConfig
|
|
{
|
|
IsEnabled = true,
|
|
DefaultProfile = defaultProfile,
|
|
Rules = new List<BandwidthTimeRule>
|
|
{
|
|
new(StartTime: TimeSpan.FromHours(9), EndTime: TimeSpan.FromHours(18), Profile: workProfile)
|
|
}
|
|
};
|
|
|
|
var dayTime = new DateTime(2026, 9, 4, 14, 30, 0); // 14:30
|
|
var active = BandwidthScheduleProfileEngine.GetActiveProfile(dayTime, config);
|
|
|
|
Assert.Equal("WorkHours", active.ProfileName);
|
|
Assert.Equal(5 * 1024 * 1024, active.MaxBytesPerSecond);
|
|
}
|
|
|
|
[Fact]
|
|
public void Gate315_BandwidthScheduleProfile_SelectsNightProfile_Overnight()
|
|
{
|
|
var nightProfile = new BandwidthProfile("NightUncapped", 0, 8);
|
|
var defaultProfile = new BandwidthProfile("Default", 10 * 1024 * 1024, 3);
|
|
|
|
var config = new BandwidthScheduleConfig
|
|
{
|
|
IsEnabled = true,
|
|
DefaultProfile = defaultProfile,
|
|
Rules = new List<BandwidthTimeRule>
|
|
{
|
|
new(StartTime: TimeSpan.FromHours(23), EndTime: TimeSpan.FromHours(7), Profile: nightProfile)
|
|
}
|
|
};
|
|
|
|
var overnight = new DateTime(2026, 9, 5, 3, 15, 0); // 03:15
|
|
var active = BandwidthScheduleProfileEngine.GetActiveProfile(overnight, config);
|
|
|
|
Assert.Equal("NightUncapped", active.ProfileName);
|
|
Assert.True(active.IsUnlimited);
|
|
Assert.Equal(8, active.MaxConcurrentTasks);
|
|
}
|
|
|
|
[Fact]
|
|
public void Gate316_BandwidthScheduleProfile_FallsBackToDefault_WhenDisabledOrOutOfRange()
|
|
{
|
|
var workProfile = new BandwidthProfile("WorkHours", 2 * 1024 * 1024, 1);
|
|
var defaultProfile = new BandwidthProfile("Default", 0, 4);
|
|
|
|
var config = new BandwidthScheduleConfig
|
|
{
|
|
IsEnabled = false, // Disabled
|
|
DefaultProfile = defaultProfile,
|
|
Rules = new List<BandwidthTimeRule>
|
|
{
|
|
new(StartTime: TimeSpan.FromHours(9), EndTime: TimeSpan.FromHours(18), Profile: workProfile)
|
|
}
|
|
};
|
|
|
|
var dayTime = new DateTime(2026, 9, 4, 14, 0, 0);
|
|
var active = BandwidthScheduleProfileEngine.GetActiveProfile(dayTime, config);
|
|
|
|
Assert.Equal("Default", active.ProfileName);
|
|
Assert.True(active.IsUnlimited);
|
|
}
|
|
}
|