package paths import ( "os" "path/filepath" "testing" ) func TestResolveRuntimeDirPrefersEnv(t *testing.T) { t.Setenv("BANGER_RUNTIME_DIR", "/env/runtime") if got := ResolveRuntimeDir("/config/runtime", "/deprecated/repo"); got != "/env/runtime" { t.Fatalf("ResolveRuntimeDir() = %q, want /env/runtime", got) } } func TestResolveRuntimeDirUsesInstalledLayout(t *testing.T) { root := t.TempDir() runtimeDir := filepath.Join(root, "lib", "banger") createRuntimeBundle(t, runtimeDir) origExecutablePath := executablePath executablePath = func() (string, error) { return filepath.Join(root, "bin", "banger"), nil } t.Cleanup(func() { executablePath = origExecutablePath }) if got := ResolveRuntimeDir("", ""); got != runtimeDir { t.Fatalf("ResolveRuntimeDir() = %q, want %q", got, runtimeDir) } } func TestResolveRuntimeDirUsesSourceCheckoutRuntimeSubdir(t *testing.T) { root := t.TempDir() runtimeDir := filepath.Join(root, "runtime") createRuntimeBundle(t, runtimeDir) origExecutablePath := executablePath executablePath = func() (string, error) { return filepath.Join(root, "banger"), nil } t.Cleanup(func() { executablePath = origExecutablePath }) if got := ResolveRuntimeDir("", ""); got != runtimeDir { t.Fatalf("ResolveRuntimeDir() = %q, want %q", got, runtimeDir) } } func createRuntimeBundle(t *testing.T, runtimeDir string) { t.Helper() for _, rel := range []string{ "firecracker", "customize.sh", "packages.apt", "rootfs-docker.ext4", "wtf/root/boot/vmlinux-6.8.0-94-generic", } { path := filepath.Join(runtimeDir, rel) if err := os.MkdirAll(filepath.Dir(path), 0o755); err != nil { t.Fatalf("mkdir %s: %v", filepath.Dir(path), err) } if err := os.WriteFile(path, []byte("test"), 0o644); err != nil { t.Fatalf("write %s: %v", path, err) } } }