From b5aca14188ecaddca14f2f7d1abe61b989d4aca0 Mon Sep 17 00:00:00 2001 From: Felicitas Pojtinger Date: Tue, 18 Jan 2022 21:21:06 +0100 Subject: [PATCH] feat: Add tests for `File.Name()` --- pkg/fs/file.go | 5 ++ pkg/fs/file_test.go | 131 ++++++++++++++++++++++++++++++++++++++ pkg/fs/filesystem.go | 4 -- pkg/fs/filesystem_test.go | 14 ++++ 4 files changed, 150 insertions(+), 4 deletions(-) create mode 100644 pkg/fs/file_test.go diff --git a/pkg/fs/file.go b/pkg/fs/file.go index a1922a6..e80a9bd 100644 --- a/pkg/fs/file.go +++ b/pkg/fs/file.go @@ -10,6 +10,7 @@ import ( "time" "github.com/pojntfx/stfs/internal/ioext" + "github.com/pojntfx/stfs/internal/pathext" "github.com/pojntfx/stfs/pkg/cache" "github.com/pojntfx/stfs/pkg/config" "github.com/pojntfx/stfs/pkg/inventory" @@ -370,6 +371,10 @@ func (f *File) Name() string { f.ioLock.Lock() defer f.ioLock.Unlock() + if pathext.IsRoot(f.path, false) { + return "" + } + return f.path } diff --git a/pkg/fs/file_test.go b/pkg/fs/file_test.go new file mode 100644 index 0000000..42e5c03 --- /dev/null +++ b/pkg/fs/file_test.go @@ -0,0 +1,131 @@ +package fs + +import ( + "fmt" + "os" + "testing" +) + +var filenameTests = []struct { + name string + open string + prepare func(symFs) error + check func(string) error + withCache bool + withOsFs bool +}{ + { + "Can get correct file name for /test.txt", + "/test.txt", + func(f symFs) error { + if _, err := f.Create("/test.txt"); err != nil { + return err + } + + return nil + }, + func(got string) error { + want := "/test.txt" + + if got != want { + return fmt.Errorf("invalid name, got %v, want %v", got, want) + } + + return nil + }, + true, + true, + }, + { + "Can get correct file name for /mydir/test.txt", + "/mydir/test.txt", + func(f symFs) error { + if err := f.Mkdir("/mydir", os.ModePerm); err != nil { + return err + } + + if _, err := f.Create("/mydir/test.txt"); err != nil { + return err + } + + return nil + }, + func(got string) error { + want := "/mydir/test.txt" + + if got != want { + return fmt.Errorf("invalid name, got %v, want %v", got, want) + } + + return nil + }, + true, + true, + }, + { + "Can get correct file name for /", + "/", + func(f symFs) error { return nil }, + func(got string) error { + want := "" + + if got != want { + return fmt.Errorf("invalid name, got %v, want %v", got, want) + } + + return nil + }, + true, + true, + }, + { + "Can get correct file name for ''", + "", + func(f symFs) error { return nil }, + func(got string) error { + want := "" + + if got != want { + return fmt.Errorf("invalid name, got %v, want %v", got, want) + } + + return nil + }, + true, + true, + }, +} + +func TestFile_Name(t *testing.T) { + for _, tt := range filenameTests { + tt := tt + + runTestForAllFss(t, tt.name, true, tt.withCache, tt.withOsFs, func(t *testing.T, fs fsConfig) { + symFs, ok := fs.fs.(symFs) + if !ok { + return + } + + if err := tt.prepare(symFs); err != nil { + t.Errorf("%v prepare() error = %v", symFs.Name(), err) + + return + } + + file, err := symFs.Open(tt.open) + if err != nil { + t.Errorf("%v open() error = %v", symFs.Name(), err) + + return + } + + got := file.Name() + + if err := tt.check(got); err != nil { + t.Errorf("%v check() error = %v", symFs.Name(), err) + + return + } + }) + } +} diff --git a/pkg/fs/filesystem.go b/pkg/fs/filesystem.go index b7afdf0..7ff54b7 100644 --- a/pkg/fs/filesystem.go +++ b/pkg/fs/filesystem.go @@ -367,10 +367,6 @@ func (f *STFS) Open(name string) (afero.File, error) { "name": name, }) - if checkName(name) { - return nil, os.ErrInvalid - } - name = cleanName(name) return f.OpenFile(name, os.O_RDONLY, 0) diff --git a/pkg/fs/filesystem_test.go b/pkg/fs/filesystem_test.go index 2e512e8..ba42030 100644 --- a/pkg/fs/filesystem_test.go +++ b/pkg/fs/filesystem_test.go @@ -990,6 +990,20 @@ var openTests = []struct { func(f afero.Fs) error { return nil }, func(f afero.File) error { return nil }, }, + { + "Can not open ' '", + openArgs{" "}, + true, + func(f afero.Fs) error { return nil }, + func(f afero.File) error { return nil }, + }, + { + "Can open ''", + openArgs{""}, + false, + func(f afero.Fs) error { return nil }, + func(f afero.File) error { return nil }, + }, { "Can not open /test.txt without creating it", openArgs{"/test.txt"},