Skip to content

Commit adb91aa

Browse files
committed
chore(integration): fix tests under cgroupv2
Signed-off-by: Cian Johnston <[email protected]>
1 parent 97a5912 commit adb91aa

File tree

1 file changed

+43
-18
lines changed

1 file changed

+43
-18
lines changed

integration/docker_test.go

Lines changed: 43 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -240,28 +240,53 @@ func TestDocker(t *testing.T) {
240240
require.Equal(t, "1000", strings.TrimSpace(string(out)))
241241

242242
// Validate that memory limit is being applied to the inner container.
243-
out, err = integrationtest.ExecInnerContainer(t, pool, integrationtest.ExecConfig{
243+
// First check under cgroupv2 path.
244+
if out, err = integrationtest.ExecInnerContainer(t, pool, integrationtest.ExecConfig{
244245
ContainerID: resource.Container.ID,
245-
Cmd: []string{"cat", "/sys/fs/cgroup/memory/memory.limit_in_bytes"},
246-
})
247-
require.NoError(t, err)
248-
require.Equal(t, expectedMemoryLimit, strings.TrimSpace(string(out)))
246+
Cmd: []string{"cat", "/sys/fs/cgroup/memory.max"},
247+
}); err == nil {
248+
require.Equal(t, expectedMemoryLimit, strings.TrimSpace(string(out)))
249+
} else { // fall back to cgroupv1 path.
250+
out, err = integrationtest.ExecInnerContainer(t, pool, integrationtest.ExecConfig{
251+
ContainerID: resource.Container.ID,
252+
Cmd: []string{"cat", "/sys/fs/cgroup/memory/memory.limit_in_bytes"},
253+
})
254+
require.NoError(t, err)
255+
require.Equal(t, expectedMemoryLimit, strings.TrimSpace(string(out)))
256+
}
249257

250-
periodStr, err := integrationtest.ExecInnerContainer(t, pool, integrationtest.ExecConfig{
258+
// Validate the cpu limits are being applied to the inner container.
259+
// First check under cgroupv2 path.
260+
var quota, period int64
261+
if out, err = integrationtest.ExecInnerContainer(t, pool, integrationtest.ExecConfig{
251262
ContainerID: resource.Container.ID,
252-
Cmd: []string{"cat", "/sys/fs/cgroup/cpu,cpuacct/cpu.cfs_period_us"},
253-
})
254-
require.NoError(t, err)
255-
period, err := strconv.ParseInt(strings.TrimSpace(string(periodStr)), 10, 64)
256-
require.NoError(t, err)
263+
Cmd: []string{"cat", "/sys/fs/cgroup/cpu.max"},
264+
}); err == nil {
265+
// out is in the format "period quota"
266+
// e.g. "100000 100000"
267+
fields := strings.Fields(string(out))
268+
require.Len(t, fields, 2)
269+
period, err = strconv.ParseInt(fields[0], 10, 64)
270+
require.NoError(t, err)
271+
quota, err = strconv.ParseInt(fields[1], 10, 64)
272+
require.NoError(t, err)
273+
} else { // fall back to cgroupv1 path.
274+
periodStr, err := integrationtest.ExecInnerContainer(t, pool, integrationtest.ExecConfig{
275+
ContainerID: resource.Container.ID,
276+
Cmd: []string{"cat", "/sys/fs/cgroup/cpu,cpuacct/cpu.cfs_period_us"},
277+
})
278+
require.NoError(t, err)
279+
period, err = strconv.ParseInt(strings.TrimSpace(string(periodStr)), 10, 64)
280+
require.NoError(t, err)
257281

258-
quotaStr, err := integrationtest.ExecInnerContainer(t, pool, integrationtest.ExecConfig{
259-
ContainerID: resource.Container.ID,
260-
Cmd: []string{"cat", "/sys/fs/cgroup/cpu/cpu.cfs_quota_us"},
261-
})
262-
require.NoError(t, err)
263-
quota, err := strconv.ParseInt(strings.TrimSpace(string(quotaStr)), 10, 64)
264-
require.NoError(t, err)
282+
quotaStr, err := integrationtest.ExecInnerContainer(t, pool, integrationtest.ExecConfig{
283+
ContainerID: resource.Container.ID,
284+
Cmd: []string{"cat", "/sys/fs/cgroup/cpu/cpu.cfs_quota_us"},
285+
})
286+
require.NoError(t, err)
287+
quota, err = strconv.ParseInt(strings.TrimSpace(string(quotaStr)), 10, 64)
288+
require.NoError(t, err)
289+
}
265290

266291
// Validate that the CPU limit is being applied to the inner container.
267292
actualLimit := float64(quota) / float64(period)

0 commit comments

Comments
 (0)