| package sql_test |
|
|
| import ( |
| "context" |
| "testing" |
| "time" |
|
|
| "ccLoad/internal/model" |
| ) |
|
|
| func TestAuthTokenStatsInRange_AndRPM(t *testing.T) { |
| store := newTestStore(t, "auth_token_stats.db") |
| ctx := context.Background() |
|
|
| now := time.Now() |
| start := now.Add(-2 * time.Minute) |
| end := now.Add(2 * time.Minute) |
|
|
| |
| |
| logs := []*model.LogEntry{ |
| { |
| Time: model.JSONTime{Time: now}, |
| ChannelID: 1, |
| Model: "m1", |
| StatusCode: 200, |
| IsStreaming: true, |
| FirstByteTime: 0.1, |
| Duration: 0.2, |
| AuthTokenID: 1, |
| InputTokens: 10, |
| OutputTokens: 20, |
| Cost: 0.01, |
| }, |
| { |
| Time: model.JSONTime{Time: now}, |
| ChannelID: 1, |
| Model: "m1", |
| StatusCode: 500, |
| IsStreaming: false, |
| Duration: 1.2, |
| AuthTokenID: 1, |
| InputTokens: 1, |
| OutputTokens: 2, |
| Cost: 0.02, |
| }, |
| { |
| Time: model.JSONTime{Time: now}, |
| ChannelID: 1, |
| Model: "m1", |
| StatusCode: 499, |
| IsStreaming: true, |
| FirstByteTime: 0.1, |
| Duration: 0.3, |
| AuthTokenID: 1, |
| InputTokens: 0, |
| OutputTokens: 0, |
| Cost: 0, |
| }, |
| { |
| Time: model.JSONTime{Time: now}, |
| ChannelID: 1, |
| Model: "m1", |
| StatusCode: 200, |
| IsStreaming: false, |
| Duration: 0.4, |
| AuthTokenID: 2, |
| InputTokens: 3, |
| OutputTokens: 4, |
| Cost: 0.03, |
| }, |
| } |
| if err := store.BatchAddLogs(ctx, logs); err != nil { |
| t.Fatalf("BatchAddLogs failed: %v", err) |
| } |
|
|
| stats, err := store.GetAuthTokenStatsInRange(ctx, start, end) |
| if err != nil { |
| t.Fatalf("GetAuthTokenStatsInRange failed: %v", err) |
| } |
| if len(stats) != 2 { |
| t.Fatalf("stats len=%d, want 2", len(stats)) |
| } |
|
|
| s1 := stats[1] |
| if s1 == nil { |
| t.Fatalf("missing token 1 stats") |
| } |
| if s1.SuccessCount != 1 || s1.FailureCount != 1 { |
| t.Fatalf("token1 counts=(%d,%d), want (1,1)", s1.SuccessCount, s1.FailureCount) |
| } |
| if s1.StreamCount != 1 || s1.NonStreamCount != 1 { |
| t.Fatalf("token1 stream/nonstream=(%d,%d), want (1,1)", s1.StreamCount, s1.NonStreamCount) |
| } |
| if s1.PromptTokens != 11 || s1.CompletionTokens != 22 { |
| t.Fatalf("token1 tokens=(%d,%d), want (11,22)", s1.PromptTokens, s1.CompletionTokens) |
| } |
|
|
| |
| if err := store.FillAuthTokenRPMStats(ctx, stats, start, end, true); err != nil { |
| t.Fatalf("FillAuthTokenRPMStats failed: %v", err) |
| } |
| if stats[1].AvgRPM <= 0 || stats[1].PeakRPM <= 0 { |
| t.Fatalf("token1 rpm invalid: %+v", stats[1]) |
| } |
| |
| if stats[1].RecentRPM <= 0 { |
| t.Fatalf("token1 recent rpm=%v, want >0", stats[1].RecentRPM) |
| } |
| } |
|
|