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) }