docker_api_events_test.go 1.8 KB

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