podman

Форк
0
/
run_ns_test.go 
123 строки · 4.6 Кб
1
package integration
2

3
import (
4
	"os/exec"
5
	"strings"
6

7
	. "github.com/containers/podman/v5/test/utils"
8
	. "github.com/onsi/ginkgo/v2"
9
	. "github.com/onsi/gomega"
10
)
11

12
var _ = Describe("Podman run ns", func() {
13

14
	It("podman run pidns test", func() {
15
		SkipIfRootlessCgroupsV1("Not supported for rootless + CgroupsV1")
16
		session := podmanTest.Podman([]string{"run", fedoraMinimal, "bash", "-c", "echo $$"})
17
		session.WaitWithDefaultTimeout()
18
		Expect(session).Should(ExitCleanly())
19
		Expect(session.OutputToString()).To(Equal("1"))
20

21
		session = podmanTest.Podman([]string{"run", "--pid=host", fedoraMinimal, "bash", "-c", "echo $$"})
22
		session.WaitWithDefaultTimeout()
23
		Expect(session).Should(ExitCleanly())
24
		Expect(session.OutputToString()).To(Not(Equal("1")))
25

26
		session = podmanTest.Podman([]string{"run", "--pid=badpid", fedoraMinimal, "bash", "-c", "echo $$"})
27
		session.WaitWithDefaultTimeout()
28
		Expect(session).To(ExitWithError())
29
	})
30

31
	It("podman run --cgroup private test", func() {
32
		session := podmanTest.Podman([]string{"run", "--cgroupns=private", fedoraMinimal, "cat", "/proc/self/cgroup"})
33
		session.WaitWithDefaultTimeout()
34
		Expect(session).Should(ExitCleanly())
35

36
		output := session.OutputToString()
37
		Expect(output).ToNot(ContainSubstring("slice"))
38
	})
39

40
	It("podman run ipcns test", func() {
41
		setup := SystemExec("ls", []string{"--inode", "-d", "/dev/shm"})
42
		Expect(setup).Should(ExitCleanly())
43
		hostShm := setup.OutputToString()
44

45
		session := podmanTest.Podman([]string{"run", "--ipc=host", fedoraMinimal, "ls", "--inode", "-d", "/dev/shm"})
46
		session.WaitWithDefaultTimeout()
47
		Expect(session).Should(ExitCleanly())
48
		Expect(session.OutputToString()).To(Equal(hostShm))
49
	})
50

51
	It("podman run ipcns ipcmk host test", func() {
52
		setup := SystemExec("ipcmk", []string{"-M", "1024"})
53
		Expect(setup).Should(ExitCleanly())
54
		output := strings.Split(setup.OutputToString(), " ")
55
		ipc := output[len(output)-1]
56
		session := podmanTest.Podman([]string{"run", "--ipc=host", fedoraMinimal, "ipcs", "-m", "-i", ipc})
57
		session.WaitWithDefaultTimeout()
58
		Expect(session).Should(ExitCleanly())
59

60
		setup = SystemExec("ipcrm", []string{"-m", ipc})
61
		Expect(setup).Should(ExitCleanly())
62
	})
63

64
	It("podman run ipcns ipcmk container test", func() {
65
		setup := podmanTest.Podman([]string{"run", "-d", "--name", "test1", fedoraMinimal, "sleep", "999"})
66
		setup.WaitWithDefaultTimeout()
67
		Expect(setup).Should(ExitCleanly())
68

69
		session := podmanTest.Podman([]string{"exec", "test1", "ipcmk", "-M", "1024"})
70
		session.WaitWithDefaultTimeout()
71
		Expect(session).Should(ExitCleanly())
72
		output := strings.Split(session.OutputToString(), " ")
73
		ipc := output[len(output)-1]
74
		session = podmanTest.Podman([]string{"run", "--ipc=container:test1", fedoraMinimal, "ipcs", "-m", "-i", ipc})
75
		session.WaitWithDefaultTimeout()
76
		Expect(session).Should(ExitCleanly())
77
	})
78

79
	It("podman run bad ipc pid test", func() {
80
		session := podmanTest.Podman([]string{"run", "--ipc=badpid", fedoraMinimal, "bash", "-c", "echo $$"})
81
		session.WaitWithDefaultTimeout()
82
		Expect(session).To(ExitWithError())
83
	})
84

85
	It("podman run mounts fresh cgroup", func() {
86
		session := podmanTest.Podman([]string{"run", fedoraMinimal, "grep", "cgroup", "/proc/self/mountinfo"})
87
		session.WaitWithDefaultTimeout()
88
		Expect(session).Should(ExitCleanly())
89
		output := session.OutputToString()
90
		Expect(output).ToNot(ContainSubstring(".."))
91
	})
92

93
	It("podman run --ipc=host --pid=host", func() {
94
		SkipIfRootlessCgroupsV1("Not supported for rootless + CgroupsV1")
95
		cmd := exec.Command("ls", "-l", "/proc/self/ns/pid")
96
		res, err := cmd.Output()
97
		Expect(err).ToNot(HaveOccurred())
98
		fields := strings.Split(string(res), " ")
99
		hostPidNS := strings.TrimSuffix(fields[len(fields)-1], "\n")
100

101
		cmd = exec.Command("ls", "-l", "/proc/self/ns/ipc")
102
		res, err = cmd.Output()
103
		Expect(err).ToNot(HaveOccurred())
104
		fields = strings.Split(string(res), " ")
105
		hostIpcNS := strings.TrimSuffix(fields[len(fields)-1], "\n")
106

107
		session := podmanTest.Podman([]string{"run", "--ipc=host", "--pid=host", ALPINE, "ls", "-l", "/proc/self/ns/pid"})
108
		session.WaitWithDefaultTimeout()
109
		Expect(session).Should(ExitCleanly())
110
		fields = strings.Split(session.OutputToString(), " ")
111
		ctrPidNS := strings.TrimSuffix(fields[len(fields)-1], "\n")
112

113
		session = podmanTest.Podman([]string{"run", "--ipc=host", "--pid=host", ALPINE, "ls", "-l", "/proc/self/ns/ipc"})
114
		session.WaitWithDefaultTimeout()
115
		Expect(session).Should(ExitCleanly())
116
		fields = strings.Split(session.OutputToString(), " ")
117
		ctrIpcNS := strings.TrimSuffix(fields[len(fields)-1], "\n")
118

119
		Expect(hostPidNS).To(Equal(ctrPidNS))
120
		Expect(hostIpcNS).To(Equal(ctrIpcNS))
121
	})
122

123
})
124

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.