diff options
author | Matthew Heon <matthew.heon@pm.me> | 2019-07-15 16:44:56 -0400 |
---|---|---|
committer | Matthew Heon <matthew.heon@pm.me> | 2019-09-10 10:52:37 -0400 |
commit | c2284962c798a11f3c956ee237f27cfd3b0fcb21 (patch) | |
tree | a82ff49ee28be13a9a1702506aa7be051fea9fb1 /test/e2e/run_test.go | |
parent | 16a70490852fdaf3ea5aeea6b2be19dd70fbf1c7 (diff) | |
download | podman-c2284962c798a11f3c956ee237f27cfd3b0fcb21.tar.gz podman-c2284962c798a11f3c956ee237f27cfd3b0fcb21.tar.bz2 podman-c2284962c798a11f3c956ee237f27cfd3b0fcb21.zip |
Add support for launching containers without CGroups
This is mostly used with Systemd, which really wants to manage
CGroups itself when managing containers via unit file.
Signed-off-by: Matthew Heon <matthew.heon@pm.me>
Diffstat (limited to 'test/e2e/run_test.go')
-rw-r--r-- | test/e2e/run_test.go | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/test/e2e/run_test.go b/test/e2e/run_test.go index 6e102cfa5..4d2cee8e3 100644 --- a/test/e2e/run_test.go +++ b/test/e2e/run_test.go @@ -903,4 +903,75 @@ USER mail` } Expect(found).To(BeTrue()) }) + + It("podman run with cgroups=disabled runs without cgroups", func() { + SkipIfRemote() + SkipIfRootless() + // Only works on crun + if !strings.Contains(podmanTest.OCIRuntime, "crun") { + Skip("Test only works on crun") + } + + curCgroupsBytes, err := ioutil.ReadFile("/proc/self/cgroup") + Expect(err).To(BeNil()) + var curCgroups string = string(curCgroupsBytes) + fmt.Printf("Output:\n%s\n", curCgroups) + Expect(curCgroups).To(Not(Equal(""))) + + ctrName := "testctr" + container := podmanTest.Podman([]string{"run", "--name", ctrName, "-d", "--cgroups=disabled", ALPINE, "top"}) + container.WaitWithDefaultTimeout() + Expect(container.ExitCode()).To(Equal(0)) + + // Get PID and get cgroups of that PID + inspectOut := podmanTest.InspectContainer(ctrName) + Expect(len(inspectOut)).To(Equal(1)) + pid := inspectOut[0].State.Pid + Expect(pid).To(Not(Equal(0))) + Expect(inspectOut[0].HostConfig.CgroupParent).To(Equal("")) + + ctrCgroupsBytes, err := ioutil.ReadFile(fmt.Sprintf("/proc/%d/cgroup", pid)) + Expect(err).To(BeNil()) + var ctrCgroups string = string(ctrCgroupsBytes) + fmt.Printf("Output\n:%s\n", ctrCgroups) + Expect(curCgroups).To(Equal(ctrCgroups)) + }) + + It("podman run with cgroups=enabled makes cgroups", func() { + SkipIfRemote() + SkipIfRootless() + // Only works on crun + if !strings.Contains(podmanTest.OCIRuntime, "crun") { + Skip("Test only works on crun") + } + + curCgroupsBytes, err := ioutil.ReadFile("/proc/self/cgroup") + Expect(err).To(BeNil()) + var curCgroups string = string(curCgroupsBytes) + fmt.Printf("Output:\n%s\n", curCgroups) + Expect(curCgroups).To(Not(Equal(""))) + + ctrName := "testctr" + container := podmanTest.Podman([]string{"run", "--name", ctrName, "-d", "--cgroups=enabled", ALPINE, "top"}) + container.WaitWithDefaultTimeout() + Expect(container.ExitCode()).To(Equal(0)) + + // Get PID and get cgroups of that PID + inspectOut := podmanTest.InspectContainer(ctrName) + Expect(len(inspectOut)).To(Equal(1)) + pid := inspectOut[0].State.Pid + Expect(pid).To(Not(Equal(0))) + + ctrCgroupsBytes, err := ioutil.ReadFile(fmt.Sprintf("/proc/%d/cgroup", pid)) + Expect(err).To(BeNil()) + var ctrCgroups string = string(ctrCgroupsBytes) + fmt.Printf("Output\n:%s\n", ctrCgroups) + Expect(curCgroups).To(Not(Equal(ctrCgroups))) + }) + + It("podman run with cgroups=garbage errors", func() { + session := podmanTest.Podman([]string{"run", "-d", "--cgroups=garbage", ALPINE, "top"}) + session.WaitWithDefaultTimeout() + Expect(session.ExitCode()).To(Not(Equal(0))) + }) }) |