From f74a195e5e90f7bae51fc160c168c0233835ef08 Mon Sep 17 00:00:00 2001
From: Giuseppe Scrivano <gscrivan@redhat.com>
Date: Wed, 10 Feb 2021 14:46:08 +0100
Subject: utils: takes the longest path on cgroup v1

now getCgroupProcess takes the longest path on cgroup v1, instead of
complaining if the paths are different.

This should help when --cgroups=split is used on cgroup v1 and the
process cgroups look like:

$ cat /proc/self/cgroup
11:pids:/user.slice/user-0.slice/session-4.scope
10:blkio:/
9:cpuset:/
8:devices:/user.slice
7:freezer:/
6:memory:/user.slice/user-0.slice/session-4.scope
5:net_cls,net_prio:/
4:hugetlb:/
3:cpu,cpuacct:/
2:perf_event:/

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
(cherry picked from commit 660a06f2f79fc1edf68e286ee452ceb9dcd5e03a)
---
 test/e2e/common_test.go |  7 +++++++
 test/e2e/run_test.go    | 31 +++++++++++++++++++++++++++++++
 2 files changed, 38 insertions(+)

(limited to 'test/e2e')

diff --git a/test/e2e/common_test.go b/test/e2e/common_test.go
index a870117d9..8a452f340 100644
--- a/test/e2e/common_test.go
+++ b/test/e2e/common_test.go
@@ -600,6 +600,13 @@ func SkipIfNotRootless(reason string) {
 	}
 }
 
+func SkipIfNotSystemd(manager, reason string) {
+	checkReason(reason)
+	if manager != "systemd" {
+		ginkgo.Skip("[notSystemd]: " + reason)
+	}
+}
+
 func SkipIfNotFedora() {
 	info := GetHostDistributionInfo()
 	if info.Distribution != "fedora" {
diff --git a/test/e2e/run_test.go b/test/e2e/run_test.go
index 19060ecdc..7d367cccf 100644
--- a/test/e2e/run_test.go
+++ b/test/e2e/run_test.go
@@ -1185,6 +1185,37 @@ USER mail`
 		Expect(found).To(BeTrue())
 	})
 
+	It("podman run with cgroups=split", func() {
+		SkipIfNotSystemd(podmanTest.CgroupManager, "do not test --cgroups=split if not running on systemd")
+		SkipIfRootlessCgroupsV1("Disable cgroups not supported on cgroupv1 for rootless users")
+		SkipIfRemote("--cgroups=split cannot be used in remote mode")
+
+		container := podmanTest.Podman([]string{"run", "--rm", "--cgroups=split", ALPINE, "cat", "/proc/self/cgroup"})
+		container.WaitWithDefaultTimeout()
+		Expect(container.ExitCode()).To(Equal(0))
+		lines := container.OutputToStringArray()
+
+		cgroup := ""
+		for _, line := range lines {
+			parts := strings.SplitN(line, ":", 3)
+			if !CGROUPSV2 {
+				// ignore unified on cgroup v1
+				// both runc and crun do not set it.
+				if parts[1] == "" {
+					continue
+				}
+			}
+			if parts[2] == "/" {
+				continue
+			}
+			if cgroup == "" {
+				cgroup = parts[2]
+				continue
+			}
+			Expect(cgroup).To(Equal(parts[2]))
+		}
+	})
+
 	It("podman run with cgroups=disabled runs without cgroups", func() {
 		SkipIfRootless("FIXME:  I believe this should work but need to fix this test")
 		SkipIfRootlessCgroupsV1("Disable cgroups not supported on cgroupv1 for rootless users")
-- 
cgit v1.2.3-54-g00ecf