github.com/OpenFlowLabs/moby@v17.12.1-ce-rc2+incompatible/integration-cli/docker_api_events_test.go (about)

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