Skip to content

Commit 363153d

Browse files
committed
Add directory size to usage calculation test
Signed-off-by: Derek McGowan <[email protected]>
1 parent b97555e commit 363153d

3 files changed

Lines changed: 32 additions & 15 deletions

File tree

fs/du_test.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ import (
3131
)
3232

3333
func TestUsage(t *testing.T) {
34-
align, err := getTmpAlign()
34+
align, dirs, err := getTmpAlign()
3535
if err != nil {
3636
t.Fatal(err)
3737
}
@@ -48,7 +48,7 @@ func TestUsage(t *testing.T) {
4848
fstest.CreateDir("/dir", 0755),
4949
fstest.CreateRandomFile("/dir/file", 1, 5, 0644),
5050
),
51-
size: align(5),
51+
size: dirs(2) + align(5),
5252
},
5353
{
5454
name: "MultipleSmallFile",
@@ -57,7 +57,7 @@ func TestUsage(t *testing.T) {
5757
fstest.CreateRandomFile("/dir/file1", 2, 5, 0644),
5858
fstest.CreateRandomFile("/dir/file2", 3, 5, 0644),
5959
),
60-
size: align(5) * 2,
60+
size: dirs(2) + align(5)*2,
6161
},
6262
{
6363
name: "BiggerFiles",
@@ -67,7 +67,7 @@ func TestUsage(t *testing.T) {
6767
fstest.CreateRandomFile("/dir/file2", 5, 1024, 0644),
6868
fstest.CreateRandomFile("/dir/file3", 6, 50*1024, 0644),
6969
),
70-
size: align(5) + align(1024) + align(50*1024),
70+
size: dirs(2) + align(5) + align(1024) + align(50*1024),
7171
},
7272
}
7373
if runtime.GOOS != "windows" {
@@ -81,7 +81,7 @@ func TestUsage(t *testing.T) {
8181
createSparseFile("/dir/sparse2", 9, 0644, 0, 1024*1024),
8282
createSparseFile("/dir/sparse2", 10, 0644, 0, 1024*1024*1024, 1024),
8383
),
84-
size: align(5)*3 + align(1024),
84+
size: dirs(2) + align(5)*3 + align(1024),
8585
},
8686
{
8787
name: "Hardlinks",
@@ -90,7 +90,7 @@ func TestUsage(t *testing.T) {
9090
fstest.CreateRandomFile("/dir/file1", 11, 60*1024, 0644),
9191
fstest.Link("/dir/file1", "/dir/link1"),
9292
),
93-
size: align(60 * 1024),
93+
size: dirs(2) + align(60*1024),
9494
},
9595
{
9696
name: "HardlinkSparefile",
@@ -99,7 +99,7 @@ func TestUsage(t *testing.T) {
9999
createSparseFile("/dir/file1", 10, 0644, 30*1024, 1024*1024*1024, 30*1024),
100100
fstest.Link("/dir/file1", "/dir/link1"),
101101
),
102-
size: align(30*1024) * 2,
102+
size: dirs(2) + align(30*1024)*2,
103103
},
104104
}...)
105105
}

fs/du_unix_test.go

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,19 +35,22 @@ func getBsize(root string) (int64, error) {
3535
return int64(s.Bsize), nil // nolint: unconvert
3636
}
3737

38-
func getTmpAlign() (func(int64) int64, error) {
38+
// getTmpAlign returns filesystem specific size alignment functions
39+
// first: aligns filesize to file usage based on blocks
40+
// second: determines directory usage based on directory count (assumes small directories)
41+
func getTmpAlign() (func(int64) int64, func(int64) int64, error) {
3942
t1, err := ioutil.TempDir("", "compute-align-")
4043
if err != nil {
41-
return nil, errors.Wrap(err, "failed to create temp dir")
44+
return nil, nil, errors.Wrap(err, "failed to create temp dir")
4245
}
4346
defer os.RemoveAll(t1)
4447

4548
bsize, err := getBsize(t1)
4649
if err != nil {
47-
return nil, errors.Wrap(err, "failed to get bsize")
50+
return nil, nil, errors.Wrap(err, "failed to get bsize")
4851
}
4952

50-
return func(size int64) int64 {
53+
align := func(size int64) int64 {
5154
// Align to blocks
5255
aligned := (size / bsize) * bsize
5356

@@ -57,5 +60,17 @@ func getTmpAlign() (func(int64) int64, error) {
5760
}
5861

5962
return aligned
60-
}, nil
63+
}
64+
65+
fi, err := os.Stat(t1)
66+
if err != nil {
67+
return nil, nil, errors.Wrap(err, "failed to stat directory")
68+
}
69+
70+
dirSize := fi.Sys().(*syscall.Stat_t).Blocks * blocksUnitSize
71+
dirs := func(count int64) int64 {
72+
return count * dirSize
73+
}
74+
75+
return align, dirs, nil
6176
}

fs/du_windows_test.go

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@
1616

1717
package fs
1818

19-
func getTmpAlign() (func(int64) int64, error) {
19+
func getTmpAlign() (func(int64) int64, func(int64) int64, error) {
2020
return func(s int64) int64 {
21-
return s
22-
}, nil
21+
return s
22+
}, func(c int64) int64 {
23+
return c * 4096
24+
}, nil
2325
}

0 commit comments

Comments
 (0)