|
4 | 4 | "bytes" |
5 | 5 | "fmt" |
6 | 6 | "github.com/containerd/cgroups" |
| 7 | + cgroupsV2 "github.com/containerd/cgroups/v2" |
7 | 8 | "github.com/opencontainers/runtime-spec/specs-go" |
8 | 9 | "github.com/stretchr/testify/assert" |
9 | 10 | "github.com/stretchr/testify/require" |
@@ -71,14 +72,24 @@ func TestProcessEvents(t *testing.T) { |
71 | 72 | assert.Equal(t, Event{Type: EventTypeProcessExit, Pid: uint32(p2.Process.Pid)}, *getEvent()) |
72 | 73 |
|
73 | 74 | var limit int64 = 200 * 1024 * 1024 |
74 | | - control, err := cgroups.New(cgroups.V1, cgroups.StaticPath("/program"), &specs.LinuxResources{ |
75 | | - Memory: &specs.LinuxMemory{Limit: &limit}, |
76 | | - }) |
77 | | - require.NoError(t, err) |
78 | | - defer control.Delete() |
79 | 75 | // p3 should be killed by the OOM killer, because 300 MB > 200 MB cgroup limit |
80 | | - p3 := exec.Command("cgexec", "-g", "memory:program", program, "300", "1s") |
81 | | - require.Error(t, p3.Run()) |
| 76 | + p3 := exec.Command(program, "300", "3s") |
| 77 | + require.NoError(t, p3.Start()) |
| 78 | + switch cgroups.Mode() { |
| 79 | + case cgroups.Legacy, cgroups.Hybrid: |
| 80 | + control, err := cgroups.New(cgroups.V1, cgroups.StaticPath("/program"), &specs.LinuxResources{ |
| 81 | + Memory: &specs.LinuxMemory{Limit: &limit}, |
| 82 | + }) |
| 83 | + require.NoError(t, err) |
| 84 | + defer control.Delete() |
| 85 | + require.NoError(t, control.Add(cgroups.Process{Pid: p3.Process.Pid})) |
| 86 | + case cgroups.Unified: |
| 87 | + control, err := cgroupsV2.NewManager("/sys/fs/cgroup", "/program", &cgroupsV2.Resources{Memory: &cgroupsV2.Memory{Max: &limit}}) |
| 88 | + require.NoError(t, err) |
| 89 | + defer control.Delete() |
| 90 | + require.NoError(t, control.AddProc(uint64(p3.Process.Pid))) |
| 91 | + } |
| 92 | + require.Error(t, p3.Wait()) |
82 | 93 | assert.Equal(t, Event{Type: EventTypeProcessStart, Pid: uint32(p3.Process.Pid)}, *getEvent()) |
83 | 94 | assert.Equal(t, Event{Type: EventTypeProcessExit, Reason: EventReasonOOMKill, Pid: uint32(p3.Process.Pid)}, *getEvent()) |
84 | 95 |
|
|
0 commit comments