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

     1  package integration
     2  
     3  import (
     4  	. "github.com/containers/podman/v4/test/utils"
     5  	. "github.com/onsi/ginkgo/v2"
     6  	. "github.com/onsi/gomega"
     7  )
     8  
     9  var _ = Describe("Podman run exit", func() {
    10  
    11  	It("podman run -d mount cleanup test", func() {
    12  		SkipIfRemote("podman-remote does not support mount")
    13  		SkipIfRootless("rootless podman mount requires podman unshare first")
    14  
    15  		result := podmanTest.Podman([]string{"run", "-dt", ALPINE, "top"})
    16  		result.WaitWithDefaultTimeout()
    17  		cid := result.OutputToString()
    18  		Expect(result).Should(ExitCleanly())
    19  
    20  		mount := SystemExec("mount", nil)
    21  		Expect(mount).Should(ExitCleanly())
    22  		Expect(mount.OutputToString()).To(ContainSubstring(cid))
    23  
    24  		pmount := podmanTest.Podman([]string{"mount", "--no-trunc"})
    25  		pmount.WaitWithDefaultTimeout()
    26  		Expect(pmount).Should(ExitCleanly())
    27  		Expect(pmount.OutputToString()).To(ContainSubstring(cid))
    28  
    29  		stop := podmanTest.Podman([]string{"stop", cid})
    30  		stop.WaitWithDefaultTimeout()
    31  		Expect(stop).Should(ExitCleanly())
    32  
    33  		// We have to force cleanup so the unmount happens
    34  		podmanCleanupSession := podmanTest.Podman([]string{"container", "cleanup", cid})
    35  		podmanCleanupSession.WaitWithDefaultTimeout()
    36  		Expect(podmanCleanupSession).Should(ExitCleanly())
    37  
    38  		mount = SystemExec("mount", nil)
    39  		Expect(mount).Should(ExitCleanly())
    40  		Expect(mount.OutputToString()).NotTo(ContainSubstring(cid))
    41  
    42  		pmount = podmanTest.Podman([]string{"mount", "--no-trunc"})
    43  		pmount.WaitWithDefaultTimeout()
    44  		Expect(pmount).Should(ExitCleanly())
    45  		Expect(pmount.OutputToString()).NotTo(ContainSubstring(cid))
    46  	})
    47  
    48  	It("podman run -d mount cleanup rootless test", func() {
    49  		SkipIfRemote("podman-remote does not support mount")
    50  		SkipIfNotRootless("Use unshare in rootless only")
    51  
    52  		result := podmanTest.Podman([]string{"run", "-dt", ALPINE, "top"})
    53  		result.WaitWithDefaultTimeout()
    54  		cid := result.OutputToString()
    55  		Expect(result).Should(ExitCleanly())
    56  
    57  		mount := podmanTest.Podman([]string{"unshare", "mount"})
    58  		mount.WaitWithDefaultTimeout()
    59  		Expect(mount).Should(ExitCleanly())
    60  		Expect(mount.OutputToString()).To(ContainSubstring(cid))
    61  
    62  		// command: podman <options> unshare podman <options> image mount ALPINE
    63  		args := []string{"unshare", podmanTest.PodmanBinary}
    64  		opts := podmanTest.PodmanMakeOptions([]string{"mount", "--no-trunc"}, false, false)
    65  		args = append(args, opts...)
    66  
    67  		pmount := podmanTest.Podman(args)
    68  		pmount.WaitWithDefaultTimeout()
    69  		Expect(pmount).Should(ExitCleanly())
    70  		Expect(pmount.OutputToString()).To(ContainSubstring(cid))
    71  
    72  		stop := podmanTest.Podman([]string{"stop", cid})
    73  		stop.WaitWithDefaultTimeout()
    74  		Expect(stop).Should(ExitCleanly())
    75  
    76  		// We have to force cleanup so the unmount happens
    77  		podmanCleanupSession := podmanTest.Podman([]string{"container", "cleanup", cid})
    78  		podmanCleanupSession.WaitWithDefaultTimeout()
    79  		Expect(podmanCleanupSession).Should(ExitCleanly())
    80  
    81  		mount = podmanTest.Podman([]string{"unshare", "mount"})
    82  		mount.WaitWithDefaultTimeout()
    83  		Expect(mount).Should(ExitCleanly())
    84  		Expect(mount.OutputToString()).NotTo(ContainSubstring(cid))
    85  
    86  		pmount = podmanTest.Podman(args)
    87  		pmount.WaitWithDefaultTimeout()
    88  		Expect(pmount).Should(ExitCleanly())
    89  		Expect(pmount.OutputToString()).NotTo(ContainSubstring(cid))
    90  	})
    91  })