exec_test.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package container
  2. import (
  3. "context"
  4. "io/ioutil"
  5. "testing"
  6. "github.com/docker/docker/api/types"
  7. "github.com/docker/docker/api/types/container"
  8. "github.com/docker/docker/api/types/network"
  9. "github.com/docker/docker/api/types/strslice"
  10. "github.com/docker/docker/integration/util/request"
  11. "github.com/stretchr/testify/require"
  12. )
  13. func TestExec(t *testing.T) {
  14. defer setupTest(t)()
  15. ctx := context.Background()
  16. client := request.NewAPIClient(t)
  17. container, err := client.ContainerCreate(ctx,
  18. &container.Config{
  19. Image: "busybox",
  20. Tty: true,
  21. WorkingDir: "/root",
  22. Cmd: strslice.StrSlice([]string{"top"}),
  23. },
  24. &container.HostConfig{},
  25. &network.NetworkingConfig{},
  26. "foo",
  27. )
  28. require.NoError(t, err)
  29. err = client.ContainerStart(ctx, container.ID, types.ContainerStartOptions{})
  30. require.NoError(t, err)
  31. id, err := client.ContainerExecCreate(ctx, container.ID,
  32. types.ExecConfig{
  33. WorkingDir: "/tmp",
  34. Env: strslice.StrSlice([]string{"FOO=BAR"}),
  35. AttachStdout: true,
  36. Cmd: strslice.StrSlice([]string{"sh", "-c", "env"}),
  37. },
  38. )
  39. require.NoError(t, err)
  40. resp, err := client.ContainerExecAttach(ctx, id.ID,
  41. types.ExecStartCheck{
  42. Detach: false,
  43. Tty: false,
  44. },
  45. )
  46. require.NoError(t, err)
  47. defer resp.Close()
  48. r, err := ioutil.ReadAll(resp.Reader)
  49. require.NoError(t, err)
  50. out := string(r)
  51. require.NoError(t, err)
  52. require.Contains(t, out, "PWD=/tmp", "exec command not running in expected /tmp working directory")
  53. require.Contains(t, out, "FOO=BAR", "exec command not running with expected environment variable FOO")
  54. }