package archiver import ( "strings" "testing" "time" ) func TestKeyBuilder(t *testing.T) { kb, err := NewKeyBuilder("archive/{{.Subject}}/{{.Year}}/{{.Month}}/{{.Day}}/") if err != nil { t.Fatalf("NewKeyBuilder: %v", err) } ts := time.Date(2026, 7, 5, 10, 15, 0, 0, time.UTC) key, err := kb.Build("logs.k8s.vault.audit", ts) if err != nil { t.Fatalf("Build: %v", err) } if !strings.HasPrefix(key, "archive/logs.k8s.vault.audit/2026/07/05/") { t.Errorf("unexpected prefix: %s", key) } if !strings.HasSuffix(key, ObjectExt) { t.Errorf("missing container suffix: %s", key) } if !strings.Contains(key, "20260705T101500Z-") { t.Errorf("missing timestamp token: %s", key) } } func TestKeyBuilderUnique(t *testing.T) { kb, _ := NewKeyBuilder("p/{{.Subject}}/") ts := time.Date(2026, 7, 5, 10, 15, 0, 0, time.UTC) k1, _ := kb.Build("s", ts) k2, _ := kb.Build("s", ts) if k1 == k2 { t.Errorf("keys should be unique: %s", k1) } } func TestKeyBuilderSanitizesSubject(t *testing.T) { kb, _ := NewKeyBuilder("p/{{.Subject}}/") key, _ := kb.Build("logs.k8s.a/b", time.Now()) if strings.Contains(key, "a/b") { t.Errorf("subject slash not sanitized: %s", key) } if !strings.Contains(key, "a_b") { t.Errorf("expected sanitized a_b: %s", key) } } func TestKeyBuilderBadTemplate(t *testing.T) { if _, err := NewKeyBuilder("{{.Nope"); err == nil { t.Errorf("expected template parse error") } }