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  })