github.com/dundee/gdu/v4@v4.11.2/pkg/analyze/dir_test.go (about) 1 package analyze 2 3 import ( 4 "os" 5 "sort" 6 "testing" 7 8 "github.com/dundee/gdu/v4/internal/testdir" 9 "github.com/stretchr/testify/assert" 10 ) 11 12 func TestAnalyzeDir(t *testing.T) { 13 fin := testdir.CreateTestDir() 14 defer fin() 15 16 analyzer := CreateAnalyzer() 17 dir := analyzer.AnalyzeDir("test_dir", func(_, _ string) bool { return false }) 18 19 c := analyzer.GetProgressChan() 20 progress := <-c 21 assert.GreaterOrEqual(t, progress.TotalSize, int64(0)) 22 analyzer.ResetProgress() 23 24 done := analyzer.GetDoneChan() 25 <-done 26 27 // test dir info 28 assert.Equal(t, "test_dir", dir.Name) 29 assert.Equal(t, int64(7+4096*3), dir.Size) 30 assert.Equal(t, 5, dir.ItemCount) 31 assert.True(t, dir.IsDir()) 32 33 // test dir tree 34 assert.Equal(t, "nested", dir.Files[0].GetName()) 35 assert.Equal(t, "subnested", dir.Files[0].(*Dir).Files[1].GetName()) 36 37 // test file 38 assert.Equal(t, "file2", dir.Files[0].(*Dir).Files[0].GetName()) 39 assert.Equal(t, int64(2), dir.Files[0].(*Dir).Files[0].GetSize()) 40 41 assert.Equal(t, "file", dir.Files[0].(*Dir).Files[1].(*Dir).Files[0].GetName()) 42 assert.Equal(t, int64(5), dir.Files[0].(*Dir).Files[1].(*Dir).Files[0].GetSize()) 43 44 // test parent link 45 assert.Equal(t, "test_dir", dir.Files[0].(*Dir).Files[1].(*Dir).Files[0].GetParent().GetParent().GetParent().Name) 46 } 47 48 func TestIgnoreDir(t *testing.T) { 49 fin := testdir.CreateTestDir() 50 defer fin() 51 52 dir := CreateAnalyzer().AnalyzeDir("test_dir", func(_, _ string) bool { return true }) 53 54 assert.Equal(t, "test_dir", dir.Name) 55 assert.Equal(t, 1, dir.ItemCount) 56 } 57 58 func TestFlags(t *testing.T) { 59 fin := testdir.CreateTestDir() 60 defer fin() 61 62 os.Mkdir("test_dir/empty", 0644) 63 64 os.Symlink("test_dir/nested/file2", "test_dir/nested/file3") 65 66 dir := CreateAnalyzer().AnalyzeDir("test_dir", func(_, _ string) bool { return false }) 67 sort.Sort(dir.Files) 68 69 assert.Equal(t, int64(28+4096*4), dir.Size) 70 assert.Equal(t, 7, dir.ItemCount) 71 72 // test file3 73 assert.Equal(t, "nested", dir.Files[0].GetName()) 74 assert.Equal(t, "file3", dir.Files[0].(*Dir).Files[1].GetName()) 75 assert.Equal(t, int64(21), dir.Files[0].(*Dir).Files[1].GetSize()) 76 assert.Equal(t, int64(0), dir.Files[0].(*Dir).Files[1].GetUsage()) 77 assert.Equal(t, '@', dir.Files[0].(*Dir).Files[1].GetFlag()) 78 79 assert.Equal(t, 'e', dir.Files[1].GetFlag()) 80 } 81 82 func TestHardlink(t *testing.T) { 83 fin := testdir.CreateTestDir() 84 defer fin() 85 86 os.Link("test_dir/nested/file2", "test_dir/nested/file3") 87 88 dir := CreateAnalyzer().AnalyzeDir("test_dir", func(_, _ string) bool { return false }) 89 90 assert.Equal(t, int64(7+4096*3), dir.Size) // file2 and file3 are counted just once for size 91 assert.Equal(t, 6, dir.ItemCount) // but twice for item count 92 93 // test file3 94 assert.Equal(t, "file3", dir.Files[0].(*Dir).Files[1].GetName()) 95 assert.Equal(t, int64(2), dir.Files[0].(*Dir).Files[1].GetSize()) 96 assert.Equal(t, 'H', dir.Files[0].(*Dir).Files[1].GetFlag()) 97 } 98 99 func TestErr(t *testing.T) { 100 fin := testdir.CreateTestDir() 101 defer fin() 102 103 os.Chmod("test_dir/nested", 0) 104 defer os.Chmod("test_dir/nested", 0755) 105 106 dir := CreateAnalyzer().AnalyzeDir("test_dir", func(_, _ string) bool { return false }) 107 108 assert.Equal(t, "test_dir", dir.GetName()) 109 assert.Equal(t, 2, dir.ItemCount) 110 assert.Equal(t, '.', dir.GetFlag()) 111 112 assert.Equal(t, "nested", dir.Files[0].GetName()) 113 assert.Equal(t, '!', dir.Files[0].GetFlag()) 114 } 115 116 func BenchmarkAnalyzeDir(b *testing.B) { 117 fin := testdir.CreateTestDir() 118 defer fin() 119 120 b.ResetTimer() 121 122 CreateAnalyzer().AnalyzeDir("test_dir", func(_, _ string) bool { return false }) 123 }