databricks-cli/libs/filer/fake_filer.go

93 lines
1.9 KiB
Go
Raw Permalink Normal View History

package filer
import (
"context"
"fmt"
"io"
"io/fs"
"path"
"sort"
"strings"
"github.com/databricks/cli/libs/fakefs"
)
type FakeFiler struct {
entries map[string]fakefs.FileInfo
}
func (f *FakeFiler) Write(ctx context.Context, p string, reader io.Reader, mode ...WriteMode) error {
return fmt.Errorf("not implemented")
}
func (f *FakeFiler) Read(ctx context.Context, p string) (io.ReadCloser, error) {
_, ok := f.entries[p]
if !ok {
return nil, fs.ErrNotExist
}
return io.NopCloser(strings.NewReader("foo")), nil
}
func (f *FakeFiler) Delete(ctx context.Context, p string, mode ...DeleteMode) error {
return fmt.Errorf("not implemented")
}
func (f *FakeFiler) ReadDir(ctx context.Context, p string) ([]fs.DirEntry, error) {
p = strings.TrimSuffix(p, "/")
entry, ok := f.entries[p]
if !ok {
return nil, NoSuchDirectoryError{p}
}
if !entry.FakeDir {
return nil, fs.ErrInvalid
}
// Find all entries contained in the specified directory `p`.
var out []fs.DirEntry
for k, v := range f.entries {
if k == p || path.Dir(k) != p {
continue
}
out = append(out, fakefs.DirEntry{FileInfo: v})
}
sort.Slice(out, func(i, j int) bool { return out[i].Name() < out[j].Name() })
return out, nil
}
func (f *FakeFiler) Mkdir(ctx context.Context, path string) error {
return fmt.Errorf("not implemented")
}
func (f *FakeFiler) Stat(ctx context.Context, path string) (fs.FileInfo, error) {
entry, ok := f.entries[path]
if !ok {
return nil, fs.ErrNotExist
}
return entry, nil
}
// NewFakeFiler creates a new fake [Filer] instance with the given entries.
// It sets the [Name] field of each entry to the base name of the path.
//
// This is meant to be used in tests.
func NewFakeFiler(entries map[string]fakefs.FileInfo) *FakeFiler {
fakeFiler := &FakeFiler{
entries: entries,
}
for k, v := range fakeFiler.entries {
if v.FakeName != "" {
continue
}
v.FakeName = path.Base(k)
fakeFiler.entries[k] = v
}
return fakeFiler
}