1
16
17 package fs
18
19 import (
20 "fmt"
21 "os"
22
23 "testing"
24
25 "k8s.io/apimachinery/pkg/api/resource"
26 )
27
28 func TestDiskUsage(t *testing.T) {
29
30 dir1, err := os.MkdirTemp("", "dir_1")
31 if err != nil {
32 t.Fatalf("TestDiskUsage failed: %s", err.Error())
33 }
34 defer os.RemoveAll(dir1)
35
36 tmpfile1, err := os.CreateTemp(dir1, "test")
37 if _, err = tmpfile1.WriteString("just for testing"); err != nil {
38 t.Fatalf("TestDiskUsage failed: %s", err.Error())
39 }
40 dir2, err := os.MkdirTemp(dir1, "dir_2")
41 if err != nil {
42 t.Fatalf("TestDiskUsage failed: %s", err.Error())
43 }
44 tmpfile2, err := os.CreateTemp(dir2, "test")
45 if _, err = tmpfile2.WriteString("just for testing"); err != nil {
46 t.Fatalf("TestDiskUsage failed: %s", err.Error())
47 }
48
49
50
51
52 tmpfile1.Sync()
53 tmpfile2.Sync()
54
55 dirInfo1, err := os.Lstat(dir1)
56 if err != nil {
57 t.Fatalf("TestDiskUsage failed: %s", err.Error())
58 }
59 dirInfo2, err := os.Lstat(dir2)
60 if err != nil {
61 t.Fatalf("TestDiskUsage failed: %s", err.Error())
62 }
63 file1 := tmpfile1.Name()
64 file2 := tmpfile2.Name()
65 fileInfo1, err := os.Lstat(file1)
66 if err != nil {
67 t.Fatalf("TestDiskUsage failed: %s", err.Error())
68 }
69 fileInfo2, err := os.Lstat(file2)
70 if err != nil {
71 t.Fatalf("TestDiskUsage failed: %s", err.Error())
72 }
73 total := dirInfo1.Size() + dirInfo2.Size() + fileInfo1.Size() + fileInfo2.Size()
74
75 usage, err := DiskUsage(dir1)
76 if err != nil {
77 t.Fatalf("TestDiskUsage failed: %s", err.Error())
78 }
79 size, err := resource.ParseQuantity(fmt.Sprintf("%d", usage.Bytes))
80 if err != nil {
81 t.Fatalf("TestDiskUsage failed: %s", err.Error())
82 }
83
84 used, err := resource.ParseQuantity(fmt.Sprintf("%d", total))
85 if err != nil {
86 t.Fatalf("TestDiskUsage failed: %s", err.Error())
87 }
88 if size.Cmp(used) != 0 {
89 t.Fatalf("TestDiskUsage failed: expected 0, got %d", size.Cmp(used))
90 }
91 }
92
93 func TestInfo(t *testing.T) {
94 dir1, err := os.MkdirTemp("", "dir_1")
95 if err != nil {
96 t.Fatalf("TestInfo failed: %s", err.Error())
97 }
98 defer os.RemoveAll(dir1)
99
100
101 availablebytes, capacity, usage, inodesTotal, inodesFree, inodeUsage, err := Info(dir1)
102 if err != nil {
103 t.Errorf("Info() should not error = %v", err)
104 return
105 }
106 validateInfo(t, availablebytes, capacity, usage, inodesTotal, inodeUsage, inodesFree)
107
108
109 tmpfile1, err := os.CreateTemp(dir1, "test")
110 if _, err = tmpfile1.WriteString("just for testing"); err != nil {
111 t.Fatalf("TestInfo failed: %s", err.Error())
112 }
113 availablebytes, capacity, usage, inodesTotal, inodesFree, inodeUsage, err = Info(tmpfile1.Name())
114 validateInfo(t, availablebytes, capacity, usage, inodesTotal, inodeUsage, inodesFree)
115 }
116
117 func validateInfo(t *testing.T, availablebytes int64, capacity int64, usage int64, inodesTotal int64, inodeUsage int64, inodesFree int64) {
118
119 if availablebytes <= 0 {
120 t.Errorf("Info() availablebytes should be greater than 0, got %v", availablebytes)
121 }
122 if capacity <= 0 {
123 t.Errorf("Info() capacity should be greater than 0, got %v", capacity)
124 }
125 if usage <= 0 {
126 t.Errorf("Info() got usage should be greater than 0, got %v", usage)
127 }
128
129
130 if inodesTotal != 0 {
131 t.Errorf("Info() inodesTotal = %v, want %v", inodeUsage, 0)
132 }
133 if inodesFree != 0 {
134 t.Errorf("Info() inodesFree = %v, want %v", inodesFree, 0)
135 }
136 if inodeUsage != 0 {
137 t.Errorf("Info() inodeUsage = %v, want %v", inodeUsage, 0)
138 }
139 }
140
View as plain text