Files
wehub-resource-sync a06f331eb8
CI / benchmark (push) Has been skipped
install-script / posix-syntax (push) Successful in 6m1s
CI / build-onnx (push) Failing after 6m43s
init-smoke / dry-run (push) Failing after 15m57s
security / govulncheck (push) Has been cancelled
security / trivy-fs (push) Has been cancelled
CI / test (1.26, ubuntu-latest) (push) Has been cancelled
Scorecard supply-chain security / Scorecard analysis (push) Has been cancelled
CI / test (1.26, macos-latest) (push) Has been cancelled
CI / build-windows (push) Has been cancelled
CI / lint (push) Has been cancelled
install-script / powershell-syntax (push) Has been cancelled
install-script / install (macos-14) (push) Has been cancelled
install-script / install (ubuntu-latest) (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:33:42 +08:00

121 lines
3.2 KiB
Go

package telemetry
import (
"testing"
"time"
)
func TestStoreRoundTrip(t *testing.T) {
s := NewStore(t.TempDir())
// Loading an absent day yields an empty rollup, not an error.
r, err := s.Load("2026-06-17")
if err != nil {
t.Fatalf("Load absent: %v", err)
}
if r.Total() != 0 {
t.Errorf("absent day Total = %d, want 0", r.Total())
}
r.Add("mcp_tool_call", "find_usages")
r.Add("mcp_tool_call", "find_usages")
r.Add("index", BucketFileCount(250))
if err := s.Save(r); err != nil {
t.Fatalf("Save: %v", err)
}
got, err := s.Load("2026-06-17")
if err != nil {
t.Fatalf("Load: %v", err)
}
if got.Counts["mcp_tool_call:find_usages"] != 2 || got.Counts["index:100-1k"] != 1 {
t.Errorf("round-trip mismatch: %v", got.Counts)
}
}
func TestStoreMergeAccumulates(t *testing.T) {
s := NewStore(t.TempDir())
day := "2026-06-17"
first := &Rollup{Day: day, Counts: map[string]int{}}
first.Add("cli_command", "review")
if err := s.Merge(first); err != nil {
t.Fatalf("Merge first: %v", err)
}
second := &Rollup{Day: day, Counts: map[string]int{}}
second.Add("cli_command", "review")
second.Add("daemon_session", "memory")
if err := s.Merge(second); err != nil {
t.Fatalf("Merge second: %v", err)
}
got, _ := s.Load(day)
if got.Counts["cli_command:review"] != 2 {
t.Errorf("merge did not accumulate: %v", got.Counts)
}
if got.Counts["daemon_session:memory"] != 1 {
t.Errorf("merge dropped a new counter: %v", got.Counts)
}
}
func TestStoreLoadCompleted(t *testing.T) {
s := NewStore(t.TempDir())
for _, day := range []string{"2026-06-15", "2026-06-16", "2026-06-17"} {
r := &Rollup{Day: day, Counts: map[string]int{}}
r.Add("cli_command", "x")
if err := s.Save(r); err != nil {
t.Fatalf("Save %s: %v", day, err)
}
}
// today = 2026-06-17 → only the two strictly-earlier days are completed.
completed, err := s.LoadCompleted("2026-06-17")
if err != nil {
t.Fatalf("LoadCompleted: %v", err)
}
if len(completed) != 2 {
t.Fatalf("completed days = %d, want 2", len(completed))
}
if completed[0].Day != "2026-06-15" || completed[1].Day != "2026-06-16" {
t.Errorf("completed days unsorted/wrong: %s, %s", completed[0].Day, completed[1].Day)
}
// Days() lists all three; Delete removes one idempotently.
days, _ := s.Days()
if len(days) != 3 {
t.Errorf("Days = %v, want 3", days)
}
if err := s.Delete("2026-06-15"); err != nil {
t.Fatalf("Delete: %v", err)
}
if err := s.Delete("2026-06-15"); err != nil {
t.Fatalf("Delete (missing, must be idempotent): %v", err)
}
days, _ = s.Days()
if len(days) != 2 {
t.Errorf("after delete Days = %v, want 2", days)
}
}
func TestStoreDaysEmptyDir(t *testing.T) {
// A store whose dir was never written must report no days, not error.
s := NewStore(t.TempDir() + "/never-created")
days, err := s.Days()
if err != nil {
t.Fatalf("Days on absent dir: %v", err)
}
if len(days) != 0 {
t.Errorf("Days = %v, want empty", days)
}
// Save then re-list to confirm creation-on-write.
r := NewRollup(time.Date(2026, 6, 18, 0, 0, 0, 0, time.UTC))
r.Add("index", "10k+")
if err := s.Save(r); err != nil {
t.Fatalf("Save creates dir: %v", err)
}
if days, _ := s.Days(); len(days) != 1 {
t.Errorf("after first Save Days = %v, want 1", days)
}
}