github.com/carlanton/docker@v1.8.0-rc1/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  }