github.com/weaveworks/common@v0.0.0-20230728070032-dd9e68f319d5/fs/fs_test.go (about) 1 package fs 2 3 import ( 4 "os" 5 "testing" 6 ) 7 8 const devNullCount = 500 9 10 func openDevNullFiles(b *testing.B, n int) []*os.File { 11 var arr []*os.File 12 for i := 0; i < n; i++ { 13 fh, err := os.Open("/dev/null") 14 if err != nil { 15 b.Fatalf("Cannot open /dev/null.") 16 } 17 arr = append(arr, fh) 18 } 19 return arr 20 21 } 22 func closeDevNullFiles(b *testing.B, arr []*os.File) { 23 for i := range arr { 24 err := arr[i].Close() 25 if err != nil { 26 b.Fatalf("Cannot close /dev/null.") 27 } 28 } 29 } 30 31 func BenchmarkReadDirNames(b *testing.B) { 32 arr := openDevNullFiles(b, devNullCount) 33 34 b.ResetTimer() 35 for i := 0; i < b.N; i++ { 36 names, err := ReadDirNames("/proc/self/fd") 37 if err != nil { 38 b.Fatalf("ReadDirNames failed: %v", err) 39 } 40 count := len(names) 41 if count < devNullCount || count > devNullCount+10 { 42 b.Fatalf("ReadDirNames failed: count=%d", count) 43 } 44 } 45 b.StopTimer() 46 47 closeDevNullFiles(b, arr) 48 } 49 50 func BenchmarkReadDirCount(b *testing.B) { 51 arr := openDevNullFiles(b, devNullCount) 52 53 b.ResetTimer() 54 for i := 0; i < b.N; i++ { 55 count, err := ReadDirCount("/proc/self/fd") 56 if err != nil { 57 b.Fatalf("ReadDirCount failed: %v", err) 58 } 59 if count < devNullCount || count > devNullCount+10 { 60 b.Fatalf("ReadDirCount failed: count=%d", count) 61 } 62 } 63 b.StopTimer() 64 65 closeDevNullFiles(b, arr) 66 } 67 68 func TestReadDirNames(t *testing.T) { 69 names, err := ReadDirNames("/proc/self/fd") 70 if err != nil { 71 t.Fatalf("ReadDirNames failed: %v", err) 72 } 73 count, err := ReadDirCount("/proc/self/fd") 74 if err != nil { 75 t.Fatalf("ReadDirCount failed: %v", err) 76 } 77 if len(names) != count { 78 t.Fatalf("ReadDirNames and ReadDirCount give inconsitent results: %d != %d", len(names), count) 79 } 80 81 }