Implemented shared S3 audio caching for prepare and restore --include-audio
This commit is contained in:
@@ -114,3 +114,46 @@ func TestSessionSpoolAudioDir(t *testing.T) {
|
||||
t.Fatalf("SessionSpoolAudioDir() = %q, want %q", got, want)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSessionSpoolRestoreAudioDir(t *testing.T) {
|
||||
root := "/var/spool/narratio"
|
||||
got := SessionSpoolRestoreAudioDir(root, "forsaken", "2026-04-19")
|
||||
want := filepath.Join(root, "forsaken", "2026-04-19", "restore", "audio")
|
||||
if got != want {
|
||||
t.Fatalf("SessionSpoolRestoreAudioDir() = %q, want %q", got, want)
|
||||
}
|
||||
}
|
||||
|
||||
func TestS3AudioCachePath(t *testing.T) {
|
||||
got, err := S3AudioCachePath("/var/cache/narratio", "my-dnd-archive", "dnd/campaigns/forsaken/sessions/2026-04-19/audio/alice.flac")
|
||||
if err != nil {
|
||||
t.Fatalf("S3AudioCachePath() error = %v", err)
|
||||
}
|
||||
want := filepath.Join("/var/cache/narratio", "s3", "my-dnd-archive", "dnd", "campaigns", "forsaken", "sessions", "2026-04-19", "audio", "alice.flac")
|
||||
if got != want {
|
||||
t.Fatalf("S3AudioCachePath() = %q, want %q", got, want)
|
||||
}
|
||||
}
|
||||
|
||||
func TestS3AudioCachePathRejectsUnsafeInputs(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
root string
|
||||
bucket string
|
||||
key string
|
||||
}{
|
||||
{name: "empty root", root: "", bucket: "bucket", key: "audio/a.flac"},
|
||||
{name: "empty bucket", root: "/cache", bucket: "", key: "audio/a.flac"},
|
||||
{name: "bucket slash", root: "/cache", bucket: "bad/bucket", key: "audio/a.flac"},
|
||||
{name: "empty key", root: "/cache", bucket: "bucket", key: ""},
|
||||
{name: "escaping key", root: "/cache", bucket: "bucket", key: "../audio/a.flac"},
|
||||
{name: "absolute key", root: "/cache", bucket: "bucket", key: "/audio/a.flac"},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if got, err := S3AudioCachePath(tt.root, tt.bucket, tt.key); err == nil {
|
||||
t.Fatalf("S3AudioCachePath() = %q, want error", got)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user