commit - 08929296955e1e20335c988ec086374a27d9798a
commit + 3993ce191a9f45ba6e35664f655860c64411a2c5
blob - eac48c7629e0b0b5adca38ef6855c8f6823f7e53
blob + 347605671f5ebbe68dd9cd885afd8d698b99e271
--- dir.go
+++ dir.go
}
func (d *directoryHandle) Stat() (fs.FileInfo, error) {
+ sz, err := d.dir.Size()
+ if err != nil {
+ return nil, err
+ }
+
return &fileInfo{
name: d.dir.name,
- size: 4096,
+ size: sz,
mode: d.dir.mode | fs.ModeDir,
}, nil
}
func (d *directoryHandle) Close() error {
return nil
}
+
+func (d *directory) Size() (int64, error) {
+ sum := int64(0)
+ for _, e := range d.children {
+ switch v := e.(type) {
+ case *directory:
+ dir := v
+ sz, err := dir.Size()
+ if err != nil {
+ return 0, err
+ }
+ sum += sz
+
+ case *MockFile:
+ f := v
+ f.open = true
+ stat, err := f.Stat()
+ if err != nil {
+ return 0, err
+ }
+ sum += stat.Size()
+ f.open = false
+
+ case *File:
+ f := v
+ f.open = true
+ stat, err := f.Stat()
+ if err != nil {
+ return 0, err
+ }
+ sum += stat.Size()
+ f.open = false
+ }
+ }
+ return sum, nil
+}
blob - f9798ea716c4a97b5630e85b72f900ee49b2858f
blob + 6053970e504c914f3828b214df85539135e3825e
--- vfs_test.go
+++ vfs_test.go
func TestVFS_MockFile(t *testing.T) {
vfs := NewVFS()
- path := "test.txt"
+ p := "test.txt"
sz := int64(8096)
- err := vfs.CreateMockFile(path, sz, 0666)
+ err := vfs.CreateMockFile(p, sz, 0666)
assert.NoError(t, err)
- fp, err := vfs.Open(path)
+ fp, err := vfs.Open(p)
assert.NoError(t, err)
stat, err := fp.Stat()
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)
+}