| package container |
| |
| import ( |
| "context" |
| "io/ioutil" |
| "testing" |
| |
| "github.com/docker/docker/api/types" |
| "github.com/docker/docker/api/types/container" |
| "github.com/docker/docker/api/types/network" |
| "github.com/docker/docker/api/types/strslice" |
| "github.com/docker/docker/integration/util/request" |
| "github.com/stretchr/testify/require" |
| ) |
| |
| func TestExec(t *testing.T) { |
| defer setupTest(t)() |
| ctx := context.Background() |
| client := request.NewAPIClient(t) |
| |
| container, err := client.ContainerCreate(ctx, |
| &container.Config{ |
| Image: "busybox", |
| Tty: true, |
| WorkingDir: "/root", |
| Cmd: strslice.StrSlice([]string{"top"}), |
| }, |
| &container.HostConfig{}, |
| &network.NetworkingConfig{}, |
| "foo", |
| ) |
| require.NoError(t, err) |
| err = client.ContainerStart(ctx, container.ID, types.ContainerStartOptions{}) |
| require.NoError(t, err) |
| |
| id, err := client.ContainerExecCreate(ctx, container.ID, |
| types.ExecConfig{ |
| WorkingDir: "/tmp", |
| Env: strslice.StrSlice([]string{"FOO=BAR"}), |
| AttachStdout: true, |
| Cmd: strslice.StrSlice([]string{"sh", "-c", "env"}), |
| }, |
| ) |
| require.NoError(t, err) |
| |
| resp, err := client.ContainerExecAttach(ctx, id.ID, |
| types.ExecStartCheck{ |
| Detach: false, |
| Tty: false, |
| }, |
| ) |
| require.NoError(t, err) |
| defer resp.Close() |
| r, err := ioutil.ReadAll(resp.Reader) |
| require.NoError(t, err) |
| out := string(r) |
| require.NoError(t, err) |
| require.Contains(t, out, "PWD=/tmp", "exec command not running in expected /tmp working directory") |
| require.Contains(t, out, "FOO=BAR", "exec command not running with expected environment variable FOO") |
| } |