summaryrefslogtreecommitdiff
path: root/integration
diff options
context:
space:
mode:
authorPaweł Gronowski <pawel.gronowski@docker.com>2022-06-15 09:28:20 +0200
committerPaweł Gronowski <pawel.gronowski@docker.com>2022-06-24 11:54:25 +0200
commit56a20dbc19786633f605d3871f5242d8e0f1be5a (patch)
tree643532f01a56d1a491194fbcef31ba12432d4b1f /integration
parent9c4987ee6b236de5e8ec213f7872fb3b9ee1aece (diff)
downloaddocker-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.go34
-rw-r--r--integration/container/run_linux_test.go2
-rw-r--r--integration/internal/container/exec.go7
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