123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- //go:build linux
- package daemon
- import (
- "context"
- "testing"
- "github.com/docker/docker/container"
- "github.com/docker/docker/libcontainerd/types"
- "gotest.tools/v3/assert"
- )
- // This test simply verify that when a wrong ID used, a specific error should be returned for exec resize.
- func TestExecResizeNoSuchExec(t *testing.T) {
- n := "TestExecResize"
- d := &Daemon{
- execCommands: container.NewExecStore(),
- }
- c := &container.Container{
- ExecCommands: container.NewExecStore(),
- }
- ec := &container.ExecConfig{
- ID: n,
- Container: c,
- }
- d.registerExecCommand(c, ec)
- err := d.ContainerExecResize("nil", 24, 8)
- assert.ErrorContains(t, err, "No such exec instance")
- }
- type execResizeMockProcess struct {
- types.Process
- Width, Height int
- }
- func (p *execResizeMockProcess) Resize(ctx context.Context, width, height uint32) error {
- p.Width = int(width)
- p.Height = int(height)
- return nil
- }
- // This test is to make sure that when exec context is ready, resize should call ResizeTerminal via containerd client.
- func TestExecResize(t *testing.T) {
- n := "TestExecResize"
- width := 24
- height := 8
- mp := &execResizeMockProcess{}
- d := &Daemon{
- execCommands: container.NewExecStore(),
- containers: container.NewMemoryStore(),
- }
- c := &container.Container{
- ID: n,
- ExecCommands: container.NewExecStore(),
- State: &container.State{Running: true},
- }
- ec := &container.ExecConfig{
- ID: n,
- Container: c,
- Process: mp,
- Started: make(chan struct{}),
- }
- close(ec.Started)
- d.containers.Add(n, c)
- d.registerExecCommand(c, ec)
- err := d.ContainerExecResize(n, height, width)
- assert.NilError(t, err)
- assert.Equal(t, mp.Width, width)
- assert.Equal(t, mp.Height, height)
- }
- // This test is to make sure that when exec context is not ready, a timeout error should happen.
- // TODO: the expect running time for this test is 10s, which would be too long for unit test.
- func TestExecResizeTimeout(t *testing.T) {
- n := "TestExecResize"
- width := 24
- height := 8
- mp := &execResizeMockProcess{}
- d := &Daemon{
- execCommands: container.NewExecStore(),
- containers: container.NewMemoryStore(),
- }
- c := &container.Container{
- ID: n,
- ExecCommands: container.NewExecStore(),
- State: &container.State{Running: true},
- }
- ec := &container.ExecConfig{
- ID: n,
- Container: c,
- Process: mp,
- Started: make(chan struct{}),
- }
- d.containers.Add(n, c)
- d.registerExecCommand(c, ec)
- err := d.ContainerExecResize(n, height, width)
- assert.ErrorContains(t, err, "timeout waiting for exec session ready")
- }
|