docker_api_events_test.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. package main
  2. import (
  3. "encoding/json"
  4. "io"
  5. "net/http"
  6. "net/url"
  7. "strconv"
  8. "strings"
  9. "time"
  10. "github.com/docker/docker/pkg/integration/checker"
  11. "github.com/docker/docker/pkg/jsonmessage"
  12. "github.com/go-check/check"
  13. )
  14. func (s *DockerSuite) TestEventsApiEmptyOutput(c *check.C) {
  15. type apiResp struct {
  16. resp *http.Response
  17. err error
  18. }
  19. chResp := make(chan *apiResp)
  20. go func() {
  21. resp, body, err := sockRequestRaw("GET", "/events", nil, "")
  22. body.Close()
  23. chResp <- &apiResp{resp, err}
  24. }()
  25. select {
  26. case r := <-chResp:
  27. c.Assert(r.err, checker.IsNil)
  28. c.Assert(r.resp.StatusCode, checker.Equals, http.StatusOK)
  29. case <-time.After(3 * time.Second):
  30. c.Fatal("timeout waiting for events api to respond, should have responded immediately")
  31. }
  32. }
  33. func (s *DockerSuite) TestEventsApiBackwardsCompatible(c *check.C) {
  34. since := daemonTime(c).Unix()
  35. ts := strconv.FormatInt(since, 10)
  36. out, _ := runSleepingContainer(c, "--name=foo", "-d")
  37. containerID := strings.TrimSpace(out)
  38. c.Assert(waitRun(containerID), checker.IsNil)
  39. q := url.Values{}
  40. q.Set("since", ts)
  41. _, body, err := sockRequestRaw("GET", "/events?"+q.Encode(), nil, "")
  42. c.Assert(err, checker.IsNil)
  43. defer body.Close()
  44. dec := json.NewDecoder(body)
  45. var containerCreateEvent *jsonmessage.JSONMessage
  46. for {
  47. var event jsonmessage.JSONMessage
  48. if err := dec.Decode(&event); err != nil {
  49. if err == io.EOF {
  50. break
  51. }
  52. c.Fatal(err)
  53. }
  54. if event.Status == "create" && event.ID == containerID {
  55. containerCreateEvent = &event
  56. break
  57. }
  58. }
  59. c.Assert(containerCreateEvent, checker.Not(checker.IsNil))
  60. c.Assert(containerCreateEvent.Status, checker.Equals, "create")
  61. c.Assert(containerCreateEvent.ID, checker.Equals, containerID)
  62. c.Assert(containerCreateEvent.From, checker.Equals, "busybox")
  63. }