From 8f800c941570ffcd087c920c37d3a368a5a19e6d Mon Sep 17 00:00:00 2001 From: Yong Tang Date: Thu, 1 Feb 2018 16:37:14 +0000 Subject: [PATCH] Migrate several resize tests from integration-cli to integration This fix migrates several resize tests from integration-cli to api tests. Signed-off-by: Yong Tang --- integration/container/main_test.go | 35 +++++++++++++++ integration/container/resize_test.go | 67 ++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 integration/container/resize_test.go diff --git a/integration/container/main_test.go b/integration/container/main_test.go index 9854004a10..37f6564759 100644 --- a/integration/container/main_test.go +++ b/integration/container/main_test.go @@ -1,11 +1,17 @@ package container import ( + "context" "fmt" "os" "testing" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" + "github.com/docker/docker/api/types/network" + "github.com/docker/docker/client" "github.com/docker/docker/internal/test/environment" + "github.com/stretchr/testify/require" ) var testEnv *environment.Execution @@ -31,3 +37,32 @@ func setupTest(t *testing.T) func() { environment.ProtectAll(t, testEnv) return func() { testEnv.Clean(t) } } + +type containerConstructor func(config *container.Config, hostConfig *container.HostConfig, networkingConfig *network.NetworkingConfig) + +func createSimpleContainer(ctx context.Context, t *testing.T, client client.APIClient, name string, f ...containerConstructor) string { + config := &container.Config{ + Cmd: []string{"top"}, + Image: "busybox", + } + hostConfig := &container.HostConfig{} + networkingConfig := &network.NetworkingConfig{} + + for _, fn := range f { + fn(config, hostConfig, networkingConfig) + } + + c, err := client.ContainerCreate(ctx, config, hostConfig, networkingConfig, name) + require.NoError(t, err) + + return c.ID +} + +func runSimpleContainer(ctx context.Context, t *testing.T, client client.APIClient, name string, f ...containerConstructor) string { + cID := createSimpleContainer(ctx, t, client, name, f...) + + err := client.ContainerStart(ctx, cID, types.ContainerStartOptions{}) + require.NoError(t, err) + + return cID +} diff --git a/integration/container/resize_test.go b/integration/container/resize_test.go new file mode 100644 index 0000000000..c1469d07db --- /dev/null +++ b/integration/container/resize_test.go @@ -0,0 +1,67 @@ +package container + +import ( + "context" + "net/http" + "testing" + "time" + + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" + "github.com/docker/docker/api/types/network" + req "github.com/docker/docker/integration-cli/request" + "github.com/docker/docker/integration/util/request" + "github.com/docker/docker/internal/testutil" + "github.com/gotestyourself/gotestyourself/poll" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestResize(t *testing.T) { + defer setupTest(t)() + client := request.NewAPIClient(t) + ctx := context.Background() + + cID := runSimpleContainer(ctx, t, client, "") + + poll.WaitOn(t, containerIsInState(ctx, client, cID, "running"), poll.WithDelay(100*time.Millisecond)) + + err := client.ContainerResize(ctx, cID, types.ResizeOptions{ + Height: 40, + Width: 40, + }) + require.NoError(t, err) +} + +func TestResizeWithInvalidSize(t *testing.T) { + defer setupTest(t)() + client := request.NewAPIClient(t) + ctx := context.Background() + + cID := runSimpleContainer(ctx, t, client, "") + + poll.WaitOn(t, containerIsInState(ctx, client, cID, "running"), poll.WithDelay(100*time.Millisecond)) + + endpoint := "/containers/" + cID + "/resize?h=foo&w=bar" + res, _, err := req.Post(endpoint) + require.NoError(t, err) + assert.Equal(t, res.StatusCode, http.StatusBadRequest) +} + +func TestResizeWhenContainerNotStarted(t *testing.T) { + defer setupTest(t)() + client := request.NewAPIClient(t) + ctx := context.Background() + + cID := runSimpleContainer(ctx, t, client, "", func(config *container.Config, hostConfig *container.HostConfig, networkingConfig *network.NetworkingConfig) { + config.Cmd = []string{"echo"} + }) + + poll.WaitOn(t, containerIsInState(ctx, client, cID, "exited"), poll.WithDelay(100*time.Millisecond)) + + err := client.ContainerResize(ctx, cID, types.ResizeOptions{ + Height: 40, + Width: 40, + }) + testutil.ErrorContains(t, err, "is not running") +}