| package container | |
| import ( | |
| "strings" | |
| "testing" | |
| "github.com/moby/moby/client" | |
| "github.com/moby/moby/client/pkg/versions" | |
| "github.com/moby/moby/v2/integration/internal/container" | |
| "gotest.tools/v3/assert" | |
| "gotest.tools/v3/skip" | |
| ) | |
| func TestExecConsoleSize(t *testing.T) { | |
| skip.If(t, testEnv.DaemonInfo.OSType != "linux") | |
| skip.If(t, versions.LessThan(testEnv.DaemonAPIVersion(), "1.42"), "requires API v1.42") | |
| ctx := setupTest(t) | |
| apiClient := testEnv.APIClient() | |
| cID := container.Run(ctx, t, apiClient, container.WithImage("busybox")) | |
| result, err := container.Exec(ctx, apiClient, cID, []string{"stty", "size"}, | |
| func(ec *client.ExecCreateOptions) { | |
| ec.TTY = true | |
| ec.ConsoleSize = client.ConsoleSize{ | |
| Height: 57, | |
| Width: 123, | |
| } | |
| }, | |
| ) | |
| assert.NilError(t, err) | |
| assert.Equal(t, strings.TrimSpace(result.Stdout()), "57 123") | |
| } | |
| func TestFailedExecExitCode(t *testing.T) { | |
| testCases := []struct { | |
| doc string | |
| command []string | |
| expectedExitCode int | |
| }{ | |
| { | |
| doc: "executable not found", | |
| command: []string{"nonexistent"}, | |
| expectedExitCode: 127, | |
| }, | |
| { | |
| doc: "executable cannot be invoked", | |
| command: []string{"/etc"}, | |
| expectedExitCode: 126, | |
| }, | |
| } | |
| for _, tc := range testCases { | |
| t.Run(tc.doc, func(t *testing.T) { | |
| ctx := setupTest(t) | |
| apiClient := testEnv.APIClient() | |
| cID := container.Run(ctx, t, apiClient) | |
| result, err := container.Exec(ctx, apiClient, cID, tc.command) | |
| assert.NilError(t, err) | |
| assert.Equal(t, result.ExitCode, tc.expectedExitCode) | |
| }) | |
| } | |
| } |