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") }