package services import ( "strings" "testing" "lokistack/models" ) // 预置 positions 的脚本必须:只补缺失路径、用文件大小做偏移、 // 已有记录不覆盖(重装不重复采集)。 func TestSeedPositionsCmd(t *testing.T) { cmd := seedPositionsCmd([]string{"/var/log/messages", "/var/log/*.log", "/var/log/messages"}) for _, want := range []string{ "positions:", "/var/lib/promtail/positions.yaml", "grep -qF", "stat -c %s", "/var/log/messages", "/var/log/*.log", } { if !strings.Contains(cmd, want) { t.Fatalf("脚本缺少 %q:\n%s", want, cmd) } } // 去重:同一路径只出现一次 if strings.Count(cmd, "'/var/log/messages'") != 1 { t.Fatalf("路径未去重:\n%s", cmd) } if seedPositionsCmd(nil) != "" { t.Fatal("无路径时应返回空串") } } // 采集器涉及的路径要覆盖:系统日志 + logPath + 每个 job 的路径 func TestCollectorPositionPatterns(t *testing.T) { c := &models.Collector{ LogPath: "/data/app/*.log", ScrapeJobs: []models.ScrapeJob{ {Name: "a", Paths: []string{"/data/a/*.log"}}, {Name: "system", System: true}, // 无显式路径 → 用探测结果 }, } got := strings.Join(collectorPositionPatterns(c, []string{"/var/log/messages"}), ",") for _, want := range []string{"/var/log/messages", "/data/app/*.log", "/data/a/*.log"} { if !strings.Contains(got, want) { t.Fatalf("缺少路径 %s,实际:%s", want, got) } } }