github.com/rudderlabs/rudder-go-kit@v0.30.0/mem/mem_test.go (about) 1 package mem 2 3 import ( 4 "testing" 5 6 gomem "github.com/shirou/gopsutil/v3/mem" 7 "github.com/stretchr/testify/require" 8 ) 9 10 func TestMemCollector(t *testing.T) { 11 const expectedCgroupsTotal = 100000 // setting a pretty low value to make sure the system running the test will have more memory than this 12 const expectedCgroupsUsed = 9000 13 mem, err := gomem.VirtualMemory() 14 require.NoError(t, err) 15 require.Greater(t, mem.Total, uint64(expectedCgroupsTotal), "cgroups total should be less than the actual total memory of the system running the tests") 16 17 t.Run("without cgroups", func(t *testing.T) { 18 c := &collector{basePath: "testdata/invalidpath"} 19 s, err := c.Get() 20 require.NoError(t, err) 21 require.Greater(t, s.Total, uint64(0)) 22 require.Greater(t, s.Used, uint64(0)) 23 require.EqualValues(t, s.Total-s.Used, s.Available, "available memory should be total memory minus used memory") 24 require.Greater(t, s.Total, s.Used, "total memory should be greater than used memory") 25 require.Greater(t, s.Total, s.Available, "total memory should be greater than available memory") 26 require.LessOrEqual(t, s.UsedPercent, float64(100)) 27 require.LessOrEqual(t, s.AvailablePercent, float64(100)) 28 require.EqualValues(t, float64(s.Used)*100/float64(s.Total), s.UsedPercent) 29 }) 30 t.Run("with cgroups", func(t *testing.T) { 31 c := &collector{basePath: "testdata/cgroups_v1_mem_limit"} 32 s, err := c.Get() 33 34 require.NoError(t, err) 35 require.EqualValues(t, expectedCgroupsTotal, s.Total) 36 require.EqualValues(t, expectedCgroupsUsed, s.Used) 37 require.EqualValues(t, s.Total-s.Used, s.Available) 38 require.EqualValues(t, float64(s.Used)*100/float64(s.Total), s.UsedPercent) 39 }) 40 }