github.com/hanks177/podman/v4@v4.1.3-0.20220613032544-16d90015bc83/test/e2e/run_ns_test.go (about) 1 package integration 2 3 import ( 4 "os" 5 "os/exec" 6 "strings" 7 8 . "github.com/hanks177/podman/v4/test/utils" 9 . "github.com/onsi/ginkgo" 10 . "github.com/onsi/gomega" 11 . "github.com/onsi/gomega/gexec" 12 ) 13 14 var _ = Describe("Podman run ns", func() { 15 var ( 16 tempdir string 17 err error 18 podmanTest *PodmanTestIntegration 19 ) 20 21 BeforeEach(func() { 22 tempdir, err = CreateTempDirInTempDir() 23 if err != nil { 24 os.Exit(1) 25 } 26 podmanTest = PodmanTestCreate(tempdir) 27 podmanTest.Setup() 28 }) 29 30 AfterEach(func() { 31 podmanTest.Cleanup() 32 f := CurrentGinkgoTestDescription() 33 processTestResult(f) 34 35 }) 36 37 It("podman run pidns test", func() { 38 SkipIfRootlessCgroupsV1("Not supported for rootless + CgroupsV1") 39 session := podmanTest.Podman([]string{"run", fedoraMinimal, "bash", "-c", "echo $$"}) 40 session.WaitWithDefaultTimeout() 41 Expect(session).Should(Exit(0)) 42 Expect(session.OutputToString()).To(Equal("1")) 43 44 session = podmanTest.Podman([]string{"run", "--pid=host", fedoraMinimal, "bash", "-c", "echo $$"}) 45 session.WaitWithDefaultTimeout() 46 Expect(session).Should(Exit(0)) 47 Expect(session.OutputToString()).To(Not(Equal("1"))) 48 49 session = podmanTest.Podman([]string{"run", "--pid=badpid", fedoraMinimal, "bash", "-c", "echo $$"}) 50 session.WaitWithDefaultTimeout() 51 Expect(session).To(ExitWithError()) 52 }) 53 54 It("podman run --cgroup private test", func() { 55 session := podmanTest.Podman([]string{"run", "--cgroupns=private", fedoraMinimal, "cat", "/proc/self/cgroup"}) 56 session.WaitWithDefaultTimeout() 57 Expect(session).Should(Exit(0)) 58 59 output := session.OutputToString() 60 Expect(output).ToNot(ContainSubstring("slice")) 61 }) 62 63 It("podman run ipcns test", func() { 64 setup := SystemExec("ls", []string{"--inode", "-d", "/dev/shm"}) 65 Expect(setup).Should(Exit(0)) 66 hostShm := setup.OutputToString() 67 68 session := podmanTest.Podman([]string{"run", "--ipc=host", fedoraMinimal, "ls", "--inode", "-d", "/dev/shm"}) 69 session.WaitWithDefaultTimeout() 70 Expect(session).Should(Exit(0)) 71 Expect(session.OutputToString()).To(Equal(hostShm)) 72 }) 73 74 It("podman run ipcns ipcmk host test", func() { 75 setup := SystemExec("ipcmk", []string{"-M", "1024"}) 76 Expect(setup).Should(Exit(0)) 77 output := strings.Split(setup.OutputToString(), " ") 78 ipc := output[len(output)-1] 79 session := podmanTest.Podman([]string{"run", "--ipc=host", fedoraMinimal, "ipcs", "-m", "-i", ipc}) 80 session.WaitWithDefaultTimeout() 81 Expect(session).Should(Exit(0)) 82 83 setup = SystemExec("ipcrm", []string{"-m", ipc}) 84 Expect(setup).Should(Exit(0)) 85 }) 86 87 It("podman run ipcns ipcmk container test", func() { 88 setup := podmanTest.Podman([]string{"run", "-d", "--name", "test1", fedoraMinimal, "sleep", "999"}) 89 setup.WaitWithDefaultTimeout() 90 Expect(setup).Should(Exit(0)) 91 92 session := podmanTest.Podman([]string{"exec", "test1", "ipcmk", "-M", "1024"}) 93 session.WaitWithDefaultTimeout() 94 Expect(session).Should(Exit(0)) 95 output := strings.Split(session.OutputToString(), " ") 96 ipc := output[len(output)-1] 97 session = podmanTest.Podman([]string{"run", "--ipc=container:test1", fedoraMinimal, "ipcs", "-m", "-i", ipc}) 98 session.WaitWithDefaultTimeout() 99 Expect(session).Should(Exit(0)) 100 }) 101 102 It("podman run bad ipc pid test", func() { 103 session := podmanTest.Podman([]string{"run", "--ipc=badpid", fedoraMinimal, "bash", "-c", "echo $$"}) 104 session.WaitWithDefaultTimeout() 105 Expect(session).To(ExitWithError()) 106 }) 107 108 It("podman run mounts fresh cgroup", func() { 109 session := podmanTest.Podman([]string{"run", fedoraMinimal, "grep", "cgroup", "/proc/self/mountinfo"}) 110 session.WaitWithDefaultTimeout() 111 Expect(session).Should(Exit(0)) 112 output := session.OutputToString() 113 Expect(output).ToNot(ContainSubstring("..")) 114 }) 115 116 It("podman run --ipc=host --pid=host", func() { 117 SkipIfRootlessCgroupsV1("Not supported for rootless + CgroupsV1") 118 cmd := exec.Command("ls", "-l", "/proc/self/ns/pid") 119 res, err := cmd.Output() 120 Expect(err).To(BeNil()) 121 fields := strings.Split(string(res), " ") 122 hostPidNS := strings.TrimSuffix(fields[len(fields)-1], "\n") 123 124 cmd = exec.Command("ls", "-l", "/proc/self/ns/ipc") 125 res, err = cmd.Output() 126 Expect(err).To(BeNil()) 127 fields = strings.Split(string(res), " ") 128 hostIpcNS := strings.TrimSuffix(fields[len(fields)-1], "\n") 129 130 session := podmanTest.Podman([]string{"run", "--ipc=host", "--pid=host", ALPINE, "ls", "-l", "/proc/self/ns/pid"}) 131 session.WaitWithDefaultTimeout() 132 Expect(session).Should(Exit(0)) 133 fields = strings.Split(session.OutputToString(), " ") 134 ctrPidNS := strings.TrimSuffix(fields[len(fields)-1], "\n") 135 136 session = podmanTest.Podman([]string{"run", "--ipc=host", "--pid=host", ALPINE, "ls", "-l", "/proc/self/ns/ipc"}) 137 session.WaitWithDefaultTimeout() 138 Expect(session).Should(Exit(0)) 139 fields = strings.Split(session.OutputToString(), " ") 140 ctrIpcNS := strings.TrimSuffix(fields[len(fields)-1], "\n") 141 142 Expect(hostPidNS).To(Equal(ctrPidNS)) 143 Expect(hostIpcNS).To(Equal(ctrIpcNS)) 144 }) 145 146 })