github.com/containers/podman/v4@v4.9.4/test/e2e/run_ns_test.go (about)

     1  package integration
     2  
     3  import (
     4  	"os/exec"
     5  	"strings"
     6  
     7  	. "github.com/containers/podman/v4/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  })