88 lines
2.5 KiB
Go
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)
|
|
}
|
|
}
|