| package main |
| |
| import ( |
| "encoding/json" |
| "io" |
| "net/http" |
| "net/url" |
| "strconv" |
| "strings" |
| "time" |
| |
| "github.com/docker/docker/pkg/integration/checker" |
| "github.com/docker/docker/pkg/jsonmessage" |
| "github.com/go-check/check" |
| ) |
| |
| func (s *DockerSuite) TestEventsApiEmptyOutput(c *check.C) { |
| type apiResp struct { |
| resp *http.Response |
| err error |
| } |
| chResp := make(chan *apiResp) |
| go func() { |
| resp, body, err := sockRequestRaw("GET", "/events", nil, "") |
| body.Close() |
| chResp <- &apiResp{resp, err} |
| }() |
| |
| select { |
| case r := <-chResp: |
| c.Assert(r.err, checker.IsNil) |
| c.Assert(r.resp.StatusCode, checker.Equals, http.StatusOK) |
| case <-time.After(3 * time.Second): |
| c.Fatal("timeout waiting for events api to respond, should have responded immediately") |
| } |
| } |
| |
| func (s *DockerSuite) TestEventsApiBackwardsCompatible(c *check.C) { |
| since := daemonTime(c).Unix() |
| ts := strconv.FormatInt(since, 10) |
| |
| out, _ := dockerCmd(c, "run", "--name=foo", "-d", "busybox", "top") |
| containerID := strings.TrimSpace(out) |
| c.Assert(waitRun(containerID), checker.IsNil) |
| |
| q := url.Values{} |
| q.Set("since", ts) |
| |
| _, body, err := sockRequestRaw("GET", "/events?"+q.Encode(), nil, "") |
| c.Assert(err, checker.IsNil) |
| defer body.Close() |
| |
| dec := json.NewDecoder(body) |
| var containerCreateEvent *jsonmessage.JSONMessage |
| for { |
| var event jsonmessage.JSONMessage |
| if err := dec.Decode(&event); err != nil { |
| if err == io.EOF { |
| break |
| } |
| c.Fatal(err) |
| } |
| if event.Status == "create" && event.ID == containerID { |
| containerCreateEvent = &event |
| break |
| } |
| } |
| |
| c.Assert(containerCreateEvent, checker.Not(checker.IsNil)) |
| c.Assert(containerCreateEvent.Status, checker.Equals, "create") |
| c.Assert(containerCreateEvent.ID, checker.Equals, containerID) |
| c.Assert(containerCreateEvent.From, checker.Equals, "busybox") |
| } |