feat(depot): config resolution and manifest sha parsing

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-04 23:30:32 +02:00
co-authored by Claude Fable 5
parent 17a142cf56
commit b8502700ea
4 changed files with 427 additions and 0 deletions
+115
View File
@@ -0,0 +1,115 @@
package depot
import (
"testing"
"time"
)
func TestLoadConfigDefaults(t *testing.T) {
getenv := func(key string) string {
return ""
}
cfg := LoadConfig(getenv)
if cfg.CDNBase != "https://cdn-a7f3k9.westgate.pw" {
t.Errorf("CDNBase: got %q, want %q", cfg.CDNBase, "https://cdn-a7f3k9.westgate.pw")
}
if cfg.StorageZone != "sow-assets-depot" {
t.Errorf("StorageZone: got %q, want %q", cfg.StorageZone, "sow-assets-depot")
}
if cfg.ProbeJobs != 16 {
t.Errorf("ProbeJobs: got %d, want 16", cfg.ProbeJobs)
}
if cfg.Jobs != 16 {
t.Errorf("Jobs: got %d, want 16", cfg.Jobs)
}
if cfg.ConnectTimeout != 10*time.Second {
t.Errorf("ConnectTimeout: got %v, want 10s", cfg.ConnectTimeout)
}
if cfg.ProbeMaxTime != 30*time.Second {
t.Errorf("ProbeMaxTime: got %v, want 30s", cfg.ProbeMaxTime)
}
if cfg.ConfirmRetries != 3 {
t.Errorf("ConfirmRetries: got %d, want 3", cfg.ConfirmRetries)
}
if cfg.ConfirmMax != 200 {
t.Errorf("ConfirmMax: got %d, want 200", cfg.ConfirmMax)
}
}
func TestLoadConfigReadKeyFallback(t *testing.T) {
// When READ unset, falls back to WriteKey
getenv := func(key string) string {
if key == "BUNNY_STORAGE_PASSWORD" {
return "write-key"
}
return ""
}
cfg := LoadConfig(getenv)
if cfg.ReadKey != "write-key" {
t.Errorf("ReadKey fallback: got %q, want %q", cfg.ReadKey, "write-key")
}
if cfg.WriteKey != "write-key" {
t.Errorf("WriteKey: got %q, want %q", cfg.WriteKey, "write-key")
}
// When READ is set, uses its own value
getenv = func(key string) string {
if key == "BUNNY_STORAGE_READ_PASSWORD" {
return "read-key"
}
if key == "BUNNY_STORAGE_PASSWORD" {
return "write-key"
}
return ""
}
cfg = LoadConfig(getenv)
if cfg.ReadKey != "read-key" {
t.Errorf("ReadKey explicit: got %q, want %q", cfg.ReadKey, "read-key")
}
if cfg.WriteKey != "write-key" {
t.Errorf("WriteKey: got %q, want %q", cfg.WriteKey, "write-key")
}
}
func TestLoadConfigBadIntFallsBack(t *testing.T) {
getenv := func(key string) string {
if key == "DEPOT_PROBE_JOBS" {
return "not-a-number"
}
if key == "DEPOT_JOBS" {
return "invalid"
}
if key == "DEPOT_CONNECT_TIMEOUT" {
return "bad"
}
if key == "DEPOT_PROBE_MAX_TIME" {
return "wrong"
}
if key == "DEPOT_CONFIRM_RETRIES" {
return "nope"
}
if key == "DEPOT_CONFIRM_MAX" {
return "nah"
}
return ""
}
cfg := LoadConfig(getenv)
if cfg.ProbeJobs != 16 {
t.Errorf("ProbeJobs fallback: got %d, want 16", cfg.ProbeJobs)
}
if cfg.Jobs != 16 {
t.Errorf("Jobs fallback: got %d, want 16", cfg.Jobs)
}
if cfg.ConnectTimeout != 10*time.Second {
t.Errorf("ConnectTimeout fallback: got %v, want 10s", cfg.ConnectTimeout)
}
if cfg.ProbeMaxTime != 30*time.Second {
t.Errorf("ProbeMaxTime fallback: got %v, want 30s", cfg.ProbeMaxTime)
}
if cfg.ConfirmRetries != 3 {
t.Errorf("ConfirmRetries fallback: got %d, want 3", cfg.ConfirmRetries)
}
if cfg.ConfirmMax != 200 {
t.Errorf("ConfirmMax fallback: got %d, want 200", cfg.ConfirmMax)
}
}