mirror of
https://github.com/router-for-me/CLIProxyAPI.git
synced 2026-05-09 07:08:37 +08:00
- Introduced `Success` and `Failed` fields in auth records to track request outcomes. - Updated `/v0/management/auth-files` and `/v0/management/api-key-usage` responses to include success and failure counts. - Enhanced tests to validate tracking logic and API responses.
96 lines
2.7 KiB
Go
96 lines
2.7 KiB
Go
package auth
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestManagerMarkResultRecordsRecentRequests(t *testing.T) {
|
|
mgr := NewManager(nil, nil, nil)
|
|
auth := &Auth{
|
|
ID: "auth-1",
|
|
Provider: "antigravity",
|
|
Attributes: map[string]string{
|
|
"runtime_only": "true",
|
|
},
|
|
Metadata: map[string]any{
|
|
"type": "antigravity",
|
|
},
|
|
}
|
|
|
|
if _, err := mgr.Register(WithSkipPersist(context.Background()), auth); err != nil {
|
|
t.Fatalf("Register returned error: %v", err)
|
|
}
|
|
|
|
mgr.MarkResult(context.Background(), Result{AuthID: "auth-1", Provider: "antigravity", Model: "gpt-5", Success: true})
|
|
mgr.MarkResult(context.Background(), Result{AuthID: "auth-1", Provider: "antigravity", Model: "gpt-5", Success: false})
|
|
|
|
gotAuth, ok := mgr.GetByID("auth-1")
|
|
if !ok || gotAuth == nil {
|
|
t.Fatalf("GetByID returned ok=%v auth=%v", ok, gotAuth)
|
|
}
|
|
|
|
if gotAuth.Success != 1 || gotAuth.Failed != 1 {
|
|
t.Fatalf("auth totals = success=%d failed=%d, want 1/1", gotAuth.Success, gotAuth.Failed)
|
|
}
|
|
|
|
snapshot := gotAuth.RecentRequestsSnapshot(time.Now())
|
|
var successTotal int64
|
|
var failedTotal int64
|
|
for _, bucket := range snapshot {
|
|
successTotal += bucket.Success
|
|
failedTotal += bucket.Failed
|
|
}
|
|
if successTotal != 1 || failedTotal != 1 {
|
|
t.Fatalf("totals = success=%d failed=%d, want 1/1", successTotal, failedTotal)
|
|
}
|
|
}
|
|
|
|
func TestManagerUpdatePreservesRecentRequestsAndTotals(t *testing.T) {
|
|
mgr := NewManager(nil, nil, nil)
|
|
auth := &Auth{
|
|
ID: "auth-1",
|
|
Provider: "antigravity",
|
|
Metadata: map[string]any{
|
|
"type": "antigravity",
|
|
},
|
|
}
|
|
if _, err := mgr.Register(WithSkipPersist(context.Background()), auth); err != nil {
|
|
t.Fatalf("Register returned error: %v", err)
|
|
}
|
|
|
|
mgr.MarkResult(context.Background(), Result{AuthID: "auth-1", Provider: "antigravity", Model: "gpt-5", Success: true})
|
|
|
|
updated := &Auth{
|
|
ID: "auth-1",
|
|
Provider: "antigravity",
|
|
Metadata: map[string]any{
|
|
"type": "antigravity",
|
|
"note": "updated",
|
|
},
|
|
}
|
|
if _, err := mgr.Update(WithSkipPersist(context.Background()), updated); err != nil {
|
|
t.Fatalf("Update returned error: %v", err)
|
|
}
|
|
|
|
gotAuth, ok := mgr.GetByID("auth-1")
|
|
if !ok || gotAuth == nil {
|
|
t.Fatalf("GetByID returned ok=%v auth=%v", ok, gotAuth)
|
|
}
|
|
if gotAuth.Success != 1 || gotAuth.Failed != 0 {
|
|
t.Fatalf("auth totals = success=%d failed=%d, want 1/0", gotAuth.Success, gotAuth.Failed)
|
|
}
|
|
|
|
snapshot := gotAuth.RecentRequestsSnapshot(time.Now())
|
|
var successTotal int64
|
|
var failedTotal int64
|
|
for _, bucket := range snapshot {
|
|
successTotal += bucket.Success
|
|
failedTotal += bucket.Failed
|
|
}
|
|
if successTotal != 1 || failedTotal != 0 {
|
|
t.Fatalf("bucket totals = success=%d failed=%d, want 1/0", successTotal, failedTotal)
|
|
}
|
|
}
|