90 lines
2.4 KiB
Go
90 lines
2.4 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestGatewayServiceIsAccountSchedulableForSelectionSoraIgnoresGenericWindows(t *testing.T) {
|
|
svc := &GatewayService{}
|
|
now := time.Now()
|
|
past := now.Add(-1 * time.Minute)
|
|
future := now.Add(5 * time.Minute)
|
|
|
|
acc := &Account{
|
|
Platform: PlatformSora,
|
|
Status: StatusActive,
|
|
Schedulable: true,
|
|
AutoPauseOnExpired: true,
|
|
ExpiresAt: &past,
|
|
OverloadUntil: &future,
|
|
RateLimitResetAt: &future,
|
|
}
|
|
|
|
if !svc.isAccountSchedulableForSelection(acc) {
|
|
t.Fatalf("expected sora account to ignore generic expiry/overload/rate-limit windows")
|
|
}
|
|
}
|
|
|
|
func TestGatewayServiceIsAccountSchedulableForSelectionNonSoraKeepsGenericLogic(t *testing.T) {
|
|
svc := &GatewayService{}
|
|
future := time.Now().Add(5 * time.Minute)
|
|
|
|
acc := &Account{
|
|
Platform: PlatformAnthropic,
|
|
Status: StatusActive,
|
|
Schedulable: true,
|
|
RateLimitResetAt: &future,
|
|
}
|
|
|
|
if svc.isAccountSchedulableForSelection(acc) {
|
|
t.Fatalf("expected non-sora account to keep generic schedulable checks")
|
|
}
|
|
}
|
|
|
|
func TestGatewayServiceIsAccountSchedulableForModelSelectionSoraChecksModelScopeOnly(t *testing.T) {
|
|
svc := &GatewayService{}
|
|
model := "sora2-landscape-10s"
|
|
resetAt := time.Now().Add(2 * time.Minute).UTC().Format(time.RFC3339)
|
|
globalResetAt := time.Now().Add(2 * time.Minute)
|
|
|
|
acc := &Account{
|
|
Platform: PlatformSora,
|
|
Status: StatusActive,
|
|
Schedulable: true,
|
|
RateLimitResetAt: &globalResetAt,
|
|
Extra: map[string]any{
|
|
"model_rate_limits": map[string]any{
|
|
model: map[string]any{
|
|
"rate_limit_reset_at": resetAt,
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
if svc.isAccountSchedulableForModelSelection(context.Background(), acc, model) {
|
|
t.Fatalf("expected sora account to be blocked by model scope rate limit")
|
|
}
|
|
}
|
|
|
|
func TestCollectSelectionFailureStatsSoraIgnoresGenericUnschedulableWindows(t *testing.T) {
|
|
svc := &GatewayService{}
|
|
future := time.Now().Add(3 * time.Minute)
|
|
|
|
accounts := []Account{
|
|
{
|
|
ID: 1,
|
|
Platform: PlatformSora,
|
|
Status: StatusActive,
|
|
Schedulable: true,
|
|
RateLimitResetAt: &future,
|
|
},
|
|
}
|
|
|
|
stats := svc.collectSelectionFailureStats(context.Background(), accounts, "sora2-landscape-10s", PlatformSora, map[int64]struct{}{}, false)
|
|
if stats.Unschedulable != 0 || stats.Eligible != 1 {
|
|
t.Fatalf("unexpected stats: unschedulable=%d eligible=%d", stats.Unschedulable, stats.Eligible)
|
|
}
|
|
}
|