github.com/rudderlabs/rudder-go-kit@v0.30.0/mem/internal/cgroup/mem_test.go (about) 1 package cgroup_test 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/require" 7 8 "github.com/rudderlabs/rudder-go-kit/bytesize" 9 "github.com/rudderlabs/rudder-go-kit/mem/internal/cgroup" 10 ) 11 12 func TestCgroupMemory(t *testing.T) { 13 t.Run("cgroups v1 with limit", func(t *testing.T) { 14 basePath := "testdata/cgroups_v1_mem_limit" 15 totalMem := int(100 * bytesize.GB) 16 limit := cgroup.GetMemoryLimit(basePath, totalMem) 17 18 require.EqualValues(t, 25*bytesize.GB, limit, "when a limit is set, this limit should be returned") 19 require.EqualValues(t, 7873486848, cgroup.GetMemoryUsage(basePath)) 20 }) 21 22 t.Run("cgroups v1 with self limit", func(t *testing.T) { 23 basePath := "testdata/cgroups_v1_mem_limit_proc_self" 24 totalMem := int(100 * bytesize.GB) 25 limit := cgroup.GetMemoryLimit(basePath, totalMem) 26 27 require.EqualValues(t, 25*bytesize.GB, limit, "when a limit is set, this limit should be returned") 28 require.EqualValues(t, 9456156572, cgroup.GetMemoryUsage(basePath)) 29 }) 30 31 t.Run("cgroups v1 with hierarchical limit", func(t *testing.T) { 32 basePath := "testdata/cgroups_v1_mem_hierarchy" 33 totalMem := int(100 * bytesize.GB) 34 limit := cgroup.GetMemoryLimit(basePath, totalMem) 35 36 require.EqualValues(t, 25*bytesize.GB, limit, "when a hierarchical limit is set, this limit should be returned") 37 require.EqualValues(t, 7873486848, cgroup.GetMemoryUsage(basePath)) 38 }) 39 40 t.Run("cgroups v1 no limit", func(t *testing.T) { 41 basePath := "testdata/cgroups_v1_mem_no_limit" 42 totalMem := int(100 * bytesize.GB) 43 limit := cgroup.GetMemoryLimit(basePath, totalMem) 44 45 require.EqualValues(t, totalMem, limit, "when no limit is set, total memory should be returned") 46 require.EqualValues(t, 7873486848, cgroup.GetMemoryUsage(basePath)) 47 }) 48 49 t.Run("cgroups v2 with limit", func(t *testing.T) { 50 basePath := "testdata/cgroups_v2_mem_limit" 51 totalMem := int(100 * bytesize.GB) 52 limit := cgroup.GetMemoryLimit(basePath, totalMem) 53 54 require.EqualValues(t, 32*bytesize.GB, limit, "when a limit is set, this limit should be returned") 55 require.EqualValues(t, 26071040, cgroup.GetMemoryUsage(basePath)) 56 }) 57 58 t.Run("cgroups v2 no limit", func(t *testing.T) { 59 basePath := "testdata/cgroups_v2_mem_no_limit" 60 totalMem := int(100 * bytesize.GB) 61 limit := cgroup.GetMemoryLimit(basePath, totalMem) 62 63 require.EqualValues(t, totalMem, limit, "when no limit is set, total memory should be returned") 64 require.EqualValues(t, 26071040, cgroup.GetMemoryUsage(basePath)) 65 }) 66 67 t.Run("no cgroups info", func(t *testing.T) { 68 basePath := "testdata/invalid_path" 69 totalMem := int(100 * bytesize.GB) 70 limit := cgroup.GetMemoryLimit(basePath, totalMem) 71 72 require.EqualValues(t, limit, limit, "when no cgroups info is available, this limit should be returned") 73 require.EqualValues(t, 0, cgroup.GetMemoryUsage(basePath)) 74 }) 75 }