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  }