瀏覽代碼

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 <yong.tang.github@outlook.com>
Yong Tang 7 年之前
父節點
當前提交
8f800c9415
共有 2 個文件被更改,包括 102 次插入0 次删除
  1. 35 0
      integration/container/main_test.go
  2. 67 0
      integration/container/resize_test.go

+ 35 - 0
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
+}

+ 67 - 0
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")
+}