diff --git a/container_linux_test.go b/container_linux_test.go index 0fc439526..4eba6be8f 100644 --- a/container_linux_test.go +++ b/container_linux_test.go @@ -17,8 +17,10 @@ import ( "github.com/containerd/cgroups" "github.com/containerd/containerd/containers" + "github.com/containerd/containerd/errdefs" "github.com/containerd/containerd/linux/runcopts" specs "github.com/opencontainers/runtime-spec/specs-go" + "github.com/pkg/errors" "golang.org/x/sys/unix" ) @@ -1082,3 +1084,117 @@ func testUserNamespaces(t *testing.T, readonlyRootFS bool) { t.Errorf("expected status 7 from delete but received %d", ec) } } + +func TestTaskResize(t *testing.T) { + t.Parallel() + + client, err := newClient(t, address) + if err != nil { + t.Fatal(err) + } + defer client.Close() + + var ( + image Image + ctx, cancel = testContext() + id = t.Name() + ) + defer cancel() + + if runtime.GOOS != "windows" { + image, err = client.GetImage(ctx, testImage) + if err != nil { + t.Error(err) + return + } + } + container, err := client.NewContainer(ctx, id, WithNewSpec(withImageConfig(image), withExitStatus(7)), withNewSnapshot(id, image)) + if err != nil { + t.Error(err) + return + } + defer container.Delete(ctx, WithSnapshotCleanup) + + task, err := container.NewTask(ctx, empty()) + if err != nil { + t.Error(err) + return + } + defer task.Delete(ctx) + + statusC, err := task.Wait(ctx) + if err != nil { + t.Error(err) + return + } + if err := task.Resize(ctx, 32, 32); err != nil { + t.Error(err) + return + } + task.Kill(ctx, syscall.SIGKILL) + <-statusC +} + +func TestContainerImage(t *testing.T) { + t.Parallel() + + ctx, cancel := testContext() + defer cancel() + id := t.Name() + + client, err := newClient(t, address) + if err != nil { + t.Fatal(err) + } + defer client.Close() + + image, err := client.GetImage(ctx, testImage) + if err != nil { + t.Error(err) + return + } + + container, err := client.NewContainer(ctx, id, WithNewSpec(), WithImage(image)) + if err != nil { + t.Error(err) + return + } + defer container.Delete(ctx) + + i, err := container.Image(ctx) + if err != nil { + t.Fatal(err) + } + if i.Name() != image.Name() { + t.Fatalf("expected container image name %s but received %s", image.Name(), i.Name()) + } +} + +func TestContainerNoImage(t *testing.T) { + t.Parallel() + + ctx, cancel := testContext() + defer cancel() + id := t.Name() + + client, err := newClient(t, address) + if err != nil { + t.Fatal(err) + } + defer client.Close() + + container, err := client.NewContainer(ctx, id, WithNewSpec()) + if err != nil { + t.Error(err) + return + } + defer container.Delete(ctx) + + _, err = container.Image(ctx) + if err == nil { + t.Fatal("error should not be nil when container is created without an image") + } + if errors.Cause(err) != errdefs.ErrNotFound { + t.Fatalf("expected error to be %s but received %s", errdefs.ErrNotFound, err) + } +} diff --git a/container_test.go b/container_test.go index 79ea357d4..b0ce42def 100644 --- a/container_test.go +++ b/container_test.go @@ -1461,3 +1461,70 @@ func TestContainerUpdate(t *testing.T) { t.Errorf("hostname %q != %q", spec.Hostname, hostname) } } + +func TestContainerInfo(t *testing.T) { + t.Parallel() + + ctx, cancel := testContext() + defer cancel() + id := t.Name() + + client, err := newClient(t, address) + if err != nil { + t.Fatal(err) + } + defer client.Close() + + container, err := client.NewContainer(ctx, id, WithNewSpec()) + if err != nil { + t.Error(err) + return + } + defer container.Delete(ctx) + + info, err := container.Info(ctx) + if err != nil { + t.Fatal(err) + } + if info.ID != container.ID() { + t.Fatalf("info.ID=%s != container.ID()=%s", info.ID, container.ID()) + } +} + +func TestContainerLabels(t *testing.T) { + t.Parallel() + + ctx, cancel := testContext() + defer cancel() + id := t.Name() + + client, err := newClient(t, address) + if err != nil { + t.Fatal(err) + } + defer client.Close() + + container, err := client.NewContainer(ctx, id, WithNewSpec(), WithContainerLabels(map[string]string{ + "test": "yes", + })) + if err != nil { + t.Error(err) + return + } + defer container.Delete(ctx) + + labels, err := container.Labels(ctx) + if err != nil { + t.Fatal(err) + } + if labels["test"] != "yes" { + t.Fatalf("expected label \"test\" to be \"yes\"") + } + labels["test"] = "no" + if labels, err = container.SetLabels(ctx, labels); err != nil { + t.Fatal(err) + } + if labels["test"] != "no" { + t.Fatalf("expected label \"test\" to be \"no\"") + } +}