diff --git a/internal/cloud/provider_local.go b/internal/cloud/provider_local.go index 37fad7b2..966cb651 100644 --- a/internal/cloud/provider_local.go +++ b/internal/cloud/provider_local.go @@ -41,7 +41,7 @@ func (p localFolder) list() ([]CloudFile, error) { } entries, err := os.ReadDir(p.cfg.URL) if err != nil { - return []CloudFile{}, nil + return nil, fmt.Errorf("read local folder destination %q: %w", p.cfg.URL, err) } var files []CloudFile for _, e := range entries { diff --git a/internal/cloud/provider_local_integrity_test.go b/internal/cloud/provider_local_integrity_test.go new file mode 100644 index 00000000..fc49e710 --- /dev/null +++ b/internal/cloud/provider_local_integrity_test.go @@ -0,0 +1,45 @@ +package cloud + +import ( + "os" + "path/filepath" + "testing" + + "github.com/opensave/opensave/internal/store" +) + +func TestLocalFolderListPropagatesDirectoryErrors(t *testing.T) { + t.Run("absent directory", func(t *testing.T) { + missing := filepath.Join(t.TempDir(), "missing-share") + files, err := (localFolder{cfg: store.CloudConfig{URL: missing}}).list() + if err == nil { + t.Fatalf("list = %+v, nil error; want missing-directory error", files) + } + }) + + t.Run("configured path is not a directory", func(t *testing.T) { + path := filepath.Join(t.TempDir(), "not-a-directory") + if err := os.WriteFile(path, []byte("x"), 0o600); err != nil { + t.Fatal(err) + } + files, err := (localFolder{cfg: store.CloudConfig{URL: path}}).list() + if err == nil { + t.Fatalf("list = %+v, nil error; want directory-read error", files) + } + }) +} + +func TestLocalFolderListStillSupportsOrdinaryFolders(t *testing.T) { + dir := t.TempDir() + want := []byte("synthetic zip") + if err := os.WriteFile(filepath.Join(dir, "game__main__snap_1.zip"), want, 0o600); err != nil { + t.Fatal(err) + } + files, err := (localFolder{cfg: store.CloudConfig{URL: dir}}).list() + if err != nil { + t.Fatalf("list: %v", err) + } + if len(files) != 1 || files[0].Name != "game__main__snap_1.zip" || files[0].SizeBytes != int64(len(want)) { + t.Fatalf("list = %+v", files) + } +}