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  }