From d5cbde514f4887f5655096bce05faa7b91068038 Mon Sep 17 00:00:00 2001 From: Yong Tang Date: Thu, 1 Feb 2018 16:35:13 +0000 Subject: [PATCH] Migrate TestAPIStatsContainerGetMemoryLimit from integration-cli to api tests This fix migrates TestAPIStatsContainerGetMemoryLimit from integration-cli to api test. Signed-off-by: Yong Tang --- integration-cli/docker_api_stats_unix_test.go | 42 -------------- integration/container/stats_test.go | 56 +++++++++++++++++++ 2 files changed, 56 insertions(+), 42 deletions(-) delete mode 100644 integration-cli/docker_api_stats_unix_test.go create mode 100644 integration/container/stats_test.go diff --git a/integration-cli/docker_api_stats_unix_test.go b/integration-cli/docker_api_stats_unix_test.go deleted file mode 100644 index 627d3359c4..0000000000 --- a/integration-cli/docker_api_stats_unix_test.go +++ /dev/null @@ -1,42 +0,0 @@ -// +build !windows - -package main - -import ( - "encoding/json" - "fmt" - "net/http" - - "github.com/docker/docker/api/types" - "github.com/docker/docker/integration-cli/checker" - "github.com/docker/docker/integration-cli/request" - "github.com/go-check/check" -) - -func (s *DockerSuite) TestAPIStatsContainerGetMemoryLimit(c *check.C) { - testRequires(c, DaemonIsLinux, memoryLimitSupport) - - resp, body, err := request.Get("/info", request.JSON) - c.Assert(err, checker.IsNil) - c.Assert(resp.StatusCode, checker.Equals, http.StatusOK) - var info types.Info - err = json.NewDecoder(body).Decode(&info) - c.Assert(err, checker.IsNil) - body.Close() - - // don't set a memory limit, the memory limit should be system memory - conName := "foo" - dockerCmd(c, "run", "-d", "--name", conName, "busybox", "top") - c.Assert(waitRun(conName), checker.IsNil) - - resp, body, err = request.Get(fmt.Sprintf("/containers/%s/stats?stream=false", conName)) - c.Assert(err, checker.IsNil) - c.Assert(resp.StatusCode, checker.Equals, http.StatusOK) - c.Assert(resp.Header.Get("Content-Type"), checker.Equals, "application/json") - - var v *types.Stats - err = json.NewDecoder(body).Decode(&v) - c.Assert(err, checker.IsNil) - body.Close() - c.Assert(fmt.Sprintf("%d", v.MemoryStats.Limit), checker.Equals, fmt.Sprintf("%d", info.MemTotal)) -} diff --git a/integration/container/stats_test.go b/integration/container/stats_test.go new file mode 100644 index 0000000000..bacbaf0c3d --- /dev/null +++ b/integration/container/stats_test.go @@ -0,0 +1,56 @@ +package container + +import ( + "context" + "encoding/json" + "io" + "testing" + "time" + + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" + "github.com/docker/docker/api/types/network" + "github.com/docker/docker/integration/util/request" + "github.com/gotestyourself/gotestyourself/poll" + "github.com/gotestyourself/gotestyourself/skip" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestStats(t *testing.T) { + skip.If(t, !testEnv.DaemonInfo.MemoryLimit) + + defer setupTest(t)() + client := request.NewAPIClient(t) + ctx := context.Background() + + info, err := client.Info(ctx) + require.NoError(t, err) + + c, err := client.ContainerCreate(ctx, + &container.Config{ + Cmd: []string{"top"}, + Image: "busybox", + }, + &container.HostConfig{}, + &network.NetworkingConfig{}, + "", + ) + require.NoError(t, err) + + err = client.ContainerStart(ctx, c.ID, types.ContainerStartOptions{}) + require.NoError(t, err) + + poll.WaitOn(t, containerIsInState(ctx, client, c.ID, "running"), poll.WithDelay(100*time.Millisecond)) + + resp, err := client.ContainerStats(context.Background(), c.ID, false) + require.NoError(t, err) + defer resp.Body.Close() + + var v *types.Stats + err = json.NewDecoder(resp.Body).Decode(&v) + require.NoError(t, err) + assert.Equal(t, int64(v.MemoryStats.Limit), info.MemTotal) + err = json.NewDecoder(resp.Body).Decode(&v) + require.Error(t, err, io.EOF) +}