github.com/a4a881d4/docker@v1.9.0-rc2/integration-cli/docker_cli_build_unix_test.go (about) 1 // +build !windows 2 3 package main 4 5 import ( 6 "encoding/json" 7 "strings" 8 9 "github.com/docker/docker/pkg/ulimit" 10 "github.com/go-check/check" 11 ) 12 13 func (s *DockerSuite) TestBuildResourceConstraintsAreUsed(c *check.C) { 14 testRequires(c, cpuCfsQuota) 15 name := "testbuildresourceconstraints" 16 17 ctx, err := fakeContext(` 18 FROM hello-world:frozen 19 RUN ["/hello"] 20 `, map[string]string{}) 21 if err != nil { 22 c.Fatal(err) 23 } 24 25 dockerCmdInDir(c, ctx.Dir, "build", "--no-cache", "--rm=false", "--memory=64m", "--memory-swap=-1", "--cpuset-cpus=0", "--cpuset-mems=0", "--cpu-shares=100", "--cpu-quota=8000", "--ulimit", "nofile=42", "-t", name, ".") 26 27 out, _ := dockerCmd(c, "ps", "-lq") 28 29 cID := strings.TrimSpace(out) 30 31 type hostConfig struct { 32 Memory int64 33 MemorySwap int64 34 CpusetCpus string 35 CpusetMems string 36 CPUShares int64 37 CPUQuota int64 38 Ulimits []*ulimit.Ulimit 39 } 40 41 cfg, err := inspectFieldJSON(cID, "HostConfig") 42 if err != nil { 43 c.Fatal(err) 44 } 45 46 var c1 hostConfig 47 if err := json.Unmarshal([]byte(cfg), &c1); err != nil { 48 c.Fatal(err, cfg) 49 } 50 if c1.Memory != 67108864 || c1.MemorySwap != -1 || c1.CpusetCpus != "0" || c1.CpusetMems != "0" || c1.CPUShares != 100 || c1.CPUQuota != 8000 || c1.Ulimits[0].Name != "nofile" || c1.Ulimits[0].Hard != 42 { 51 c.Fatalf("resource constraints not set properly:\nMemory: %d, MemSwap: %d, CpusetCpus: %s, CpusetMems: %s, CPUShares: %d, CPUQuota: %d, Ulimits: %s", 52 c1.Memory, c1.MemorySwap, c1.CpusetCpus, c1.CpusetMems, c1.CPUShares, c1.CPUQuota, c1.Ulimits[0]) 53 } 54 55 // Make sure constraints aren't saved to image 56 dockerCmd(c, "run", "--name=test", name) 57 58 cfg, err = inspectFieldJSON("test", "HostConfig") 59 if err != nil { 60 c.Fatal(err) 61 } 62 var c2 hostConfig 63 if err := json.Unmarshal([]byte(cfg), &c2); err != nil { 64 c.Fatal(err, cfg) 65 } 66 if c2.Memory == 67108864 || c2.MemorySwap == -1 || c2.CpusetCpus == "0" || c2.CpusetMems == "0" || c2.CPUShares == 100 || c2.CPUQuota == 8000 || c2.Ulimits != nil { 67 c.Fatalf("resource constraints leaked from build:\nMemory: %d, MemSwap: %d, CpusetCpus: %s, CpusetMems: %s, CPUShares: %d, CPUQuota: %d, Ulimits: %s", 68 c2.Memory, c2.MemorySwap, c2.CpusetCpus, c2.CpusetMems, c2.CPUShares, c2.CPUQuota, c2.Ulimits) 69 70 } 71 72 }