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")
}
