vfs/vfs_test.go

109 lines
2.1 KiB
Go

package vfs
import (
"github.com/stretchr/testify/assert"
"io"
"os"
"path"
"testing"
)
func TestVFS_Basic(t *testing.T) {
testcases := []struct {
name string
dirPath string
fileName string
content []byte
mode os.FileMode
}{
{"Simple Root", ".", "test.txt", []byte("some content"), 0666},
{"One Layer Path", "folder", "test.txt", []byte("some content"), 0666},
{"Multi-Layer Path", "folder/folder2/dang", "test.txt", []byte("some content"), 0666},
}
for _, testcase := range testcases {
vfs := NewVFS()
fullPath := path.Join(testcase.dirPath, testcase.fileName)
err := vfs.MkdirAll(testcase.dirPath, 0777)
assert.NoError(t, err)
err = vfs.WriteFile(fullPath, testcase.content, testcase.mode)
assert.NoError(t, err)
fp, err := vfs.Open(fullPath)
assert.NoError(t, err)
content, err := io.ReadAll(fp)
assert.NoError(t, err)
assert.Equal(t, content, testcase.content)
err = fp.Close()
assert.NoError(t, err)
}
}
func TestVFS_MockFile(t *testing.T) {
vfs := NewVFS()
p := "test.txt"
sz := int64(8096)
err := vfs.CreateMockFile(p, sz, 0666)
assert.NoError(t, err)
fp, err := vfs.Open(p)
assert.NoError(t, err)
stat, err := fp.Stat()
assert.NoError(t, err)
assert.Equal(t, stat.Size(), sz)
err = fp.Close()
assert.NoError(t, err)
}
func TestVFS_DirSize(t *testing.T) {
vfs := NewVFS()
err := vfs.MkdirAll("root/one", 0777)
assert.NoError(t, err)
err = vfs.MkdirAll("root/two", 0777)
assert.NoError(t, err)
files := []string{
"root/one/f1",
"root/one/f2",
"root/two/f1",
"root/two/f2",
"root/two/f3",
"root/two/f4",
}
sz := int64(1)
for _, file := range files {
err = vfs.CreateMockFile(file, sz, 0666)
assert.NoError(t, err)
}
fp, err := vfs.Open("root/one")
assert.NoError(t, err)
stat, err := fp.Stat()
assert.NoError(t, err)
assert.Equal(t, stat.Size(), int64(2))
err = fp.Close()
assert.NoError(t, err)
fp, err = vfs.Open("root/two")
assert.NoError(t, err)
stat, err = fp.Stat()
assert.NoError(t, err)
assert.Equal(t, stat.Size(), int64(4))
err = fp.Close()
assert.NoError(t, err)
}