grok2api / backend /internal /infra /runtime /memory /quota_queue_test.go
fromozuzhouzzz
Deploy grok2api v3.0.11 to HF Spaces
f1dd159
Raw
History Blame Contribute Delete
2.12 kB
package memory
import (
"context"
"testing"
"time"
"github.com/chenyme/grok2api/backend/internal/domain/account"
)
func TestQuotaRecoveryQueueClaimsInDueOrderAndReschedules(t *testing.T) {
ctx := context.Background()
queue := NewQuotaRecoveryQueue()
now := time.Now().UTC()
late := account.QuotaRecoveryEvent{AccountID: 2, Mode: "auto", DueAt: now.Add(time.Minute)}
due := account.QuotaRecoveryEvent{AccountID: 1, Mode: "fast", DueAt: now.Add(-time.Second)}
if err := queue.ScheduleQuotaRecovery(ctx, late); err != nil {
t.Fatal(err)
}
if err := queue.ScheduleQuotaRecovery(ctx, due); err != nil {
t.Fatal(err)
}
values, err := queue.ClaimDueQuotaRecoveries(ctx, now, 10, time.Minute)
if err != nil || len(values) != 1 || values[0].AccountID != due.AccountID {
t.Fatalf("values = %#v, err = %v", values, err)
}
claimedDue := values[0]
claimedDue.DueAt = now.Add(2 * time.Minute)
if err := queue.RescheduleQuotaRecovery(ctx, claimedDue); err != nil {
t.Fatal(err)
}
values, err = queue.ClaimDueQuotaRecoveries(ctx, now.Add(90*time.Second), 10, time.Minute)
if err != nil || len(values) != 1 || values[0].AccountID != late.AccountID {
t.Fatalf("values = %#v, err = %v", values, err)
}
}
func TestEnsureQuotaRecoveryPreservesExistingBackoffAndClaim(t *testing.T) {
ctx := context.Background()
queue := NewQuotaRecoveryQueue()
now := time.Now().UTC()
event := account.QuotaRecoveryEvent{AccountID: 1, Mode: "fast", DueAt: now.Add(-time.Second), Attempts: 3}
if err := queue.ScheduleQuotaRecovery(ctx, event); err != nil {
t.Fatal(err)
}
claimed, err := queue.ClaimDueQuotaRecoveries(ctx, now, 1, time.Minute)
if err != nil || len(claimed) != 1 || claimed[0].ClaimToken == "" {
t.Fatalf("claimed = %#v, err = %v", claimed, err)
}
if err := queue.EnsureQuotaRecovery(ctx, account.QuotaRecoveryEvent{AccountID: 1, Mode: "fast", DueAt: now}); err != nil {
t.Fatal(err)
}
claimed[0].DueAt = now.Add(2 * time.Minute)
claimed[0].Attempts++
if err := queue.RescheduleQuotaRecovery(ctx, claimed[0]); err != nil {
t.Fatalf("ensure overwrote active claim: %v", err)
}
}