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