Files
huya-go/internal/gui/logfile_test.go
T

88 lines
2.5 KiB
Go

package gui
import (
"os"
"strings"
"testing"
"huya-go/internal/logger"
)
// TestAppLogsReachMemoryAndFile 验证 GUI 的日志入口同时进入内存缓冲与实例日志文件,
// 且账号维度日志带上账号标签。
func TestAppLogsReachMemoryAndFile(t *testing.T) {
dir := t.TempDir()
store := logger.NewStore(50)
closeLog, err := logger.Init(store, dir, "测试实例", "test", dir)
if err != nil {
t.Fatalf("logger.Init() error = %v", err)
}
path := logger.FilePath()
if path == "" {
t.Fatal("日志文件路径为空")
}
app := &App{logStore: store}
app.addLog("info", "日志文件已就绪")
app.logAccount("监控", "success", "12345", "兑换成功 pid=%d", 9)
// 关闭日志(同时把异步队列刷盘)后再读文件。
closeLog()
data, err := os.ReadFile(path)
if err != nil {
t.Fatalf("读取日志文件失败: %v", err)
}
text := string(data)
for _, want := range []string{"实例: 测试实例", "日志文件已就绪", "[账号:12345]", "兑换成功 pid=9"} {
if !strings.Contains(text, want) {
t.Fatalf("日志文件缺少 %q:\n%s", want, text)
}
}
if !strings.Contains(text, "[info]") || !strings.Contains(text, "[success]") {
t.Fatalf("日志级别未写入: %s", text)
}
entries := store.Since(0)
if len(entries) < 3 {
t.Fatalf("内存日志条数 = %d, want >= 3", len(entries))
}
if entries[len(entries)-1].Account != "12345" {
t.Fatalf("最后一条日志账号标签 = %q, want 12345", entries[len(entries)-1].Account)
}
}
// TestGetLogsReturnsIncrementally 验证界面按自增 ID 增量拉取日志。
func TestGetLogsReturnsIncrementally(t *testing.T) {
dir := t.TempDir()
store := logger.NewStore(50)
closeLog, err := logger.Init(store, dir, "测试实例", "test", dir)
if err != nil {
t.Fatalf("logger.Init() error = %v", err)
}
defer closeLog()
app := &App{logStore: store}
app.addLog("info", "第一条")
first := app.GetLogs(0)
if len(first) == 0 {
t.Fatal("首次拉取不应为空")
}
lastID := first[len(first)-1].ID
app.addLog("warn", "第二条")
// 只有写入后新增的日志应当返回,避免界面重复渲染历史日志。
incremental := app.GetLogs(lastID)
if len(incremental) != 1 {
t.Fatalf("增量拉取条数 = %d, want 1", len(incremental))
}
if incremental[0].Message != "第二条" || incremental[0].Level != "warn" {
t.Fatalf("增量日志 = %+v", incremental[0])
}
stats := app.GetLogStats()
if stats.Level == "" || stats.FilePath == "" || stats.Count < 2 {
t.Fatalf("日志统计异常: %+v", stats)
}
}