github.com/containers/podman/v4@v4.9.4/test/e2e/update_test.go (about) 1 package integration 2 3 import ( 4 "github.com/containers/common/pkg/cgroupv2" 5 . "github.com/containers/podman/v4/test/utils" 6 . "github.com/onsi/ginkgo/v2" 7 . "github.com/onsi/gomega" 8 ) 9 10 var _ = Describe("Podman update", func() { 11 12 It("podman update container all options v1", func() { 13 SkipIfCgroupV2("testing flags that only work in cgroup v1") 14 SkipIfRootless("many of these handlers are not enabled while rootless in CI") 15 session := podmanTest.Podman([]string{"run", "-dt", ALPINE}) 16 session.WaitWithDefaultTimeout() 17 Expect(session).Should(ExitCleanly()) 18 19 ctrID := session.OutputToString() 20 21 commonArgs := []string{ 22 "update", 23 "--cpus", "5", 24 "--cpuset-cpus", "0", 25 "--cpu-shares", "123", 26 "--cpuset-mems", "0", 27 "--memory", "1G", 28 "--memory-swap", "2G", 29 "--memory-reservation", "2G", 30 "--memory-swappiness", "50", 31 "--pids-limit", "123", ctrID} 32 33 session = podmanTest.Podman(commonArgs) 34 session.WaitWithDefaultTimeout() 35 Expect(session).Should(ExitCleanly()) 36 37 // checking cpu quota from --cpus 38 session = podmanTest.Podman([]string{"exec", ctrID, "cat", "/sys/fs/cgroup/cpu/cpu.cfs_quota_us"}) 39 session.WaitWithDefaultTimeout() 40 Expect(session).Should(ExitCleanly()) 41 Expect(session.OutputToString()).Should(ContainSubstring("500000")) 42 43 // checking cpuset-cpus 44 session = podmanTest.Podman([]string{"exec", ctrID, "cat", "/sys/fs/cgroup/cpuset/cpuset.cpus"}) 45 session.WaitWithDefaultTimeout() 46 Expect(session).Should(ExitCleanly()) 47 Expect(session.OutputToString()).Should(Equal("0")) 48 49 // checking cpuset-mems 50 session = podmanTest.Podman([]string{"exec", ctrID, "cat", "/sys/fs/cgroup/cpuset/cpuset.mems"}) 51 session.WaitWithDefaultTimeout() 52 Expect(session).Should(ExitCleanly()) 53 Expect(session.OutputToString()).Should(Equal("0")) 54 55 // checking memory limit 56 session = podmanTest.Podman([]string{"exec", ctrID, "cat", "/sys/fs/cgroup/memory/memory.limit_in_bytes"}) 57 session.WaitWithDefaultTimeout() 58 Expect(session).Should(ExitCleanly()) 59 Expect(session.OutputToString()).Should(ContainSubstring("1073741824")) 60 61 // checking memory-swap 62 session = podmanTest.Podman([]string{"exec", ctrID, "cat", "/sys/fs/cgroup/memory/memory.memsw.limit_in_bytes"}) 63 session.WaitWithDefaultTimeout() 64 Expect(session).Should(ExitCleanly()) 65 Expect(session.OutputToString()).Should(ContainSubstring("2147483648")) 66 67 // checking cpu-shares 68 session = podmanTest.Podman([]string{"exec", ctrID, "cat", "/sys/fs/cgroup/cpu/cpu.shares"}) 69 session.WaitWithDefaultTimeout() 70 Expect(session).Should(ExitCleanly()) 71 Expect(session.OutputToString()).Should(ContainSubstring("123")) 72 73 // checking pids-limit 74 session = podmanTest.Podman([]string{"exec", ctrID, "cat", "/sys/fs/cgroup/pids/pids.max"}) 75 session.WaitWithDefaultTimeout() 76 Expect(session).Should(ExitCleanly()) 77 Expect(session.OutputToString()).Should(ContainSubstring("123")) 78 79 }) 80 81 It("podman update container unspecified pid limit", func() { 82 SkipIfCgroupV1("testing flags that only work in cgroup v2") 83 SkipIfRootless("many of these handlers are not enabled while rootless in CI") 84 session := podmanTest.Podman([]string{"run", "-dt", "--pids-limit", "-1", ALPINE}) 85 session.WaitWithDefaultTimeout() 86 Expect(session).Should(ExitCleanly()) 87 88 ctrID := session.OutputToString() 89 90 commonArgs := []string{ 91 "update", 92 "--cpus", "5", 93 ctrID} 94 95 session = podmanTest.Podman(commonArgs) 96 session.WaitWithDefaultTimeout() 97 Expect(session).Should(ExitCleanly()) 98 99 ctrID = session.OutputToString() 100 101 // checking pids-limit was not changed after update when not specified as an option 102 session = podmanTest.Podman([]string{"exec", ctrID, "cat", "/sys/fs/cgroup/pids.max"}) 103 session.WaitWithDefaultTimeout() 104 Expect(session).Should(ExitCleanly()) 105 Expect(session.OutputToString()).Should(ContainSubstring("max")) 106 }) 107 108 It("podman update container all options v2", func() { 109 SkipIfCgroupV1("testing flags that only work in cgroup v2") 110 SkipIfRootless("many of these handlers are not enabled while rootless in CI") 111 session := podmanTest.Podman([]string{"run", "-dt", ALPINE}) 112 session.WaitWithDefaultTimeout() 113 Expect(session).Should(ExitCleanly()) 114 115 ctrID := session.OutputToString() 116 117 commonArgs := []string{ 118 "update", 119 "--cpus", "5", 120 "--cpuset-cpus", "0", 121 "--cpu-shares", "123", 122 "--cpuset-mems", "0", 123 "--memory", "1G", 124 "--memory-swap", "2G", 125 "--memory-reservation", "2G", 126 "--blkio-weight", "123", 127 "--device-read-bps", "/dev/zero:10mb", 128 "--device-write-bps", "/dev/zero:10mb", 129 "--device-read-iops", "/dev/zero:1000", 130 "--device-write-iops", "/dev/zero:1000", 131 "--pids-limit", "123", 132 ctrID} 133 134 session = podmanTest.Podman(commonArgs) 135 session.WaitWithDefaultTimeout() 136 Expect(session).Should(ExitCleanly()) 137 138 ctrID = session.OutputToString() 139 140 // checking cpu quota and period 141 session = podmanTest.Podman([]string{"exec", ctrID, "cat", "/sys/fs/cgroup/cpu.max"}) 142 session.WaitWithDefaultTimeout() 143 Expect(session).Should(ExitCleanly()) 144 Expect(session.OutputToString()).Should(ContainSubstring("500000")) 145 146 // checking blkio weight 147 session = podmanTest.Podman([]string{"exec", ctrID, "cat", "/sys/fs/cgroup/io.bfq.weight"}) 148 session.WaitWithDefaultTimeout() 149 Expect(session).Should(ExitCleanly()) 150 Expect(session.OutputToString()).Should(ContainSubstring("123")) 151 152 // checking device-read/write-bps/iops 153 session = podmanTest.Podman([]string{"exec", ctrID, "cat", "/sys/fs/cgroup/io.max"}) 154 session.WaitWithDefaultTimeout() 155 Expect(session).Should(ExitCleanly()) 156 Expect(session.OutputToString()).Should(ContainSubstring("rbps=10485760 wbps=10485760 riops=1000 wiops=1000")) 157 158 // checking cpuset-cpus 159 session = podmanTest.Podman([]string{"exec", ctrID, "cat", "/sys/fs/cgroup/cpuset.cpus"}) 160 session.WaitWithDefaultTimeout() 161 Expect(session).Should(ExitCleanly()) 162 Expect(session.OutputToString()).Should(Equal("0")) 163 164 // checking cpuset-mems 165 session = podmanTest.Podman([]string{"exec", ctrID, "cat", "/sys/fs/cgroup/cpuset.mems"}) 166 session.WaitWithDefaultTimeout() 167 Expect(session).Should(ExitCleanly()) 168 Expect(session.OutputToString()).Should(Equal("0")) 169 170 // checking memory limit 171 session = podmanTest.Podman([]string{"exec", ctrID, "cat", "/sys/fs/cgroup/memory.max"}) 172 session.WaitWithDefaultTimeout() 173 Expect(session).Should(ExitCleanly()) 174 Expect(session.OutputToString()).Should(ContainSubstring("1073741824")) 175 176 // checking memory-swap 177 session = podmanTest.Podman([]string{"exec", ctrID, "cat", "/sys/fs/cgroup/memory.swap.max"}) 178 session.WaitWithDefaultTimeout() 179 Expect(session).Should(ExitCleanly()) 180 Expect(session.OutputToString()).Should(ContainSubstring("1073741824")) 181 182 // checking cpu-shares 183 session = podmanTest.Podman([]string{"exec", ctrID, "cat", "/sys/fs/cgroup/cpu.weight"}) 184 session.WaitWithDefaultTimeout() 185 Expect(session).Should(ExitCleanly()) 186 Expect(session.OutputToString()).Should(ContainSubstring("5")) 187 188 // checking pids-limit 189 session = podmanTest.Podman([]string{"exec", ctrID, "cat", "/sys/fs/cgroup/pids.max"}) 190 session.WaitWithDefaultTimeout() 191 Expect(session).Should(ExitCleanly()) 192 Expect(session.OutputToString()).Should(ContainSubstring("123")) 193 }) 194 195 It("podman update keep original resources if not overridden", func() { 196 SkipIfRootless("many of these handlers are not enabled while rootless in CI") 197 session := podmanTest.Podman([]string{"run", "-dt", "--cpus", "5", ALPINE}) 198 session.WaitWithDefaultTimeout() 199 Expect(session).Should(ExitCleanly()) 200 201 session = podmanTest.Podman([]string{ 202 "update", 203 "--memory", "1G", 204 session.OutputToString(), 205 }) 206 207 session.WaitWithDefaultTimeout() 208 Expect(session).Should(ExitCleanly()) 209 210 ctrID := session.OutputToString() 211 212 if v2, _ := cgroupv2.Enabled(); v2 { 213 session = podmanTest.Podman([]string{"exec", ctrID, "cat", "/sys/fs/cgroup/cpu.max"}) 214 } else { 215 session = podmanTest.Podman([]string{"exec", ctrID, "cat", "/sys/fs/cgroup/cpu/cpu.cfs_quota_us"}) 216 } 217 session.WaitWithDefaultTimeout() 218 Expect(session).Should(ExitCleanly()) 219 Expect(session.OutputToString()).Should(ContainSubstring("500000")) 220 }) 221 })