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
121 lines
3.2 KiB
Go
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)
|
|
}
|
|
}
|