Files
easyai-ai-gateway/apps/api/internal/executionpool/preference_test.go
T
wangbo 7786692d32 feat(routing): 引入多执行池智能调度
将 Worker 发现、路由画像、容量与执行传输抽象为平台无关接口,新增 Kubernetes 和静态容量适配器,并以 shadow 模式接入生产配置。

实现网络与容量评分、路由防抖、池队列、同步 Worker 租约、一次性执行令牌,以及提交状态不明时禁止重复分配的安全语义。

新增 0105 兼容迁移、管理接口、指标、OpenAPI 和回归测试。已执行全量 Go 测试、go vet、OpenAPI、迁移安全、Compose 与 Kustomize 验证。
2026-08-05 22:25:37 +08:00

33 lines
1.1 KiB
Go

package executionpool
import (
"testing"
"time"
)
func TestAdvanceRoutePreferenceRequiresThreeWinsAndMinimumDwell(t *testing.T) {
now := time.Date(2026, 8, 5, 12, 0, 0, 0, time.UTC)
state := RoutePreference{CurrentPoolID: "slow", CurrentSince: now}
scores := map[string]float64{"slow": 0.5, "fast": 0.7}
for window := 1; window <= 3; window++ {
state = AdvanceRoutePreference(state, "fast", scores, now.Add(time.Duration(window)*10*time.Second))
if state.CurrentPoolID != "slow" {
t.Fatalf("switched before minimum dwell in window %d", window)
}
}
state = AdvanceRoutePreference(state, "fast", scores, now.Add(2*time.Minute))
if state.CurrentPoolID != "fast" {
t.Fatalf("current pool=%q, want fast", state.CurrentPoolID)
}
}
func TestAdvanceRoutePreferenceImmediatelyLeavesIneligibleCurrentPool(t *testing.T) {
now := time.Now()
state := AdvanceRoutePreference(RoutePreference{
CurrentPoolID: "offline", CurrentSince: now.Add(-time.Minute),
}, "healthy", map[string]float64{"healthy": 0.6}, now)
if state.CurrentPoolID != "healthy" || state.ChallengerWins != 0 {
t.Fatalf("unexpected preference: %#v", state)
}
}