131 lines
3.9 KiB
Go
131 lines
3.9 KiB
Go
package artifacts
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"gitea.maximumdirect.net/eric/narratio/internal/config"
|
|
"gitea.maximumdirect.net/eric/narratio/internal/manifest"
|
|
)
|
|
|
|
func TestResolveArchiveBucketPrefersManifestThenConfig(t *testing.T) {
|
|
cfg := &config.Config{
|
|
Pipeline: &config.PipelineConfig{
|
|
Storage: config.StorageConfig{
|
|
S3: &config.StorageS3Config{Bucket: "cfg-bucket"},
|
|
},
|
|
},
|
|
}
|
|
|
|
if got := ResolveArchiveBucket(cfg, &manifest.Manifest{S3Bucket: "manifest-bucket"}); got != "manifest-bucket" {
|
|
t.Fatalf("bucket = %q, want manifest-bucket", got)
|
|
}
|
|
if got := ResolveArchiveBucket(cfg, &manifest.Manifest{}); got != "cfg-bucket" {
|
|
t.Fatalf("bucket = %q, want cfg-bucket", got)
|
|
}
|
|
}
|
|
|
|
func TestResolveArchiveSessionPrefixPrefersManifestThenConfig(t *testing.T) {
|
|
cfg := &config.Config{
|
|
Pipeline: &config.PipelineConfig{
|
|
Storage: config.StorageConfig{
|
|
S3: &config.StorageS3Config{RootPrefix: "dnd"},
|
|
},
|
|
},
|
|
Session: &config.SessionConfig{
|
|
SessionID: "2026-04-19",
|
|
Campaign: "forsaken",
|
|
},
|
|
}
|
|
m := &manifest.Manifest{S3SessionPrefix: "manifest/session/prefix/"}
|
|
|
|
got, err := ResolveArchiveSessionPrefix(cfg, m)
|
|
if err != nil {
|
|
t.Fatalf("ResolveArchiveSessionPrefix() error = %v", err)
|
|
}
|
|
if got != "manifest/session/prefix/" {
|
|
t.Fatalf("session prefix = %q, want manifest/session/prefix/", got)
|
|
}
|
|
|
|
got, err = ResolveArchiveSessionPrefix(cfg, &manifest.Manifest{})
|
|
if err != nil {
|
|
t.Fatalf("ResolveArchiveSessionPrefix() error = %v", err)
|
|
}
|
|
want := "dnd/campaigns/forsaken/sessions/2026-04-19/"
|
|
if got != want {
|
|
t.Fatalf("session prefix = %q, want %q", got, want)
|
|
}
|
|
}
|
|
|
|
func TestResolveArchiveRunPrefixPrefersManifestThenDerived(t *testing.T) {
|
|
cfg := &config.Config{
|
|
Pipeline: &config.PipelineConfig{
|
|
Storage: config.StorageConfig{
|
|
S3: &config.StorageS3Config{RootPrefix: "dnd"},
|
|
},
|
|
},
|
|
Session: &config.SessionConfig{
|
|
SessionID: "2026-04-19",
|
|
Campaign: "forsaken",
|
|
},
|
|
}
|
|
|
|
m := &manifest.Manifest{
|
|
RunID: "20260516T010203Z-1a2b3c4d",
|
|
S3RunPrefix: "manifest/run/prefix/",
|
|
}
|
|
got, err := ResolveArchiveRunPrefix(cfg, m)
|
|
if err != nil {
|
|
t.Fatalf("ResolveArchiveRunPrefix() error = %v", err)
|
|
}
|
|
if got != "manifest/run/prefix/" {
|
|
t.Fatalf("run prefix = %q, want manifest/run/prefix/", got)
|
|
}
|
|
|
|
m = &manifest.Manifest{
|
|
RunID: "20260516T010203Z-1a2b3c4d",
|
|
}
|
|
got, err = ResolveArchiveRunPrefix(cfg, m)
|
|
if err != nil {
|
|
t.Fatalf("ResolveArchiveRunPrefix() error = %v", err)
|
|
}
|
|
want := "dnd/campaigns/forsaken/sessions/2026-04-19/runs/20260516T010203Z-1a2b3c4d/"
|
|
if got != want {
|
|
t.Fatalf("run prefix = %q, want %q", got, want)
|
|
}
|
|
}
|
|
|
|
func TestResolveArchiveIdentityErrorsAreDeterministic(t *testing.T) {
|
|
cfgNoS3 := &config.Config{
|
|
Pipeline: &config.PipelineConfig{},
|
|
Session: &config.SessionConfig{SessionID: "2026-04-19", Campaign: "forsaken"},
|
|
}
|
|
_, err := ResolveArchiveSessionPrefix(cfgNoS3, &manifest.Manifest{})
|
|
if err == nil || !strings.Contains(err.Error(), "pipeline.storage.s3 configuration is required") {
|
|
t.Fatalf("error = %v, want missing storage.s3", err)
|
|
}
|
|
|
|
cfg := &config.Config{
|
|
Pipeline: &config.PipelineConfig{
|
|
Storage: config.StorageConfig{
|
|
S3: &config.StorageS3Config{RootPrefix: "dnd"},
|
|
},
|
|
},
|
|
Session: &config.SessionConfig{SessionID: "2026-04-19", Campaign: "forsaken"},
|
|
}
|
|
_, err = ResolveArchiveRunPrefix(cfg, &manifest.Manifest{})
|
|
if err == nil || !strings.Contains(err.Error(), "run id is required") {
|
|
t.Fatalf("error = %v, want missing run id", err)
|
|
}
|
|
}
|
|
|
|
func TestResolveArchiveCurrentStateKeys(t *testing.T) {
|
|
manifestKey, runIDKey := ResolveArchiveCurrentStateKeys("dnd/campaigns/forsaken/sessions/2026-04-19/")
|
|
if manifestKey != "dnd/campaigns/forsaken/sessions/2026-04-19/current/manifest.json" {
|
|
t.Fatalf("manifest key = %q", manifestKey)
|
|
}
|
|
if runIDKey != "dnd/campaigns/forsaken/sessions/2026-04-19/current/run_id.txt" {
|
|
t.Fatalf("run id key = %q", runIDKey)
|
|
}
|
|
}
|