Skip to content

Commit 5e980bc

Browse files
authored
Merge pull request #722 from kzys/cgroup-v2
Support cgroup v2
2 parents c02f65a + f03ab3d commit 5e980bc

File tree

3 files changed

+33
-24
lines changed

3 files changed

+33
-24
lines changed

runtime/integ_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
package main
1414

1515
import (
16+
"os"
17+
"path/filepath"
1618
"strings"
1719

1820
"github.com/firecracker-microvm/firecracker-containerd/internal"
@@ -38,3 +40,15 @@ var testNameToVMIDReplacer = strings.NewReplacer("/", "-", "_", "-")
3840
func testNameToVMID(s string) string {
3941
return testNameToVMIDReplacer.Replace(s)
4042
}
43+
44+
func cgroupExists(name string) bool {
45+
// cgroups v1
46+
_, err := os.Stat(filepath.Join("/sys/fs/cgroup/cpu", name))
47+
if err == nil {
48+
return true
49+
}
50+
51+
// cgroups v2
52+
_, err = os.Stat(filepath.Join("/sys/fs/cgroup", name))
53+
return err == nil
54+
}

runtime/jailer_integ_test.go

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -40,21 +40,28 @@ const (
4040
jailerGID = 300001
4141
)
4242

43+
func assertEmptyShimDir(tb testing.TB, ns, vmID string) {
44+
_, err := os.Stat(filepath.Join(integtest.ShimBaseDir(), ns+"#"+vmID))
45+
assert.Error(tb, err)
46+
assert.True(tb, os.IsNotExist(err))
47+
48+
shimContents, err := os.ReadDir(integtest.ShimBaseDir())
49+
require.NoError(tb, err)
50+
assert.Len(tb, shimContents, 0)
51+
}
52+
4353
func TestJailer_Isolated(t *testing.T) {
4454
integtest.Prepare(t)
4555
t.Run("Without Jailer", func(t *testing.T) {
46-
t.Parallel()
4756
testJailer(t, nil)
4857
})
4958
t.Run("With Jailer", func(t *testing.T) {
50-
t.Parallel()
5159
testJailer(t, &proto.JailerConfig{
5260
UID: jailerUID,
5361
GID: jailerGID,
5462
})
5563
})
5664
t.Run("With Jailer and bind-mount", func(t *testing.T) {
57-
t.Parallel()
5865
testJailer(t, &proto.JailerConfig{
5966
UID: jailerUID,
6067
GID: jailerGID,
@@ -66,18 +73,15 @@ func TestJailer_Isolated(t *testing.T) {
6673
func TestAttachBlockDevice_Isolated(t *testing.T) {
6774
integtest.Prepare(t)
6875
t.Run("Without Jailer", func(t *testing.T) {
69-
t.Parallel()
7076
testAttachBlockDevice(t, nil)
7177
})
7278
t.Run("With Jailer", func(t *testing.T) {
73-
t.Parallel()
7479
testAttachBlockDevice(t, &proto.JailerConfig{
7580
UID: jailerUID,
7681
GID: jailerGID,
7782
})
7883
})
7984
t.Run("With Jailer and bind-mount", func(t *testing.T) {
80-
t.Parallel()
8185
testAttachBlockDevice(t, &proto.JailerConfig{
8286
UID: jailerUID,
8387
GID: jailerGID,
@@ -140,9 +144,13 @@ func testJailer(t *testing.T, jailerConfig *proto.JailerConfig) {
140144
fcClient, err := integtest.NewFCControlClient(integtest.ContainerdSockPath)
141145
require.NoError(t, err)
142146

143-
_, err = fcClient.CreateVM(ctx, &request)
147+
resp, err := fcClient.CreateVM(ctx, &request)
144148
require.NoError(t, err)
145149

150+
if jailerConfig != nil {
151+
assert.True(t, cgroupExists(resp.CgroupPath))
152+
}
153+
146154
c, err := client.NewContainer(ctx,
147155
vmID+"-container",
148156
containerd.WithSnapshotter(defaultSnapshotterName),
@@ -174,13 +182,7 @@ func testJailer(t *testing.T, jailerConfig *proto.JailerConfig) {
174182
_, err = fcClient.StopVM(ctx, &proto.StopVMRequest{VMID: vmID})
175183
require.NoError(t, err)
176184

177-
_, err = os.Stat(filepath.Join(integtest.ShimBaseDir(), "default#"+vmID))
178-
assert.Error(t, err)
179-
assert.True(t, os.IsNotExist(err))
180-
181-
shimContents, err := os.ReadDir(integtest.ShimBaseDir())
182-
require.NoError(t, err)
183-
assert.Len(t, shimContents, 0)
185+
assertEmptyShimDir(t, "default", vmID)
184186
}
185187

186188
func TestJailerCPUSet_Isolated(t *testing.T) {
@@ -284,11 +286,5 @@ func testAttachBlockDevice(tb testing.TB, jailerConfig *proto.JailerConfig) {
284286
_, err = fcClient.StopVM(ctx, &proto.StopVMRequest{VMID: vmID})
285287
require.NoError(tb, err)
286288

287-
_, err = os.Stat(filepath.Join(integtest.ShimBaseDir(), "default#"+vmID))
288-
assert.Error(tb, err)
289-
assert.True(tb, os.IsNotExist(err))
290-
291-
shimContents, err := os.ReadDir(integtest.ShimBaseDir())
292-
require.NoError(tb, err)
293-
assert.Len(tb, shimContents, 0)
289+
assertEmptyShimDir(tb, "default", vmID)
294290
}

runtime/service_integ_test.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -612,9 +612,8 @@ func testMultipleExecs(
612612
if err != nil {
613613
return err
614614
}
615-
_, err = os.Stat(filepath.Join("/sys/fs/cgroup/cpu", cgroupPath))
616-
if err != nil {
617-
return err
615+
if !cgroupExists(cgroupPath) {
616+
return fmt.Errorf("failed to find %q", cgroupPath)
618617
}
619618

620619
ok, err := regexp.Match(".+/"+vmIDStr, []byte(cgroupPath))

0 commit comments

Comments
 (0)