github.com/elastic/gosigar@v0.14.3/concrete_sigar_test.go (about) 1 package gosigar_test 2 3 import ( 4 "runtime" 5 "testing" 6 "time" 7 8 sigar "github.com/elastic/gosigar" 9 "github.com/stretchr/testify/assert" 10 ) 11 12 func TestConcreteCollectCpuStats(t *testing.T) { 13 concreteSigar := &sigar.ConcreteSigar{} 14 15 // Immediately makes first CPU usage available even though it's not very accurate. 16 samplesCh, stop := concreteSigar.CollectCpuStats(500 * time.Millisecond) 17 firstValue := <-samplesCh 18 assert.True(t, firstValue.User > 0) 19 stop <- struct{}{} 20 21 // Makes CPU usage delta values available 22 samplesCh, stop = concreteSigar.CollectCpuStats(500 * time.Millisecond) 23 firstValue = <-samplesCh 24 secondValue := <-samplesCh 25 assert.True(t, secondValue.User < firstValue.User) 26 stop <- struct{}{} 27 28 // Does not block. 29 _, stop = concreteSigar.CollectCpuStats(10 * time.Millisecond) 30 // Sleep long enough for samplesCh to fill at least 2 values 31 time.Sleep(20 * time.Millisecond) 32 stop <- struct{}{} 33 } 34 35 func TestConcreteGetLoadAverage(t *testing.T) { 36 concreteSigar := &sigar.ConcreteSigar{} 37 avg, err := concreteSigar.GetLoadAverage() 38 skipNotImplemented(t, err, "windows") 39 if assert.NoError(t, err) { 40 assert.NotNil(t, avg.One) 41 assert.NotNil(t, avg.Five) 42 assert.NotNil(t, avg.Fifteen) 43 } 44 } 45 46 func TestConcreteGetMem(t *testing.T) { 47 concreteSigar := &sigar.ConcreteSigar{} 48 mem, err := concreteSigar.GetMem() 49 if assert.NoError(t, err) { 50 assert.True(t, mem.Total > 0) 51 assert.True(t, mem.Used+mem.Free <= mem.Total) 52 } 53 } 54 55 func TestConcreteGetSwap(t *testing.T) { 56 concreteSigar := &sigar.ConcreteSigar{} 57 swap, err := concreteSigar.GetSwap() 58 if assert.NoError(t, err) { 59 assert.True(t, swap.Used+swap.Free <= swap.Total) 60 } 61 } 62 63 func TestConcreteFileSystemUsage(t *testing.T) { 64 root := "/" 65 if runtime.GOOS == "windows" { 66 root = "C:\\" 67 } 68 69 concreteSigar := &sigar.ConcreteSigar{} 70 fsusage, err := concreteSigar.GetFileSystemUsage(root) 71 if assert.NoError(t, err, "Error is %v", err) { 72 assert.True(t, fsusage.Total > 0) 73 } 74 75 fsusage, err = concreteSigar.GetFileSystemUsage("T O T A L L Y B O G U S") 76 assert.Error(t, err) 77 } 78 79 func TestConcreteGetFDUsage(t *testing.T) { 80 concreteSigar := &sigar.ConcreteSigar{} 81 fdUsage, err := concreteSigar.GetFDUsage() 82 skipNotImplemented(t, err, "windows", "darwin", "aix") 83 if assert.NoError(t, err) { 84 assert.True(t, fdUsage.Open > 0) 85 assert.True(t, fdUsage.Open <= fdUsage.Max) 86 } 87 } 88 89 func TestConcreteGetRusage(t *testing.T) { 90 concreteSigar := &sigar.ConcreteSigar{} 91 resourceUsage, err := concreteSigar.GetRusage(0) 92 skipNotImplemented(t, err, "netbsd", "solaris") 93 if assert.NoError(t, err) { 94 assert.True(t, resourceUsage.Utime >= 0) 95 assert.True(t, resourceUsage.Stime >= 0) 96 } 97 }