backend: leave the time before the first rate record unknown in the adaptive audit

This commit is contained in:
justme committed 2026-10-22 10:57:53 +08:00
1 parent 20b0f7fbd8
commit 93abf59afb
2 files changed
+13 -11

No files matched your search

@@ -28,9 +28,10 @@ public sealed class AdaptiveAuditTests : IClassFixture<BackendFixture>
{
RateChange[] changes =
[
Change(s_t0 + (30 * Minute), "quic_ping", "watch", "quiet", 2), // 10:00–10:30 watch(频率未知),之后 quiet 2 Hz
Change(s_t0, "quic_ping", "start", "watch", 10, "start"), // 10:00 起步:watch 10 Hz
Change(s_t0 + (30 * Minute), "quic_ping", "watch", "quiet", 2), // 10:30 起 quiet 2 Hz
Change(s_t0 + (90 * Minute), "quic_ping", "quiet", "active", 10, "sustained loss", 0.4), // 11:30 起 active 10 Hz
Change(s_t0 + (30 * Minute), "tcp_ping", "quiet", "watch", 20, "rtt above baseline"),
Change(s_t0 + (30 * Minute), "tcp_ping", "quiet", "watch", 20, "rtt above baseline"), // 这条方法 10:30 才有第一条记录
];
AdaptiveResult result = AdaptiveAudit.Summarize(changes, s_t0, s_t0 + (2 * Hour), Hour);
@@ -39,18 +40,18 @@ public sealed class AdaptiveAuditTests : IClassFixture<BackendFixture>
Assert.Equal(2, quic.Buckets.Count);
AdaptiveBucket first = quic.Buckets[0];
Assert.Equal((1800, 1800, 0), ((int)first.WatchSeconds, (int)first.QuietSeconds, (int)first.ActiveSeconds)); // 10:00–10:30 watch,10:30–11:00 quiet
Assert.Equal(2, first.AverageHz); // 只有 quiet 那半小时知道频率
Assert.Equal(1, first.Changes);
Assert.Equal(6, first.AverageHz); // (10 Hz × 30 min + 2 Hz × 30 min) / 60 min
Assert.Equal(2, first.Changes);
AdaptiveBucket second = quic.Buckets[1];
Assert.Equal((1800, 1800), ((int)second.QuietSeconds, (int)second.ActiveSeconds)); // 11:00–11:30 quiet,11:30–12:00 active
Assert.Equal(6, second.AverageHz); // (2 Hz × 30 min + 10 Hz × 30 min) / 60 min
Assert.Equal((1, 0.4), (second.Changes, second.MaxLossPct));
AdaptiveKind tcp = Assert.Single(result.Kinds, k => k.Kind == "tcp_ping");
Assert.Equal((1800, 1800), ((int)tcp.Buckets[0].QuietSeconds, (int)tcp.Buckets[0].WatchSeconds));
Assert.Equal((0, 1800), ((int)tcp.Buckets[0].QuietSeconds, (int)tcp.Buckets[0].WatchSeconds)); // 10:00–10:30 没有记录,不算任何状态
Assert.Equal(3600, (int)tcp.Buckets[1].WatchSeconds);
Assert.Equal(3, result.Changes.Count);
Assert.Equal(4, result.Changes.Count);
Assert.Equal("quic_ping", result.Changes[0].Kind); // 最新的在前
}