Cgroup integtaion tests should cover:
- docker can run sucessfully with these options
- these cgroup options are set to HostConfig as expected
- these cgroup options are really set to cgroup files as expected
- other cases (wrong value, combinations etc..)
Signed-off-by: Qiang Huang <h.huangqiang@huawei.com>
| ... | ... |
@@ -134,25 +134,24 @@ func (s *DockerSuite) TestRunAttachDetach(c *check.C) {
|
| 134 | 134 |
} |
| 135 | 135 |
} |
| 136 | 136 |
|
| 137 |
-// "test" should be printed |
|
| 138 |
-func (s *DockerSuite) TestRunEchoStdoutWithCPUQuota(c *check.C) {
|
|
| 137 |
+func (s *DockerSuite) TestRunWithCPUQuota(c *check.C) {
|
|
| 139 | 138 |
testRequires(c, cpuCfsQuota) |
| 140 | 139 |
|
| 141 |
- out, _, err := dockerCmdWithError("run", "--cpu-quota", "8000", "--name", "test", "busybox", "echo", "test")
|
|
| 142 |
- c.Assert(err, checker.IsNil, check.Commentf("failed to run container, output: %q", out))
|
|
| 143 |
- out = strings.TrimSpace(out) |
|
| 144 |
- c.Assert(out, checker.Equals, "test", check.Commentf("container should've printed 'test'"))
|
|
| 140 |
+ file := "/sys/fs/cgroup/cpu/cpu.cfs_quota_us" |
|
| 141 |
+ out, _ := dockerCmd(c, "run", "--cpu-quota", "8000", "--name", "test", "busybox", "cat", file) |
|
| 142 |
+ c.Assert(strings.TrimSpace(out), checker.Equals, "8000") |
|
| 145 | 143 |
|
| 146 |
- out, err = inspectField("test", "HostConfig.CpuQuota")
|
|
| 144 |
+ out, err := inspectField("test", "HostConfig.CpuQuota")
|
|
| 147 | 145 |
c.Assert(err, check.IsNil) |
| 148 |
- |
|
| 149 | 146 |
c.Assert(out, checker.Equals, "8000", check.Commentf("setting the CPU CFS quota failed"))
|
| 150 | 147 |
} |
| 151 | 148 |
|
| 152 | 149 |
func (s *DockerSuite) TestRunWithCpuPeriod(c *check.C) {
|
| 153 | 150 |
testRequires(c, cpuCfsPeriod) |
| 154 | 151 |
|
| 155 |
- dockerCmd(c, "run", "--cpu-period", "50000", "--name", "test", "busybox", "true") |
|
| 152 |
+ file := "/sys/fs/cgroup/cpu/cpu.cfs_period_us" |
|
| 153 |
+ out, _ := dockerCmd(c, "run", "--cpu-period", "50000", "--name", "test", "busybox", "cat", file) |
|
| 154 |
+ c.Assert(strings.TrimSpace(out), checker.Equals, "50000") |
|
| 156 | 155 |
|
| 157 | 156 |
out, err := inspectField("test", "HostConfig.CpuPeriod")
|
| 158 | 157 |
c.Assert(err, check.IsNil) |
| ... | ... |
@@ -163,8 +162,8 @@ func (s *DockerSuite) TestRunWithKernelMemory(c *check.C) {
|
| 163 | 163 |
testRequires(c, kernelMemorySupport) |
| 164 | 164 |
|
| 165 | 165 |
file := "/sys/fs/cgroup/memory/memory.kmem.limit_in_bytes" |
| 166 |
- out, _ := dockerCmd(c, "run", "--kernel-memory", "50M", "--name", "test1", "busybox", "cat", file) |
|
| 167 |
- c.Assert(out, checker.Contains, "52428800") |
|
| 166 |
+ stdout, _, _ := dockerCmdWithStdoutStderr(c, "run", "--kernel-memory", "50M", "--name", "test1", "busybox", "cat", file) |
|
| 167 |
+ c.Assert(strings.TrimSpace(stdout), checker.Equals, "52428800") |
|
| 168 | 168 |
|
| 169 | 169 |
out, err := inspectField("test1", "HostConfig.KernelMemory")
|
| 170 | 170 |
c.Assert(err, check.IsNil) |
| ... | ... |
@@ -176,11 +175,16 @@ func (s *DockerSuite) TestRunWithKernelMemory(c *check.C) {
|
| 176 | 176 |
c.Assert(out, checker.Contains, expected) |
| 177 | 177 |
} |
| 178 | 178 |
|
| 179 |
-// "test" should be printed |
|
| 180 |
-func (s *DockerSuite) TestRunEchoStdoutWitCPUShares(c *check.C) {
|
|
| 179 |
+func (s *DockerSuite) TestRunWithCPUShares(c *check.C) {
|
|
| 181 | 180 |
testRequires(c, cpuShare) |
| 182 |
- out, _ := dockerCmd(c, "run", "--cpu-shares", "1000", "busybox", "echo", "test") |
|
| 183 |
- c.Assert(out, checker.Equals, "test\n", check.Commentf("container should've printed 'test'"))
|
|
| 181 |
+ |
|
| 182 |
+ file := "/sys/fs/cgroup/cpu/cpu.shares" |
|
| 183 |
+ out, _ := dockerCmd(c, "run", "--cpu-shares", "1000", "--name", "test", "busybox", "cat", file) |
|
| 184 |
+ c.Assert(strings.TrimSpace(out), checker.Equals, "1000") |
|
| 185 |
+ |
|
| 186 |
+ out, err := inspectField("test", "HostConfig.CPUShares")
|
|
| 187 |
+ c.Assert(err, check.IsNil) |
|
| 188 |
+ c.Assert(out, check.Equals, "1000") |
|
| 184 | 189 |
} |
| 185 | 190 |
|
| 186 | 191 |
// "test" should be printed |
| ... | ... |
@@ -193,17 +197,38 @@ func (s *DockerSuite) TestRunEchoStdoutWithCPUSharesAndMemoryLimit(c *check.C) {
|
| 193 | 193 |
|
| 194 | 194 |
func (s *DockerSuite) TestRunWithCpusetCpus(c *check.C) {
|
| 195 | 195 |
testRequires(c, cgroupCpuset) |
| 196 |
- dockerCmd(c, "run", "--cpuset-cpus", "0", "busybox", "true") |
|
| 196 |
+ |
|
| 197 |
+ file := "/sys/fs/cgroup/cpuset/cpuset.cpus" |
|
| 198 |
+ out, _ := dockerCmd(c, "run", "--cpuset-cpus", "0", "--name", "test", "busybox", "cat", file) |
|
| 199 |
+ c.Assert(strings.TrimSpace(out), checker.Equals, "0") |
|
| 200 |
+ |
|
| 201 |
+ out, err := inspectField("test", "HostConfig.CpusetCpus")
|
|
| 202 |
+ c.Assert(err, check.IsNil) |
|
| 203 |
+ c.Assert(out, check.Equals, "0") |
|
| 197 | 204 |
} |
| 198 | 205 |
|
| 199 | 206 |
func (s *DockerSuite) TestRunWithCpusetMems(c *check.C) {
|
| 200 | 207 |
testRequires(c, cgroupCpuset) |
| 201 |
- dockerCmd(c, "run", "--cpuset-mems", "0", "busybox", "true") |
|
| 208 |
+ |
|
| 209 |
+ file := "/sys/fs/cgroup/cpuset/cpuset.mems" |
|
| 210 |
+ out, _ := dockerCmd(c, "run", "--cpuset-mems", "0", "--name", "test", "busybox", "cat", file) |
|
| 211 |
+ c.Assert(strings.TrimSpace(out), checker.Equals, "0") |
|
| 212 |
+ |
|
| 213 |
+ out, err := inspectField("test", "HostConfig.CpusetMems")
|
|
| 214 |
+ c.Assert(err, check.IsNil) |
|
| 215 |
+ c.Assert(out, check.Equals, "0") |
|
| 202 | 216 |
} |
| 203 | 217 |
|
| 204 | 218 |
func (s *DockerSuite) TestRunWithBlkioWeight(c *check.C) {
|
| 205 | 219 |
testRequires(c, blkioWeight) |
| 206 |
- dockerCmd(c, "run", "--blkio-weight", "300", "busybox", "true") |
|
| 220 |
+ |
|
| 221 |
+ file := "/sys/fs/cgroup/blkio/blkio.weight" |
|
| 222 |
+ out, _ := dockerCmd(c, "run", "--blkio-weight", "300", "--name", "test", "busybox", "cat", file) |
|
| 223 |
+ c.Assert(strings.TrimSpace(out), checker.Equals, "300") |
|
| 224 |
+ |
|
| 225 |
+ out, err := inspectField("test", "HostConfig.BlkioWeight")
|
|
| 226 |
+ c.Assert(err, check.IsNil) |
|
| 227 |
+ c.Assert(out, check.Equals, "300") |
|
| 207 | 228 |
} |
| 208 | 229 |
|
| 209 | 230 |
func (s *DockerSuite) TestRunWithBlkioInvalidWeight(c *check.C) {
|
| ... | ... |
@@ -240,13 +265,16 @@ func (s *DockerSuite) TestRunOOMExitCode(c *check.C) {
|
| 240 | 240 |
} |
| 241 | 241 |
} |
| 242 | 242 |
|
| 243 |
-// "test" should be printed |
|
| 244 |
-func (s *DockerSuite) TestRunEchoStdoutWithMemoryLimit(c *check.C) {
|
|
| 243 |
+func (s *DockerSuite) TestRunWithMemoryLimit(c *check.C) {
|
|
| 245 | 244 |
testRequires(c, memoryLimitSupport) |
| 246 |
- out, _, _ := dockerCmdWithStdoutStderr(c, "run", "-m", "32m", "busybox", "echo", "test") |
|
| 247 |
- out = strings.Trim(out, "\r\n") |
|
| 248 | 245 |
|
| 249 |
- c.Assert(out, checker.Equals, "test", check.Commentf("container should've printed 'test'"))
|
|
| 246 |
+ file := "/sys/fs/cgroup/memory/memory.limit_in_bytes" |
|
| 247 |
+ stdout, _, _ := dockerCmdWithStdoutStderr(c, "run", "-m", "32M", "--name", "test", "busybox", "cat", file) |
|
| 248 |
+ c.Assert(strings.TrimSpace(stdout), checker.Equals, "33554432") |
|
| 249 |
+ |
|
| 250 |
+ out, err := inspectField("test", "HostConfig.Memory")
|
|
| 251 |
+ c.Assert(err, check.IsNil) |
|
| 252 |
+ c.Assert(out, check.Equals, "33554432") |
|
| 250 | 253 |
} |
| 251 | 254 |
|
| 252 | 255 |
// TestRunWithoutMemoryswapLimit sets memory limit and disables swap |
| ... | ... |
@@ -262,7 +290,13 @@ func (s *DockerSuite) TestRunWithoutMemoryswapLimit(c *check.C) {
|
| 262 | 262 |
|
| 263 | 263 |
func (s *DockerSuite) TestRunWithSwappiness(c *check.C) {
|
| 264 | 264 |
testRequires(c, memorySwappinessSupport) |
| 265 |
- dockerCmd(c, "run", "--memory-swappiness", "0", "busybox", "true") |
|
| 265 |
+ file := "/sys/fs/cgroup/memory/memory.swappiness" |
|
| 266 |
+ out, _ := dockerCmd(c, "run", "--memory-swappiness", "0", "--name", "test", "busybox", "cat", file) |
|
| 267 |
+ c.Assert(strings.TrimSpace(out), checker.Equals, "0") |
|
| 268 |
+ |
|
| 269 |
+ out, err := inspectField("test", "HostConfig.MemorySwappiness")
|
|
| 270 |
+ c.Assert(err, check.IsNil) |
|
| 271 |
+ c.Assert(out, check.Equals, "0") |
|
| 266 | 272 |
} |
| 267 | 273 |
|
| 268 | 274 |
func (s *DockerSuite) TestRunWithSwappinessInvalid(c *check.C) {
|
| ... | ... |
@@ -279,7 +313,14 @@ func (s *DockerSuite) TestRunWithSwappinessInvalid(c *check.C) {
|
| 279 | 279 |
|
| 280 | 280 |
func (s *DockerSuite) TestRunWithMemoryReservation(c *check.C) {
|
| 281 | 281 |
testRequires(c, memoryReservationSupport) |
| 282 |
- dockerCmd(c, "run", "--memory-reservation", "200M", "busybox", "true") |
|
| 282 |
+ |
|
| 283 |
+ file := "/sys/fs/cgroup/memory/memory.soft_limit_in_bytes" |
|
| 284 |
+ out, _ := dockerCmd(c, "run", "--memory-reservation", "200M", "--name", "test", "busybox", "cat", file) |
|
| 285 |
+ c.Assert(strings.TrimSpace(out), checker.Equals, "209715200") |
|
| 286 |
+ |
|
| 287 |
+ out, err := inspectField("test", "HostConfig.MemoryReservation")
|
|
| 288 |
+ c.Assert(err, check.IsNil) |
|
| 289 |
+ c.Assert(out, check.Equals, "209715200") |
|
| 283 | 290 |
} |
| 284 | 291 |
|
| 285 | 292 |
func (s *DockerSuite) TestRunWithMemoryReservationInvalid(c *check.C) {
|