integration-cli/docker_api_events_test.go
d0a299c0
 package main
 
 import (
72f1881d
 	"encoding/json"
 	"io"
d0a299c0
 	"net/http"
72f1881d
 	"net/url"
 	"strconv"
 	"strings"
d0a299c0
 	"time"
 
33968e6c
 	"github.com/docker/docker/integration-cli/checker"
d69d4799
 	"github.com/docker/docker/integration-cli/request"
72f1881d
 	"github.com/docker/docker/pkg/jsonmessage"
d0a299c0
 	"github.com/go-check/check"
 )
 
7fb7a477
 func (s *DockerSuite) TestEventsAPIEmptyOutput(c *check.C) {
d0a299c0
 	type apiResp struct {
 		resp *http.Response
 		err  error
 	}
 	chResp := make(chan *apiResp)
 	go func() {
b11ba123
 		resp, body, err := request.Get("/events")
d0a299c0
 		body.Close()
 		chResp <- &apiResp{resp, err}
 	}()
 
 	select {
 	case r := <-chResp:
176d8c5a
 		c.Assert(r.err, checker.IsNil)
 		c.Assert(r.resp.StatusCode, checker.Equals, http.StatusOK)
d0a299c0
 	case <-time.After(3 * time.Second):
 		c.Fatal("timeout waiting for events api to respond, should have responded immediately")
 	}
 }
72f1881d
 
7fb7a477
 func (s *DockerSuite) TestEventsAPIBackwardsCompatible(c *check.C) {
72f1881d
 	since := daemonTime(c).Unix()
 	ts := strconv.FormatInt(since, 10)
 
a899aa67
 	out := runSleepingContainer(c, "--name=foo", "-d")
72f1881d
 	containerID := strings.TrimSpace(out)
 	c.Assert(waitRun(containerID), checker.IsNil)
 
 	q := url.Values{}
 	q.Set("since", ts)
 
b11ba123
 	_, body, err := request.Get("/events?" + q.Encode())
72f1881d
 	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")
 }