docker_cli_events_unix_test.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. // +build !windows
  2. package main
  3. import (
  4. "bufio"
  5. "fmt"
  6. "io/ioutil"
  7. "os"
  8. "os/exec"
  9. "unicode"
  10. "github.com/go-check/check"
  11. "github.com/kr/pty"
  12. )
  13. // #5979
  14. func (s *DockerSuite) TestEventsRedirectStdout(c *check.C) {
  15. since := daemonTime(c).Unix()
  16. dockerCmd(c, "run", "busybox", "true")
  17. file, err := ioutil.TempFile("", "")
  18. if err != nil {
  19. c.Fatalf("could not create temp file: %v", err)
  20. }
  21. defer os.Remove(file.Name())
  22. command := fmt.Sprintf("%s events --since=%d --until=%d > %s", dockerBinary, since, daemonTime(c).Unix(), file.Name())
  23. _, tty, err := pty.Open()
  24. if err != nil {
  25. c.Fatalf("Could not open pty: %v", err)
  26. }
  27. cmd := exec.Command("sh", "-c", command)
  28. cmd.Stdin = tty
  29. cmd.Stdout = tty
  30. cmd.Stderr = tty
  31. if err := cmd.Run(); err != nil {
  32. c.Fatalf("run err for command %q: %v", command, err)
  33. }
  34. scanner := bufio.NewScanner(file)
  35. for scanner.Scan() {
  36. for _, ch := range scanner.Text() {
  37. if unicode.IsControl(ch) {
  38. c.Fatalf("found control character %v", []byte(string(ch)))
  39. }
  40. }
  41. }
  42. if err := scanner.Err(); err != nil {
  43. c.Fatalf("Scan err for command %q: %v", command, err)
  44. }
  45. }