summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--file.go2
-rw-r--r--fs.go5
-rw-r--r--fs_test.go60
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)
}