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  }