package main import ( "encoding/json" "io" "net/http" "net/url" "strconv" "strings" "time" "github.com/docker/docker/integration-cli/checker" "github.com/docker/docker/integration-cli/request" "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 := request.Get("/events") 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 := runSleepingContainer(c, "--name=foo", "-d") containerID := strings.TrimSpace(out) c.Assert(waitRun(containerID), checker.IsNil) q := url.Values{} q.Set("since", ts) _, body, err := request.Get("/events?" + q.Encode()) 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") }