From 04200620823cf9b11e0185234429af6180110adc Mon Sep 17 00:00:00 2001 From: Marin Ivanov Date: Mon, 15 Aug 2022 03:33:22 +0300 Subject: Test Remove, RemoveAll, Rename --- file.go | 2 +- fs.go | 5 +++-- fs_test.go | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++---- 3 files changed, 60 insertions(+), 7 deletions(-) diff --git a/file.go b/file.go index 0a7a3e5..ef952cb 100644 --- a/file.go +++ b/file.go @@ -72,7 +72,7 @@ func (f *File) Name() string { func (f *File) readdir(count int, onlyDir bool) ([]os.FileInfo, error) { if !isDirPath(f.key) { - return nil, ErrUnsupported + return nil, ErrNotDirectory } if count == 0 { return []os.FileInfo{}, nil diff --git a/fs.go b/fs.go index 2ff9162..d886de8 100644 --- a/fs.go +++ b/fs.go @@ -25,6 +25,7 @@ var ( ErrUnsupported = errors.New("unsupported operation") ErrInvalidProtocol = errors.New("invalid protocol") ErrInvalidOpenFlag = errors.New("invalid open flag, expects either O_WRONLY or O_RDONLY") + ErrNotDirectory = errors.New("not a directory") ) type Fs struct { @@ -150,8 +151,8 @@ func (fs *Fs) RemoveAll(path string) error { ctx, cancel := fs.contextWithTimeout() defer cancel() - if !strings.HasSuffix(path, "/") { - path += "/" + if !isDirPath(path) { + return ErrNotDirectory } objectsCh := fs.client.ListObjects(ctx, fs.bucket, minio.ListObjectsOptions{Prefix: path}) errc := fs.client.RemoveObjects(ctx, fs.bucket, objectsCh, minio.RemoveObjectsOptions{}) diff --git a/fs_test.go b/fs_test.go index 3f04015..cbee404 100644 --- a/fs_test.go +++ b/fs_test.go @@ -1,6 +1,7 @@ package s3 import ( + "os" "testing" "time" @@ -58,6 +59,14 @@ func TestFsChtimes(t *testing.T) { is.Equal(err, ErrUnsupported) } +func TestFsWriteFile(t *testing.T) { + is := is.New(t) + afs, err := newTestAfs() + is.NoErr(err) + err = afs.WriteFile("dir/file", []byte("testdata"), 0) + is.NoErr(err) +} + func TestFsStat(t *testing.T) { is := is.New(t) afs, err := newTestAfs() @@ -65,6 +74,7 @@ func TestFsStat(t *testing.T) { info, err := afs.Stat("dir/file") is.NoErr(err) is.Equal(info.Name(), "file") + is.Equal(info.Size(), int64(8)) } func TestFsStatNoExist(t *testing.T) { @@ -75,13 +85,13 @@ func TestFsStatNoExist(t *testing.T) { is.Equal(err, afero.ErrFileNotFound) } -func TestFsOpenRead(t *testing.T) { +func TestFsReadFile(t *testing.T) { is := is.New(t) afs, err := newTestAfs() is.NoErr(err) b, err := afs.ReadFile("dir/file") is.NoErr(err) - is.Equal(b, []byte("test")) + is.Equal(b, []byte("testdata")) } func TestFsReadNoExist(t *testing.T) { @@ -92,11 +102,53 @@ func TestFsReadNoExist(t *testing.T) { is.Equal(err, afero.ErrFileNotFound) } -func TestFsOpenWrite(t *testing.T) { +func TestFsRemove(t *testing.T) { + is := is.New(t) + afs, err := newTestAfs() + is.NoErr(err) + err = afs.Remove("dir/file") + is.NoErr(err) +} + +func TestFsRemoveNoExist(t *testing.T) { + is := is.New(t) + afs, err := newTestAfs() + is.NoErr(err) + err = afs.Remove("non-existent") + is.NoErr(err) +} + +func TestFsRemoveAll(t *testing.T) { + is := is.New(t) + afs, err := newTestAfs() + is.NoErr(err) + err = afs.WriteFile("dir/file1", []byte("testdata"), 0) + is.NoErr(err) + err = afs.WriteFile("dir/file2", []byte("testdata"), 0) + is.NoErr(err) + err = afs.WriteFile("persist/file0", []byte("testdata"), 0) + is.NoErr(err) + err = afs.RemoveAll("dir/") + is.NoErr(err) + _, err = afs.Stat("persist/file0") + is.NoErr(err) + err = afs.RemoveAll("persist/") + is.NoErr(err) +} + +func TestFsRename(t *testing.T) { is := is.New(t) afs, err := newTestAfs() is.NoErr(err) - err = afs.WriteFile("dir/file_test", []byte("testdata"), 0) + err = afs.WriteFile("dir/file", []byte("testdata"), 0) + is.NoErr(err) + err = afs.Rename("dir/file", "dir/file2") + is.NoErr(err) + _, err = afs.Stat("dir/file2") + is.NoErr(err) + _, err = afs.Stat("dir/file") + is.Equal(err, os.ErrNotExist) + err = afs.Remove("dir/file2") is.NoErr(err) } -- cgit v1.2.3