exec_test.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package container // import "github.com/docker/docker/integration/container"
  2. import (
  3. "context"
  4. "io/ioutil"
  5. "testing"
  6. "github.com/docker/docker/api/types"
  7. "github.com/docker/docker/api/types/strslice"
  8. "github.com/docker/docker/api/types/versions"
  9. "github.com/docker/docker/integration/internal/container"
  10. "github.com/docker/docker/internal/test/request"
  11. "github.com/gotestyourself/gotestyourself/assert"
  12. is "github.com/gotestyourself/gotestyourself/assert/cmp"
  13. "github.com/gotestyourself/gotestyourself/skip"
  14. )
  15. func TestExec(t *testing.T) {
  16. skip.If(t, versions.LessThan(testEnv.DaemonAPIVersion(), "1.35"), "broken in earlier versions")
  17. defer setupTest(t)()
  18. ctx := context.Background()
  19. client := request.NewAPIClient(t)
  20. cID := container.Run(t, ctx, client, container.WithTty(true), container.WithWorkingDir("/root"))
  21. id, err := client.ContainerExecCreate(ctx, cID,
  22. types.ExecConfig{
  23. WorkingDir: "/tmp",
  24. Env: strslice.StrSlice([]string{"FOO=BAR"}),
  25. AttachStdout: true,
  26. Cmd: strslice.StrSlice([]string{"sh", "-c", "env"}),
  27. },
  28. )
  29. assert.NilError(t, err)
  30. resp, err := client.ContainerExecAttach(ctx, id.ID,
  31. types.ExecStartCheck{
  32. Detach: false,
  33. Tty: false,
  34. },
  35. )
  36. assert.NilError(t, err)
  37. defer resp.Close()
  38. r, err := ioutil.ReadAll(resp.Reader)
  39. assert.NilError(t, err)
  40. out := string(r)
  41. assert.NilError(t, err)
  42. assert.Assert(t, is.Contains(out, "PWD=/tmp"), "exec command not running in expected /tmp working directory")
  43. assert.Assert(t, is.Contains(out, "FOO=BAR"), "exec command not running with expected environment variable FOO")
  44. }