From 8ba8189ee66fa36f7adb1f2bab6cc4c35ebfd8cd Mon Sep 17 00:00:00 2001 From: Michael Holzheu Date: Wed, 4 May 2016 08:44:03 +0000 Subject: [PATCH] TestApiStatsContainerGetMemoryLimit: Add cgroup memory test Currently on kernels booted without the "cgroup_enable=memory" kernel parameter the testcase TestApiStatsContainerGetMemoryLimit fails with: FAIL: docker_api_stats_test.go:231: TestApiStatsContainerGetMemoryLimit.pN52_github_com_docker_docker_integration_cli.DockerSuite docker_api_stats_test.go:256: c.Assert(fmt.Sprintf("%d", v.MemoryStats.Limit), checker.Equals, fmt.Sprintf("%d", info.MemTotal)) ... obtained string = "0" ... expected string = "33759145984" Fix this and skip the testcase if the kernel does not support cgroup memory limit. In that case the output would be: SKIP: docker_api_stats_test.go:231: TestApiStatsContainerGetMemoryLimit.pN52_github_com_docker_docker_integration_cli.DockerSuite (Test requires an environment that supports cgroup memory limit.) ChangeLog: ---------- v4: Move TestApiStatsContainerGetMemoryLimit to docker_api_stats_unix_test.go v3: Use existing "memoryLimitSupport" from requirements_unix.go v2: Move check to requirements.go Fixes #22477 Signed-off-by: Michael Holzheu --- integration-cli/docker_api_stats_test.go | 28 ------------- integration-cli/docker_api_stats_unix_test.go | 41 +++++++++++++++++++ 2 files changed, 41 insertions(+), 28 deletions(-) create mode 100644 integration-cli/docker_api_stats_unix_test.go diff --git a/integration-cli/docker_api_stats_test.go b/integration-cli/docker_api_stats_test.go index 0e2aa0083a..c4a72597bf 100644 --- a/integration-cli/docker_api_stats_test.go +++ b/integration-cli/docker_api_stats_test.go @@ -228,34 +228,6 @@ func (s *DockerSuite) TestApiStatsContainerNotFound(c *check.C) { c.Assert(status, checker.Equals, http.StatusNotFound) } -func (s *DockerSuite) TestApiStatsContainerGetMemoryLimit(c *check.C) { - testRequires(c, DaemonIsLinux) - - resp, body, err := sockRequestRaw("GET", "/info", nil, "application/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 = sockRequestRaw("GET", fmt.Sprintf("/containers/%s/stats?stream=false", conName), nil, "") - 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)) -} - func (s *DockerSuite) TestApiStatsNoStreamConnectedContainers(c *check.C) { testRequires(c, DaemonIsLinux) diff --git a/integration-cli/docker_api_stats_unix_test.go b/integration-cli/docker_api_stats_unix_test.go new file mode 100644 index 0000000000..5409a0dbca --- /dev/null +++ b/integration-cli/docker_api_stats_unix_test.go @@ -0,0 +1,41 @@ +// +build !windows + +package main + +import ( + "encoding/json" + "fmt" + "net/http" + + "github.com/docker/docker/pkg/integration/checker" + "github.com/docker/engine-api/types" + "github.com/go-check/check" +) + +func (s *DockerSuite) TestApiStatsContainerGetMemoryLimit(c *check.C) { + testRequires(c, DaemonIsLinux, memoryLimitSupport) + + resp, body, err := sockRequestRaw("GET", "/info", nil, "application/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 = sockRequestRaw("GET", fmt.Sprintf("/containers/%s/stats?stream=false", conName), nil, "") + 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)) +}