github.com/rita33cool1/iot-system-gateway@v0.0.0-20200911033302-e65bde238cc5/docker-engine/integration/container/update_linux_test.go (about) 1 package container // import "github.com/docker/docker/integration/container" 2 3 import ( 4 "context" 5 "strconv" 6 "strings" 7 "testing" 8 "time" 9 10 containertypes "github.com/docker/docker/api/types/container" 11 "github.com/docker/docker/integration/internal/container" 12 "github.com/docker/docker/integration/internal/request" 13 "github.com/gotestyourself/gotestyourself/assert" 14 is "github.com/gotestyourself/gotestyourself/assert/cmp" 15 "github.com/gotestyourself/gotestyourself/poll" 16 "github.com/gotestyourself/gotestyourself/skip" 17 ) 18 19 func TestUpdateMemory(t *testing.T) { 20 skip.If(t, testEnv.DaemonInfo.OSType != "linux") 21 skip.If(t, !testEnv.DaemonInfo.MemoryLimit) 22 skip.If(t, !testEnv.DaemonInfo.SwapLimit) 23 24 defer setupTest(t)() 25 client := request.NewAPIClient(t) 26 ctx := context.Background() 27 28 cID := container.Run(t, ctx, client, func(c *container.TestContainerConfig) { 29 c.HostConfig.Resources = containertypes.Resources{ 30 Memory: 200 * 1024 * 1024, 31 } 32 }) 33 34 poll.WaitOn(t, container.IsInState(ctx, client, cID, "running"), poll.WithDelay(100*time.Millisecond)) 35 36 const ( 37 setMemory int64 = 314572800 38 setMemorySwap int64 = 524288000 39 ) 40 41 _, err := client.ContainerUpdate(ctx, cID, containertypes.UpdateConfig{ 42 Resources: containertypes.Resources{ 43 Memory: setMemory, 44 MemorySwap: setMemorySwap, 45 }, 46 }) 47 assert.NilError(t, err) 48 49 inspect, err := client.ContainerInspect(ctx, cID) 50 assert.NilError(t, err) 51 assert.Check(t, is.Equal(setMemory, inspect.HostConfig.Memory)) 52 assert.Check(t, is.Equal(setMemorySwap, inspect.HostConfig.MemorySwap)) 53 54 res, err := container.Exec(ctx, client, cID, 55 []string{"cat", "/sys/fs/cgroup/memory/memory.limit_in_bytes"}) 56 assert.NilError(t, err) 57 assert.Assert(t, is.Len(res.Stderr(), 0)) 58 assert.Equal(t, 0, res.ExitCode) 59 assert.Check(t, is.Equal(strconv.FormatInt(setMemory, 10), strings.TrimSpace(res.Stdout()))) 60 61 res, err = container.Exec(ctx, client, cID, 62 []string{"cat", "/sys/fs/cgroup/memory/memory.memsw.limit_in_bytes"}) 63 assert.NilError(t, err) 64 assert.Assert(t, is.Len(res.Stderr(), 0)) 65 assert.Equal(t, 0, res.ExitCode) 66 assert.Check(t, is.Equal(strconv.FormatInt(setMemorySwap, 10), strings.TrimSpace(res.Stdout()))) 67 } 68 69 func TestUpdateCPUQuota(t *testing.T) { 70 t.Parallel() 71 72 defer setupTest(t)() 73 client := request.NewAPIClient(t) 74 ctx := context.Background() 75 76 cID := container.Run(t, ctx, client) 77 78 for _, test := range []struct { 79 desc string 80 update int64 81 }{ 82 {desc: "some random value", update: 15000}, 83 {desc: "a higher value", update: 20000}, 84 {desc: "a lower value", update: 10000}, 85 {desc: "unset value", update: -1}, 86 } { 87 if _, err := client.ContainerUpdate(ctx, cID, containertypes.UpdateConfig{ 88 Resources: containertypes.Resources{ 89 CPUQuota: test.update, 90 }, 91 }); err != nil { 92 t.Fatal(err) 93 } 94 95 inspect, err := client.ContainerInspect(ctx, cID) 96 assert.NilError(t, err) 97 assert.Check(t, is.Equal(test.update, inspect.HostConfig.CPUQuota)) 98 99 res, err := container.Exec(ctx, client, cID, 100 []string{"/bin/cat", "/sys/fs/cgroup/cpu/cpu.cfs_quota_us"}) 101 assert.NilError(t, err) 102 assert.Assert(t, is.Len(res.Stderr(), 0)) 103 assert.Equal(t, 0, res.ExitCode) 104 105 assert.Check(t, is.Equal(strconv.FormatInt(test.update, 10), strings.TrimSpace(res.Stdout()))) 106 } 107 }