mirror of
https://github.com/EZ-Api/ez-api.git
synced 2026-01-13 17:47:51 +00:00
63 lines
1.6 KiB
Go
63 lines
1.6 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
"expvar"
|
|
"fmt"
|
|
"strconv"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/ez-api/ez-api/internal/model"
|
|
"gorm.io/driver/sqlite"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
func TestLogWriterMetrics(t *testing.T) {
|
|
dsn := fmt.Sprintf("file:%s?mode=memory&cache=shared", t.Name())
|
|
db, err := gorm.Open(sqlite.Open(dsn), &gorm.Config{})
|
|
if err != nil {
|
|
t.Fatalf("open sqlite: %v", err)
|
|
}
|
|
if err := db.AutoMigrate(&model.LogRecord{}); err != nil {
|
|
t.Fatalf("migrate: %v", err)
|
|
}
|
|
|
|
startBatch := getExpvarInt(t, "log_write_batch_total")
|
|
startDropped := getExpvarInt(t, "log_queue_dropped_total")
|
|
|
|
dropWriter := NewLogWriter(db, 1, 10, time.Second)
|
|
dropWriter.Write(model.LogRecord{ModelName: "m1", StatusCode: 200})
|
|
dropWriter.Write(model.LogRecord{ModelName: "m2", StatusCode: 200})
|
|
|
|
writer := NewLogWriter(db, 10, 1, 10*time.Millisecond)
|
|
ctx, cancel := context.WithCancel(context.Background())
|
|
t.Cleanup(cancel)
|
|
writer.Start(ctx)
|
|
writer.Write(model.LogRecord{ModelName: "m3", StatusCode: 200})
|
|
|
|
time.Sleep(50 * time.Millisecond)
|
|
cancel()
|
|
|
|
if got := getExpvarInt(t, "log_write_batch_total"); got <= startBatch {
|
|
t.Fatalf("expected batch counter to increase, start=%d got=%d", startBatch, got)
|
|
}
|
|
if got := getExpvarInt(t, "log_queue_dropped_total"); got <= startDropped {
|
|
t.Fatalf("expected dropped counter to be >= start, start=%d got=%d", startDropped, got)
|
|
}
|
|
}
|
|
|
|
func getExpvarInt(t *testing.T, name string) int64 {
|
|
t.Helper()
|
|
v := expvar.Get(name)
|
|
if v == nil {
|
|
t.Fatalf("expvar %s not found", name)
|
|
}
|
|
raw := v.String()
|
|
n, err := strconv.ParseInt(raw, 10, 64)
|
|
if err != nil {
|
|
t.Fatalf("parse expvar %s: %v", name, err)
|
|
}
|
|
return n
|
|
}
|