Kaynağa Gözat

integration/container: use subtests for TestAttach

- Combine TestAttachWithTTY and TestAttachWithoutTTy to a single test using sub-tests
- Set up and tear-down the test-environment once
- Remove redundant client.ContainerRemove, as it's taken care of by testEnv.Clean()
- Run both tests in parallel

      make TEST_FILTER=TestAttach DOCKER_GRAPHDRIVER=overlay2 TESTDEBUG=1 test-integration
      Loaded image: busybox:latest
      Loaded image: busybox:glibc
      Loaded image: debian:bullseye-slim
      Loaded image: hello-world:latest
      Loaded image: arm32v7/hello-world:latest
      INFO: Testing against a local daemon
      === RUN   TestAttach
      === RUN   TestAttach/without_TTY
      === PAUSE TestAttach/without_TTY
      === RUN   TestAttach/with_TTY
      === PAUSE TestAttach/with_TTY
      === CONT  TestAttach/without_TTY
      === CONT  TestAttach/with_TTY
      --- PASS: TestAttach (0.00s)
          --- PASS: TestAttach/without_TTY (0.03s)
          --- PASS: TestAttach/with_TTY (0.03s)
      PASS

      DONE 3 tests in 1.347s

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Sebastiaan van Stijn 2 yıl önce
ebeveyn
işleme
79c72390b9
1 değiştirilmiş dosya ile 43 ekleme ve 34 silme
  1. 43 34
      integration/container/attach_test.go

+ 43 - 34
integration/container/attach_test.go

@@ -8,43 +8,52 @@ import (
 	"github.com/docker/docker/api/types/container"
 	"github.com/docker/docker/api/types/network"
 	"gotest.tools/v3/assert"
+	is "gotest.tools/v3/assert/cmp"
 )
 
-func TestAttachWithTTY(t *testing.T) {
-	testAttach(t, true, types.MediaTypeRawStream)
-}
-
-func TestAttachWithoutTTy(t *testing.T) {
-	testAttach(t, false, types.MediaTypeMultiplexedStream)
-}
-
-func testAttach(t *testing.T, tty bool, expected string) {
-	defer setupTest(t)()
+func TestAttach(t *testing.T) {
+	t.Cleanup(setupTest(t))
 	client := testEnv.APIClient()
 
-	resp, err := client.ContainerCreate(context.Background(),
-		&container.Config{
-			Image: "busybox",
-			Cmd:   []string{"echo", "hello"},
-			Tty:   tty,
+	tests := []struct {
+		doc               string
+		tty               bool
+		expectedMediaType string
+	}{
+		{
+			doc:               "without TTY",
+			expectedMediaType: types.MediaTypeMultiplexedStream,
 		},
-		&container.HostConfig{},
-		&network.NetworkingConfig{},
-		nil,
-		"",
-	)
-	assert.NilError(t, err)
-	container := resp.ID
-	defer client.ContainerRemove(context.Background(), container, types.ContainerRemoveOptions{
-		Force: true,
-	})
-
-	attach, err := client.ContainerAttach(context.Background(), container, types.ContainerAttachOptions{
-		Stdout: true,
-		Stderr: true,
-	})
-	assert.NilError(t, err)
-	mediaType, ok := attach.MediaType()
-	assert.Check(t, ok)
-	assert.Check(t, mediaType == expected)
+		{
+			doc:               "with TTY",
+			tty:               true,
+			expectedMediaType: types.MediaTypeRawStream,
+		},
+	}
+	for _, tc := range tests {
+		tc := tc
+		t.Run(tc.doc, func(t *testing.T) {
+			t.Parallel()
+			resp, err := client.ContainerCreate(context.Background(),
+				&container.Config{
+					Image: "busybox",
+					Cmd:   []string{"echo", "hello"},
+					Tty:   tc.tty,
+				},
+				&container.HostConfig{},
+				&network.NetworkingConfig{},
+				nil,
+				"",
+			)
+			assert.NilError(t, err)
+			attach, err := client.ContainerAttach(context.Background(), resp.ID, types.ContainerAttachOptions{
+				Stdout: true,
+				Stderr: true,
+			})
+			assert.NilError(t, err)
+			mediaType, ok := attach.MediaType()
+			assert.Check(t, ok)
+			assert.Check(t, is.Equal(mediaType, tc.expectedMediaType))
+		})
+	}
 }