diff options
author | Paweł Gronowski <pawel.gronowski@docker.com> | 2022-06-15 09:28:20 +0200 |
---|---|---|
committer | Paweł Gronowski <pawel.gronowski@docker.com> | 2022-06-24 11:54:25 +0200 |
commit | 56a20dbc19786633f605d3871f5242d8e0f1be5a (patch) | |
tree | 643532f01a56d1a491194fbcef31ba12432d4b1f /integration | |
parent | 9c4987ee6b236de5e8ec213f7872fb3b9ee1aece (diff) | |
download | docker-56a20dbc19786633f605d3871f5242d8e0f1be5a.tar.gz |
container/exec: Support ConsoleSize
Now client have the possibility to set the console size of the executed
process immediately at the creation. This makes a difference for example
when executing commands that output some kind of text user interface
which is bounded by the console dimensions.
Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
Diffstat (limited to 'integration')
-rw-r--r-- | integration/container/exec_linux_test.go | 34 | ||||
-rw-r--r-- | integration/container/run_linux_test.go | 2 | ||||
-rw-r--r-- | integration/internal/container/exec.go | 7 |
3 files changed, 41 insertions, 2 deletions
diff --git a/integration/container/exec_linux_test.go b/integration/container/exec_linux_test.go new file mode 100644 index 0000000000..812fdb5ea7 --- /dev/null +++ b/integration/container/exec_linux_test.go @@ -0,0 +1,34 @@ +package container // import "github.com/docker/docker/integration/container" + +import ( + "context" + "strings" + "testing" + + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/versions" + "github.com/docker/docker/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"), "skip test from new feature") + + defer setupTest(t)() + client := testEnv.APIClient() + ctx := context.Background() + + cID := container.Run(ctx, t, client, container.WithImage("busybox")) + + result, err := container.Exec(ctx, client, cID, []string{"stty", "size"}, + func(ec *types.ExecConfig) { + ec.Tty = true + ec.ConsoleSize = &[2]uint{57, 123} + }, + ) + + assert.NilError(t, err) + assert.Equal(t, strings.TrimSpace(result.Stdout()), "57 123") +} diff --git a/integration/container/run_linux_test.go b/integration/container/run_linux_test.go index bd1fc6e932..e0316dde3b 100644 --- a/integration/container/run_linux_test.go +++ b/integration/container/run_linux_test.go @@ -187,7 +187,7 @@ func TestPrivilegedHostDevices(t *testing.T) { } } -func TestConsoleSize(t *testing.T) { +func TestRunConsoleSize(t *testing.T) { skip.If(t, testEnv.DaemonInfo.OSType != "linux") skip.If(t, versions.LessThan(testEnv.DaemonAPIVersion(), "1.42"), "skip test from new feature") diff --git a/integration/internal/container/exec.go b/integration/internal/container/exec.go index dfd46a2436..98e2a6c481 100644 --- a/integration/internal/container/exec.go +++ b/integration/internal/container/exec.go @@ -35,13 +35,18 @@ func (res *ExecResult) Combined() string { // containing stdout, stderr, and exit code. Note: // - this is a synchronous operation; // - cmd stdin is closed. -func Exec(ctx context.Context, cli client.APIClient, id string, cmd []string) (ExecResult, error) { +func Exec(ctx context.Context, cli client.APIClient, id string, cmd []string, ops ...func(*types.ExecConfig)) (ExecResult, error) { // prepare exec execConfig := types.ExecConfig{ AttachStdout: true, AttachStderr: true, Cmd: cmd, } + + for _, op := range ops { + op(&execConfig) + } + cresp, err := cli.ContainerExecCreate(ctx, id, execConfig) if err != nil { return ExecResult{}, err |