Skip to content

Commit

Permalink
writefstest for mountedfs
Browse files Browse the repository at this point in the history
  • Loading branch information
parro-it committed Mar 11, 2021
1 parent ba5adbc commit cbf21d4
Show file tree
Hide file tree
Showing 6 changed files with 39 additions and 263 deletions.
74 changes: 0 additions & 74 deletions memfs/fs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,79 +23,5 @@ func fixtureFile(name string) string {
func TestMemFS(t *testing.T) {
fsys := New()
t.Run("Pass writefstest.TestFS", writefstest.TestFS(fsys))
/*
t.Run("MapWriteFS", func(t *testing.T) {
/ * data := []byte{0xca, 0xfe, 0xba, 0xbe}

fsw := MapWriteFS{fstest.MapFS{
"adir/afile": &fstest.MapFile{Data: data},
"adir2/afile2": &fstest.MapFile{Data: data},
}}
* /
t.Run("WriteFile", func(t *testing.T) {
fsw := MapWriteFS{fstest.MapFS{}}
buf := []byte("pippero")
n, err := writefs.WriteFile(fsw, "file.pip", buf)
assert.NoError(t, err)
assert.Equal(t, len(buf), n)
actual, err := fs.ReadFile(fsw, "file.pip")
assert.NoError(t, err)
assert.Equal(t, buf, actual)
})
/*
t.Run("creates directories with OpenFile", func(t *testing.T) {
fsys := MapWriteFS{fstest.MapFS{}}
f, err := fsys.OpenFile("tmp/adir", os.O_CREATE, fs.FileMode(0755)|fs.ModeDir)
assert.NoError(t, err)
assert.Nil(t, f)
info, err := fs.Stat(fsys, "tmp/adir")
assert.NoError(t, err)
assert.True(t, info.IsDir())
})
t.Run("remove directories with OpenFile", func(t *testing.T) {
fsys := MapWriteFS{fstest.MapFS{
"adir/afile": &fstest.MapFile{Mode: fs.ModeDir},
}}
info, err := fs.Stat(fsys, "adir/afile")
assert.NoError(t, err)
assert.True(t, info.IsDir())
f, err := fsys.OpenFile("adir/afile", os.O_TRUNC, 0)
assert.NoError(t, err)
assert.Nil(t, f)
info, err = fs.Stat(fsys, "adir/afile")
assert.Error(t, err)
assert.True(t, os.IsNotExist(err))
assert.Nil(t, info)
})
t.Run("writes files", func(t *testing.T) {
f, err := writefs.OpenFile(fsw, "adir/afile", os.O_WRONLY|os.O_TRUNC, fs.FileMode(0664))
assert.NoError(t, err)
defer f.Close()
buf := []byte("ciao")
n, err := f.Write(buf)
assert.NoError(t, err)
assert.Equal(t, n, len(buf))
actual, err := fs.ReadFile(fsw, "adir/afile")
assert.NoError(t, err)
assert.Equal(t, buf, actual)
})
* /
})
*/
}
20 changes: 18 additions & 2 deletions mountedfs/fs.go
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,23 @@ func (f MountedFS) Sub(dir string) (fs.FS, error) {

// OpenFile implements writefs.WriteFS
func (f MountedFS) OpenFile(name string, flag int, perm fs.FileMode) (writefs.FileWriter, error) {
return nil, nil
if !fs.ValidPath(name) {
return nil, &fs.PathError{}
}

if name == "." {
return nil, syscall.EISDIR
}

rpath := f.pickRemotePath(name)
if rpath.Error != nil {
return nil, rpath.Error
}
if rpath.Path == "." {
return nil, fs.ErrExist
}

return writefs.OpenFile(rpath.Fs, rpath.Path, flag, perm)
}

// Mount add a child file system, using `name`
Expand Down Expand Up @@ -231,7 +247,7 @@ func (f MountedFS) pickRemotePath(name string) remotePath {
var ok bool
res.Fs, ok = f[res.FsName]
if !ok {
res.Error = fmt.Errorf("fs not found: %s", res.FsName)
res.Error = fmt.Errorf("%w: fs not found: %s", fs.ErrNotExist, res.FsName)
}

return res
Expand Down
20 changes: 13 additions & 7 deletions mountedfs/fs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,24 +5,33 @@ import (
"testing"
"testing/fstest"

"github.com/parro-it/vs/memfs"
"github.com/parro-it/vs/writefstest"
"github.com/stretchr/testify/assert"
)

func TestMountedFS(t *testing.T) {
data := []byte{0xca, 0xfe, 0xba, 0xbe}
memfs := fstest.MapFS{
memfs1 := fstest.MapFS{
"adir/afile": &fstest.MapFile{Data: data},
}

memfs2 := fstest.MapFS{
"adir2/afile2": &fstest.MapFile{Data: data},
}

dir1 := memfs.New()
dirempty := memfs.New()

mfs := MountedFS{
"c": memfs,
"d": memfs2,
"c": memfs1,
"d": memfs2,
"dir1": dir1,
"dirempty": dirempty,
}

t.Run("pass writefstest.TestFS", writefstest.TestFS(mfs))

t.Run("read files from multiple fs", func(t *testing.T) {
buf, err := fs.ReadFile(mfs, "c/adir/afile")
buf2, err2 := fs.ReadFile(mfs, "d/adir2/afile2")
Expand Down Expand Up @@ -50,11 +59,8 @@ func TestMountedFS(t *testing.T) {
buf, err := fs.ReadFile(mfs, "f/adir/afile")

assert.Error(t, err)
assert.Equal(t, "fs not found: f", err.Error())
assert.Equal(t, "file does not exist: fs not found: f", err.Error())
assert.Nil(t, buf)
})

t.Run("TestFS", func(t *testing.T) {
assert.NoError(t, fstest.TestFS(mfs, "c/adir/afile", "d/adir2/afile2"))
})
}
71 changes: 0 additions & 71 deletions osfs/fs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,76 +35,5 @@ func fixtureFile(name string) string {
func TestOsFS(t *testing.T) {
fsys := DirWriteFS("/var/fixtures")
t.Run("Pass writefstest.TestFS", writefstest.TestFS(fsys))
/*
fsw := fixtures()

t.Run("writes files", func(t *testing.T) {
os.Remove(fixtureFile("afile"))
f, err := writefs.OpenFile(fsw, "afile", os.O_WRONLY|os.O_CREATE, fs.FileMode(0664))
defer f.Close()
buf := []byte("ciao")
n, err := f.Write(buf)
assert.NoError(t, err)
assert.Equal(t, n, len(buf))
actual, err := ioutil.ReadFile(fixtureFile("afile"))
assert.NoError(t, err)
assert.Equal(t, buf, actual)
assert.NoError(t, os.Remove(fixtureFile("afile")))
})
t.Run("creates directories with OpenFile", func(t *testing.T) {
os.RemoveAll("/tmp/adir")
fsys := DirWriteFS("/tmp")
f, err := fsys.OpenFile("adir", os.O_CREATE, fs.FileMode(0755)|fs.ModeDir)
assert.NoError(t, err)
assert.Nil(t, f)
info, err := os.Stat("/tmp/adir")
assert.NoError(t, err)
assert.True(t, info.IsDir())
err = os.RemoveAll("/tmp/adir")
assert.NoError(t, err)
})
t.Run("remove directories with OpenFile", func(t *testing.T) {
os.MkdirAll("/tmp/adir", os.FileMode(0755))
info, err := os.Stat("/tmp/adir")
assert.NoError(t, err)
assert.True(t, info.IsDir())
fsys := DirWriteFS("/tmp")
f, err := fsys.OpenFile("adir", os.O_TRUNC, 0)
assert.NoError(t, err)
assert.Nil(t, f)
info, err = os.Stat("/tmp/adir")
assert.Error(t, err)
assert.True(t, os.IsNotExist(err))
assert.Nil(t, info)
os.RemoveAll("/tmp/adir")
})
t.Run("pass TestFS", func(t *testing.T) {
fstest.TestFS(fsw, "dir1/file2", "file1")
f, err := writefs.OpenFile(fsw, ".", os.O_RDONLY, fs.FileMode(0664))
defer f.Close()
assert.NoError(t, err)
dir, ok := f.(fs.ReadDirFile)
files, err := dir.ReadDir(-1)
assert.True(t, ok)
assert.Equal(t, 4, len(files))
assert.Equal(t, true, files[0].Type().IsDir())
assert.Equal(t, "fakehost", files[0].Name())
assert.Equal(t, false, files[1].Type().IsDir())
assert.Equal(t, "file1", files[1].Name())
assert.Equal(t, true, files[2].Type().IsDir())
assert.Equal(t, "dir1", files[2].Name())
assert.Equal(t, false, files[3].Type().IsDir())
assert.Equal(t, "anyfile.txt", files[3].Name())
})
*/
}
101 changes: 0 additions & 101 deletions sshfs/fs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -60,106 +60,5 @@ func TestSSHFS(t *testing.T) {
sshClient.Close()
})
})
/*
t.Run("can open files for write", func(t *testing.T) {
fsys, err := Connect("/var/fixtures", hostCfg)
f, err := writefs.OpenFile(fsys, "prova", os.O_WRONLY|os.O_CREATE, fs.FileMode(0664))
buf := []byte(time.Now().Format(time.RFC3339Nano))
n, err := f.Write(buf)
assert.NoError(t, err)
assert.Equal(t, n, len(buf))
f.Close()
actual, err := fs.ReadFile(fsys, "prova")
assert.NoError(t, err)
assert.Equal(t, buf, actual)
})
t.Run("creates directories with OpenFile", func(t *testing.T) {
fsys, err := Connect("/tmp", hostCfg)
assert.NoError(t, err)
fsys.client.RemoveDirectory("/tmp/adir")
fsys.client.Remove("/tmp/adir")
f, err := fsys.OpenFile("adir", os.O_CREATE, fs.FileMode(0755)|fs.ModeDir)
assert.NoError(t, err)
assert.Nil(t, f)
info, err := fsys.client.Stat("/tmp/adir")
assert.NoError(t, err)
assert.True(t, info.IsDir())
err = fsys.client.RemoveDirectory("/tmp/adir")
assert.NoError(t, err)
})
t.Run("remove directories with OpenFile", func(t *testing.T) {
fsys, err := Connect("/tmp", hostCfg)
fsys.client.MkdirAll("/tmp/adir")
info, err := fsys.client.Stat("/tmp/adir")
assert.NoError(t, err)
assert.True(t, info.IsDir())
f, err := fsys.OpenFile("adir", os.O_TRUNC, 0)
assert.NoError(t, err)
assert.Nil(t, f)
info, err = fsys.client.Stat("/tmp/adir")
assert.Error(t, err)
assert.True(t, os.IsNotExist(err))
assert.Nil(t, info)
fsys.client.RemoveDirectory("/tmp/adir")
})
t.Run("can open files", func(t *testing.T) {
fsys, err := Connect("/var/fixtures", hostCfg)
f, err := fsys.Open("ciao.txt")
assert.NoError(t, err)
assert.NotNil(t, f)
buf := make([]byte, 100)
n, err := f.Read(buf)
assert.Equal(t, 5, n)
assert.Equal(t, "ciao\n", string(buf[:n]))
f.Close()
fsys.Disconnect()
})
t.Run("can stat files", func(t *testing.T) {
fsys, err := Connect("/var/fixtures", hostCfg)
info, err := fs.Stat(fsys, "ciao.txt")
assert.NoError(t, err)
assert.NotNil(t, info)
assert.Equal(t, "ciao.txt", info.Name())
fsys.Disconnect()
})
t.Run("can read files", func(t *testing.T) {
fsys, err := Connect("/var/fixtures", hostCfg)
buf, err := fs.ReadFile(fsys, "ciao.txt")
assert.NoError(t, err)
assert.NotNil(t, buf)
assert.Equal(t, "ciao\n", string(buf))
fsys.Disconnect()
})
t.Run("can readdir", func(t *testing.T) {
fsys, err := Connect("/var/fixtures", hostCfg)
files, err := fs.ReadDir(fsys, "new-dir")
assert.NoError(t, err)
assert.Equal(t, 4, len(files))
assert.Equal(t, "file1.txt", files[0].Name())
fsys.Disconnect()
})

t.Run("pass TestFS", func(t *testing.T) {
fsys, err := Connect("/var/fixtures", hostCfg)
assert.NoError(t, err)
err = fstest.TestFS(fsys, "new-dir", "new-dir/file1.txt")
assert.NoError(t, err)
})
*/
}
16 changes: 8 additions & 8 deletions writefstest/testfs.go
Original file line number Diff line number Diff line change
Expand Up @@ -97,17 +97,17 @@ func TestFS(fsys writefs.WriteFS) func(t *testing.T) {
fileNotExists(t, dir)
}
t.Run("creates directories with OpenFile - nested and not recursively", func(t *testing.T) {
dirRemove(t, "adir/nested")
dirRemove(t, "adir")
dirRemove(t, "dir1/adir/nested")
dirRemove(t, "dir1/adir")

// nested dir return error
f, err := fsys.OpenFile("adir/nested", os.O_CREATE, fs.FileMode(0755)|fs.ModeDir)
f, err := fsys.OpenFile("dir1/adir/nested", os.O_CREATE, fs.FileMode(0755)|fs.ModeDir)
assert.Error(t, err)
assert.Nil(t, f)
assert.True(t, errors.Is(err, fs.ErrNotExist))

checkDirCreated(t, "adir")
checkDirCreated(t, "adir/nested")
checkDirCreated(t, "dir1/adir")
checkDirCreated(t, "dir1/adir/nested")
})

t.Run("OpenFile return *PathError on bad paths", func(t *testing.T) {
Expand All @@ -133,14 +133,14 @@ func TestFS(fsys writefs.WriteFS) func(t *testing.T) {

t.Run("remove directories with OpenFile - nested and not recursively", func(t *testing.T) {
// non empty dir return error
f, err := fsys.OpenFile("adir", os.O_TRUNC, 0)
f, err := fsys.OpenFile("dir1/adir", os.O_TRUNC, 0)
assert.Error(t, err)
assert.Nil(t, f)
assert.True(t, errors.Is(err, fs.ErrInvalid))
//assert.True(t, errors.Is(err, &fs.PathError{}))

checkDirRemoved(t, "adir/nested")
checkDirRemoved(t, "adir")
checkDirRemoved(t, "dir1/adir/nested")
checkDirRemoved(t, "dir1/adir")
})
t.Run("create and write on new files", func(t *testing.T) {
file := "dir1/file1new"
Expand Down

0 comments on commit cbf21d4

Please sign in to comment.