summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorOpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com>2022-09-01 20:48:25 +0200
committerGitHub <noreply@github.com>2022-09-01 20:48:25 +0200
commitd0d1af338a500f2ad00d5ce0638901465602817d (patch)
tree327a081bd2243ffcbdf786a940b1dc82d041bea5 /test
parent0085fbb488eec30e71e6cced6a06dbdb134e32a6 (diff)
parent050f3291b9ef8788510b78c543055638275eb20f (diff)
downloadpodman-d0d1af338a500f2ad00d5ce0638901465602817d.tar.gz
podman-d0d1af338a500f2ad00d5ce0638901465602817d.tar.bz2
podman-d0d1af338a500f2ad00d5ce0638901465602817d.zip
Merge pull request #15276 from cdoern/update
implement podman update
Diffstat (limited to 'test')
-rw-r--r--test/apiv2/20-containers.at15
-rw-r--r--test/apiv2/python/rest_api/test_v2_0_0_container.py2
-rw-r--r--test/e2e/update_test.go200
3 files changed, 215 insertions, 2 deletions
diff --git a/test/apiv2/20-containers.at b/test/apiv2/20-containers.at
index 253bb2e45..9ace46b8b 100644
--- a/test/apiv2/20-containers.at
+++ b/test/apiv2/20-containers.at
@@ -547,6 +547,21 @@ t GET libpod/containers/$cname/json 200 \
.ImageName=$IMAGE \
.Name=$cname
+if root; then
+ podman run -dt --name=updateCtr alpine
+ echo '{"Memory":{"Limit":500000}, "CPU":{"Shares":123}}' >${TMPD}/update.json
+ t POST libpod/containers/updateCtr/update ${TMPD}/update.json 201
+
+ # Verify
+ echo '{ "AttachStdout":true,"Cmd":["cat","/sys/fs/cgroup/cpu.weight"]}' >${TMPD}/exec.json
+ t POST containers/updateCtr/exec ${TMPD}/exec.json 201 .Id~[0-9a-f]\\{64\\}
+ eid=$(jq -r '.Id' <<<"$output")
+ # 002 is the byte length
+ t POST exec/$eid/start 200 $'\001\0025'
+
+ podman rm -f updateCtr
+fi
+
rm -rf $TMPD
podman container rm -fa
diff --git a/test/apiv2/python/rest_api/test_v2_0_0_container.py b/test/apiv2/python/rest_api/test_v2_0_0_container.py
index a6cd93a1a..25596a9b7 100644
--- a/test/apiv2/python/rest_api/test_v2_0_0_container.py
+++ b/test/apiv2/python/rest_api/test_v2_0_0_container.py
@@ -359,8 +359,6 @@ class ContainerTestCase(APITestCase):
self.assertEqual(2000, out["HostConfig"]["MemorySwap"])
self.assertEqual(1000, out["HostConfig"]["Memory"])
-
-
def execute_process(cmd):
return subprocess.run(
cmd,
diff --git a/test/e2e/update_test.go b/test/e2e/update_test.go
new file mode 100644
index 000000000..97dadd04c
--- /dev/null
+++ b/test/e2e/update_test.go
@@ -0,0 +1,200 @@
+package integration
+
+import (
+ "github.com/containers/common/pkg/cgroupv2"
+ . "github.com/containers/podman/v4/test/utils"
+ . "github.com/onsi/ginkgo"
+ . "github.com/onsi/gomega"
+ . "github.com/onsi/gomega/gexec"
+)
+
+var _ = Describe("Podman update", func() {
+ var (
+ tempdir string
+ err error
+ podmanTest *PodmanTestIntegration
+ )
+
+ BeforeEach(func() {
+ tempdir, err = CreateTempDirInTempDir()
+ Expect(err).To(BeNil())
+ podmanTest = PodmanTestCreate(tempdir)
+ podmanTest.Setup()
+ })
+
+ AfterEach(func() {
+ podmanTest.Cleanup()
+ f := CurrentGinkgoTestDescription()
+ processTestResult(f)
+
+ })
+
+ It("podman update container all options v1", func() {
+ SkipIfCgroupV2("testing flags that only work in cgroup v1")
+ SkipIfRootless("many of these handlers are not enabled while rootless in CI")
+ session := podmanTest.Podman([]string{"run", "-dt", ALPINE})
+ session.WaitWithDefaultTimeout()
+ Expect(session).Should(Exit(0))
+
+ ctrID := session.OutputToString()
+
+ commonArgs := []string{
+ "update",
+ "--cpus", "5",
+ "--cpuset-cpus", "0",
+ "--cpu-shares", "123",
+ "--cpuset-mems", "0",
+ "--memory", "1G",
+ "--memory-swap", "2G",
+ "--memory-reservation", "2G",
+ "--memory-swappiness", "50", ctrID}
+
+ session = podmanTest.Podman(commonArgs)
+ session.WaitWithDefaultTimeout()
+ Expect(session).Should(Exit(0))
+
+ // checking cpu quota from --cpus
+ session = podmanTest.Podman([]string{"exec", "-it", ctrID, "cat", "/sys/fs/cgroup/cpu/cpu.cfs_quota_us"})
+ session.WaitWithDefaultTimeout()
+ Expect(session).Should(Exit(0))
+ Expect(session.OutputToString()).Should(ContainSubstring("500000"))
+
+ // checking cpuset-cpus
+ session = podmanTest.Podman([]string{"exec", "-it", ctrID, "cat", "/sys/fs/cgroup/cpuset/cpuset.cpus"})
+ session.WaitWithDefaultTimeout()
+ Expect(session).Should(Exit(0))
+ Expect(session.OutputToString()).Should(Equal("0"))
+
+ // checking cpuset-mems
+ session = podmanTest.Podman([]string{"exec", "-it", ctrID, "cat", "/sys/fs/cgroup/cpuset/cpuset.mems"})
+ session.WaitWithDefaultTimeout()
+ Expect(session).Should(Exit(0))
+ Expect(session.OutputToString()).Should(Equal("0"))
+
+ // checking memory limit
+ session = podmanTest.Podman([]string{"exec", "-it", ctrID, "cat", "/sys/fs/cgroup/memory/memory.limit_in_bytes"})
+ session.WaitWithDefaultTimeout()
+ Expect(session).Should(Exit(0))
+ Expect(session.OutputToString()).Should(ContainSubstring("1073741824"))
+
+ // checking memory-swap
+ session = podmanTest.Podman([]string{"exec", "-it", ctrID, "cat", "/sys/fs/cgroup/memory/memory.memsw.limit_in_bytes"})
+ session.WaitWithDefaultTimeout()
+ Expect(session).Should(Exit(0))
+ Expect(session.OutputToString()).Should(ContainSubstring("2147483648"))
+
+ // checking cpu-shares
+ session = podmanTest.Podman([]string{"exec", "-it", ctrID, "cat", "/sys/fs/cgroup/cpu/cpu.shares"})
+ session.WaitWithDefaultTimeout()
+ Expect(session).Should(Exit(0))
+ Expect(session.OutputToString()).Should(ContainSubstring("123"))
+
+ })
+
+ It("podman update container all options v2", func() {
+ SkipIfCgroupV1("testing flags that only work in cgroup v2")
+ SkipIfRootless("many of these handlers are not enabled while rootless in CI")
+ session := podmanTest.Podman([]string{"run", "-dt", ALPINE})
+ session.WaitWithDefaultTimeout()
+ Expect(session).Should(Exit(0))
+
+ ctrID := session.OutputToString()
+
+ commonArgs := []string{
+ "update",
+ "--cpus", "5",
+ "--cpuset-cpus", "0",
+ "--cpu-shares", "123",
+ "--cpuset-mems", "0",
+ "--memory", "1G",
+ "--memory-swap", "2G",
+ "--memory-reservation", "2G",
+ "--blkio-weight", "123",
+ "--device-read-bps", "/dev/zero:10mb",
+ "--device-write-bps", "/dev/zero:10mb",
+ "--device-read-iops", "/dev/zero:1000",
+ "--device-write-iops", "/dev/zero:1000",
+ ctrID}
+
+ session = podmanTest.Podman(commonArgs)
+ session.WaitWithDefaultTimeout()
+ Expect(session).Should(Exit(0))
+
+ ctrID = session.OutputToString()
+
+ // checking cpu quota and period
+ session = podmanTest.Podman([]string{"exec", "-it", ctrID, "cat", "/sys/fs/cgroup/cpu.max"})
+ session.WaitWithDefaultTimeout()
+ Expect(session).Should(Exit(0))
+ Expect(session.OutputToString()).Should(ContainSubstring("500000"))
+
+ // checking blkio weight
+ session = podmanTest.Podman([]string{"exec", "-it", ctrID, "cat", "/sys/fs/cgroup/io.bfq.weight"})
+ session.WaitWithDefaultTimeout()
+ Expect(session).Should(Exit(0))
+ Expect(session.OutputToString()).Should(ContainSubstring("123"))
+
+ // checking device-read/write-bps/iops
+ session = podmanTest.Podman([]string{"exec", "-it", ctrID, "cat", "/sys/fs/cgroup/io.max"})
+ session.WaitWithDefaultTimeout()
+ Expect(session).Should(Exit(0))
+ Expect(session.OutputToString()).Should(ContainSubstring("rbps=10485760 wbps=10485760 riops=1000 wiops=1000"))
+
+ // checking cpuset-cpus
+ session = podmanTest.Podman([]string{"exec", "-it", ctrID, "cat", "/sys/fs/cgroup/cpuset.cpus"})
+ session.WaitWithDefaultTimeout()
+ Expect(session).Should(Exit(0))
+ Expect(session.OutputToString()).Should(Equal("0"))
+
+ // checking cpuset-mems
+ session = podmanTest.Podman([]string{"exec", "-it", ctrID, "cat", "/sys/fs/cgroup/cpuset.mems"})
+ session.WaitWithDefaultTimeout()
+ Expect(session).Should(Exit(0))
+ Expect(session.OutputToString()).Should(Equal("0"))
+
+ // checking memory limit
+ session = podmanTest.Podman([]string{"exec", "-it", ctrID, "cat", "/sys/fs/cgroup/memory.max"})
+ session.WaitWithDefaultTimeout()
+ Expect(session).Should(Exit(0))
+ Expect(session.OutputToString()).Should(ContainSubstring("1073741824"))
+
+ // checking memory-swap
+ session = podmanTest.Podman([]string{"exec", "-it", ctrID, "cat", "/sys/fs/cgroup/memory.swap.max"})
+ session.WaitWithDefaultTimeout()
+ Expect(session).Should(Exit(0))
+ Expect(session.OutputToString()).Should(ContainSubstring("1073741824"))
+
+ // checking cpu-shares
+ session = podmanTest.Podman([]string{"exec", "-it", ctrID, "cat", "/sys/fs/cgroup/cpu.weight"})
+ session.WaitWithDefaultTimeout()
+ Expect(session).Should(Exit(0))
+ Expect(session.OutputToString()).Should(ContainSubstring("5"))
+ })
+
+ It("podman update keep original resources if not overridden", func() {
+ SkipIfRootless("many of these handlers are not enabled while rootless in CI")
+ session := podmanTest.Podman([]string{"run", "-dt", "--cpus", "5", ALPINE})
+ session.WaitWithDefaultTimeout()
+ Expect(session).Should(Exit(0))
+
+ session = podmanTest.Podman([]string{
+ "update",
+ "--memory", "1G",
+ session.OutputToString(),
+ })
+
+ session.WaitWithDefaultTimeout()
+ Expect(session).Should(Exit(0))
+
+ ctrID := session.OutputToString()
+
+ if v2, _ := cgroupv2.Enabled(); v2 {
+ session = podmanTest.Podman([]string{"exec", "-it", ctrID, "cat", "/sys/fs/cgroup/cpu.max"})
+ } else {
+ session = podmanTest.Podman([]string{"exec", "-it", ctrID, "cat", "/sys/fs/cgroup/cpu/cpu.cfs_quota_us"})
+ }
+ session.WaitWithDefaultTimeout()
+ Expect(session).Should(Exit(0))
+ Expect(session.OutputToString()).Should(ContainSubstring("500000"))
+ })
+})