From 8731888ec0bd93032490dfb3964ddbe9c723e208 Mon Sep 17 00:00:00 2001 From: Kazuyoshi Kato Date: Mon, 9 Nov 2020 13:47:53 -0800 Subject: [PATCH] Re-enable CRIU tests by not using overlayfs snapshotter While the issue hasn't been fixed in the kernel yet, we can workaround the issue by not using overlayfs snapshotter. The newly added step runs all tests that match /TestCheckpoint/. So, TestCRWithImagePath has been renamed to match the regexp. Fixes #3930. Signed-off-by: Kazuyoshi Kato --- .github/workflows/ci.yml | 16 +++++++++++ integration/client/client_test.go | 28 ++++++++++++++++--- .../client/container_checkpoint_test.go | 2 +- 3 files changed, 41 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f653399d2..a38c01519 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -322,6 +322,22 @@ jobs: sudo GOPATH=$GOPATH GOPROXY=$GOPROXY TEST_RUNTIME=$TEST_RUNTIME RUNC_FLAVOR=$RUNC_FLAVOR TESTFLAGS_PARALLEL=1 make integration EXTRA_TESTFLAGS=-no-criu working-directory: src/github.com/containerd/containerd + # CRIU wouldn't work with overlay snapshotter yet. + # See https://github.com/containerd/containerd/pull/4708#issuecomment-724322294. + - name: CRIU Integration + env: + GOPROXY: direct + TEST_RUNTIME: ${{ matrix.runtime }} + RUNC_FLAVOR: ${{ matrix.runc }} + # crun doesn't have "checkpoint" command. + if: ${{ matrix.runc == 'runc' }} + run: | + sudo GOPATH=$GOPATH GOPROXY=$GOPROXY \ + TEST_RUNTIME=$TEST_RUNTIME RUNC_FLAVOR=$RUNC_FLAVOR TESTFLAGS_PARALLEL=1 \ + TEST_SNAPSHOTTER=native \ + make integration EXTRA_TESTFLAGS='-run TestCheckpoint' + working-directory: src/github.com/containerd/containerd + - name: CRI Integration Test env: TEST_RUNTIME: ${{ matrix.runtime }} diff --git a/integration/client/client_test.go b/integration/client/client_test.go index 2ad73c001..ddb6889a5 100644 --- a/integration/client/client_test.go +++ b/integration/client/client_test.go @@ -50,6 +50,7 @@ var ( noCriu bool supportsCriu bool testNamespace = "testing" + testSnapshotter = DefaultSnapshotter ctrdStdioFilePath string ctrd = &daemon{} @@ -132,11 +133,30 @@ func TestMain(m *testing.M) { // allow comparison with containerd under test log.G(ctx).WithFields(logrus.Fields{ - "version": version.Version, - "revision": version.Revision, - "runtime": os.Getenv("TEST_RUNTIME"), + "version": version.Version, + "revision": version.Revision, + "runtime": os.Getenv("TEST_RUNTIME"), + "snapshotter": os.Getenv("TEST_SNAPSHOTTER"), }).Info("running tests against containerd") + snapshotter := DefaultSnapshotter + if ss := os.Getenv("TEST_SNAPSHOTTER"); ss != "" { + snapshotter = ss + } + + ns, ok := namespaces.Namespace(ctx) + if !ok { + fmt.Fprintln(os.Stderr, "error getting namespace") + os.Exit(1) + } + err = client.NamespaceService().SetLabel(ctx, ns, defaults.DefaultSnapshotterNSLabel, snapshotter) + if err != nil { + fmt.Fprintf(os.Stderr, "error setting %s's default snapshotter as %s: %s\n", ns, snapshotter, err) + os.Exit(1) + } + + testSnapshotter = snapshotter + // pull a seed image log.G(ctx).WithField("image", testImage).Info("start to pull seed image") if _, err = client.Pull(ctx, testImage, WithPullUnpack); err != nil { @@ -285,7 +305,7 @@ func TestImagePullWithDiscardContent(t *testing.T) { t.Fatalf("there is no layers in the target image(parent: %v)", img.Target()) } var ( - sn = client.SnapshotService("") + sn = client.SnapshotService(testSnapshotter) chain []digest.Digest ) for i, dgst := range layers { diff --git a/integration/client/container_checkpoint_test.go b/integration/client/container_checkpoint_test.go index 193ceaee7..930b6991b 100644 --- a/integration/client/container_checkpoint_test.go +++ b/integration/client/container_checkpoint_test.go @@ -414,7 +414,7 @@ func TestCheckpointLeaveRunning(t *testing.T) { <-statusC } -func TestCRWithImagePath(t *testing.T) { +func TestCheckpointRestoreWithImagePath(t *testing.T) { if !supportsCriu { t.Skip("system does not have criu installed") }