summaryrefslogtreecommitdiff
path: root/test/e2e/run_test.go
diff options
context:
space:
mode:
authorMatthew Heon <matthew.heon@pm.me>2019-07-15 16:44:56 -0400
committerMatthew Heon <matthew.heon@pm.me>2019-09-10 10:52:37 -0400
commitc2284962c798a11f3c956ee237f27cfd3b0fcb21 (patch)
treea82ff49ee28be13a9a1702506aa7be051fea9fb1 /test/e2e/run_test.go
parent16a70490852fdaf3ea5aeea6b2be19dd70fbf1c7 (diff)
downloadpodman-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.go71
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)))
+ })
})