github.com/containers/podman/v4@v4.9.4/test/e2e/mount_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 mount", func() {
    10  
    11  	BeforeEach(func() {
    12  		SkipIfRemote("Podman mount not supported for remote connections")
    13  		SkipIfRootless("Podman mount requires podman unshare first to work")
    14  		podmanTest.AddImageToRWStore(ALPINE)
    15  	})
    16  
    17  	It("podman mount", func() {
    18  		setup := podmanTest.Podman([]string{"create", ALPINE, "ls"})
    19  		setup.WaitWithDefaultTimeout()
    20  		Expect(setup).Should(ExitCleanly())
    21  		cid := setup.OutputToString()
    22  
    23  		mount := podmanTest.Podman([]string{"mount", cid})
    24  		mount.WaitWithDefaultTimeout()
    25  		Expect(mount).Should(ExitCleanly())
    26  
    27  		umount := podmanTest.Podman([]string{"umount", cid})
    28  		umount.WaitWithDefaultTimeout()
    29  		Expect(umount).Should(ExitCleanly())
    30  	})
    31  
    32  	It("podman container mount", func() {
    33  		setup := podmanTest.Podman([]string{"container", "create", ALPINE, "ls"})
    34  		setup.WaitWithDefaultTimeout()
    35  		Expect(setup).Should(ExitCleanly())
    36  		cid := setup.OutputToString()
    37  
    38  		mount := podmanTest.Podman([]string{"container", "mount", cid})
    39  		mount.WaitWithDefaultTimeout()
    40  		Expect(mount).Should(ExitCleanly())
    41  
    42  		umount := podmanTest.Podman([]string{"container", "umount", cid})
    43  		umount.WaitWithDefaultTimeout()
    44  		Expect(umount).Should(ExitCleanly())
    45  	})
    46  
    47  	It("podman mount with json format", func() {
    48  		setup := podmanTest.Podman([]string{"create", ALPINE, "ls"})
    49  		setup.WaitWithDefaultTimeout()
    50  		Expect(setup).Should(ExitCleanly())
    51  		cid := setup.OutputToString()
    52  
    53  		mount := podmanTest.Podman([]string{"mount", cid})
    54  		mount.WaitWithDefaultTimeout()
    55  		Expect(mount).Should(ExitCleanly())
    56  
    57  		j := podmanTest.Podman([]string{"mount", "--format=json"})
    58  		j.WaitWithDefaultTimeout()
    59  		Expect(j).Should(ExitCleanly())
    60  		Expect(j.OutputToString()).To(BeValidJSON())
    61  
    62  		j = podmanTest.Podman([]string{"mount", "--format='{{.foobar}}'"})
    63  		j.WaitWithDefaultTimeout()
    64  		Expect(j).To(ExitWithError())
    65  		Expect(j.ErrorToString()).To(ContainSubstring("unknown --format"))
    66  
    67  		umount := podmanTest.Podman([]string{"umount", cid})
    68  		umount.WaitWithDefaultTimeout()
    69  		Expect(umount).Should(ExitCleanly())
    70  	})
    71  
    72  	It("podman mount many", func() {
    73  		setup1 := podmanTest.Podman([]string{"create", ALPINE, "ls"})
    74  		setup1.WaitWithDefaultTimeout()
    75  		Expect(setup1).Should(ExitCleanly())
    76  		cid1 := setup1.OutputToString()
    77  
    78  		setup2 := podmanTest.Podman([]string{"create", ALPINE, "ls"})
    79  		setup2.WaitWithDefaultTimeout()
    80  		Expect(setup2).Should(ExitCleanly())
    81  		cid2 := setup2.OutputToString()
    82  
    83  		setup3 := podmanTest.Podman([]string{"create", ALPINE, "ls"})
    84  		setup3.WaitWithDefaultTimeout()
    85  		Expect(setup3).Should(ExitCleanly())
    86  		cid3 := setup3.OutputToString()
    87  
    88  		mount1 := podmanTest.Podman([]string{"mount", cid1, cid2, cid3})
    89  		mount1.WaitWithDefaultTimeout()
    90  		Expect(mount1).Should(ExitCleanly())
    91  
    92  		umount := podmanTest.Podman([]string{"umount", cid1, cid2, cid3})
    93  		umount.WaitWithDefaultTimeout()
    94  		Expect(umount).Should(ExitCleanly())
    95  	})
    96  
    97  	It("podman umount many", func() {
    98  		setup1 := podmanTest.Podman([]string{"create", ALPINE, "ls"})
    99  		setup1.WaitWithDefaultTimeout()
   100  		Expect(setup1).Should(ExitCleanly())
   101  		cid1 := setup1.OutputToString()
   102  
   103  		setup2 := podmanTest.Podman([]string{"create", ALPINE, "ls"})
   104  		setup2.WaitWithDefaultTimeout()
   105  		Expect(setup2).Should(ExitCleanly())
   106  		cid2 := setup2.OutputToString()
   107  
   108  		mount1 := podmanTest.Podman([]string{"mount", cid1})
   109  		mount1.WaitWithDefaultTimeout()
   110  		Expect(mount1).Should(ExitCleanly())
   111  
   112  		mount2 := podmanTest.Podman([]string{"mount", cid2})
   113  		mount2.WaitWithDefaultTimeout()
   114  		Expect(mount2).Should(ExitCleanly())
   115  
   116  		umount := podmanTest.Podman([]string{"umount", cid1, cid2})
   117  		umount.WaitWithDefaultTimeout()
   118  		Expect(umount).Should(ExitCleanly())
   119  	})
   120  
   121  	It("podman umount all", func() {
   122  		setup1 := podmanTest.Podman([]string{"create", ALPINE, "ls"})
   123  		setup1.WaitWithDefaultTimeout()
   124  		Expect(setup1).Should(ExitCleanly())
   125  		cid1 := setup1.OutputToString()
   126  
   127  		setup2 := podmanTest.Podman([]string{"create", ALPINE, "ls"})
   128  		setup2.WaitWithDefaultTimeout()
   129  		Expect(setup2).Should(ExitCleanly())
   130  		cid2 := setup2.OutputToString()
   131  
   132  		mount1 := podmanTest.Podman([]string{"mount", cid1})
   133  		mount1.WaitWithDefaultTimeout()
   134  		Expect(mount1).Should(ExitCleanly())
   135  
   136  		mount2 := podmanTest.Podman([]string{"mount", cid2})
   137  		mount2.WaitWithDefaultTimeout()
   138  		Expect(mount2).Should(ExitCleanly())
   139  
   140  		umount := podmanTest.Podman([]string{"umount", "--all"})
   141  		umount.WaitWithDefaultTimeout()
   142  		Expect(umount).Should(ExitCleanly())
   143  	})
   144  
   145  	It("podman list mounted container", func() {
   146  		setup := podmanTest.Podman([]string{"create", ALPINE, "ls"})
   147  		setup.WaitWithDefaultTimeout()
   148  		Expect(setup).Should(ExitCleanly())
   149  		cid := setup.OutputToString()
   150  
   151  		lmount := podmanTest.Podman([]string{"mount", "--no-trunc"})
   152  		lmount.WaitWithDefaultTimeout()
   153  		Expect(lmount).Should(ExitCleanly())
   154  		Expect(lmount.OutputToString()).To(Equal(""))
   155  
   156  		mount := podmanTest.Podman([]string{"mount", cid})
   157  		mount.WaitWithDefaultTimeout()
   158  		Expect(mount).Should(ExitCleanly())
   159  
   160  		lmount = podmanTest.Podman([]string{"mount", "--no-trunc"})
   161  		lmount.WaitWithDefaultTimeout()
   162  		Expect(lmount).Should(ExitCleanly())
   163  		Expect(lmount.OutputToString()).To(ContainSubstring(cid))
   164  
   165  		umount := podmanTest.Podman([]string{"umount", cid})
   166  		umount.WaitWithDefaultTimeout()
   167  		Expect(umount).Should(ExitCleanly())
   168  	})
   169  
   170  	It("podman list running container", func() {
   171  
   172  		setup := podmanTest.Podman([]string{"run", "-dt", ALPINE, "top"})
   173  		setup.WaitWithDefaultTimeout()
   174  		Expect(setup).Should(ExitCleanly())
   175  		cid := setup.OutputToString()
   176  
   177  		lmount := podmanTest.Podman([]string{"mount", "--no-trunc"})
   178  		lmount.WaitWithDefaultTimeout()
   179  		Expect(lmount).Should(ExitCleanly())
   180  		Expect(lmount.OutputToString()).To(ContainSubstring(cid))
   181  
   182  		stop := podmanTest.Podman([]string{"stop", cid})
   183  		stop.WaitWithDefaultTimeout()
   184  		Expect(stop).Should(ExitCleanly())
   185  
   186  		lmount = podmanTest.Podman([]string{"mount", "--no-trunc"})
   187  		lmount.WaitWithDefaultTimeout()
   188  		Expect(lmount).Should(ExitCleanly())
   189  		Expect(lmount.OutputToString()).To(Equal(""))
   190  	})
   191  
   192  	It("podman list multiple mounted containers", func() {
   193  
   194  		setup := podmanTest.Podman([]string{"create", ALPINE, "ls"})
   195  		setup.WaitWithDefaultTimeout()
   196  		Expect(setup).Should(ExitCleanly())
   197  		cid1 := setup.OutputToString()
   198  
   199  		setup = podmanTest.Podman([]string{"create", ALPINE, "ls"})
   200  		setup.WaitWithDefaultTimeout()
   201  		Expect(setup).Should(ExitCleanly())
   202  		cid2 := setup.OutputToString()
   203  
   204  		setup = podmanTest.Podman([]string{"create", ALPINE, "ls"})
   205  		setup.WaitWithDefaultTimeout()
   206  		Expect(setup).Should(ExitCleanly())
   207  		cid3 := setup.OutputToString()
   208  
   209  		lmount := podmanTest.Podman([]string{"mount", "--no-trunc"})
   210  		lmount.WaitWithDefaultTimeout()
   211  		Expect(lmount).Should(ExitCleanly())
   212  		Expect(lmount.OutputToString()).To(Equal(""))
   213  
   214  		mount := podmanTest.Podman([]string{"mount", cid1, cid3})
   215  		mount.WaitWithDefaultTimeout()
   216  		Expect(mount).Should(ExitCleanly())
   217  
   218  		lmount = podmanTest.Podman([]string{"mount", "--no-trunc"})
   219  		lmount.WaitWithDefaultTimeout()
   220  		Expect(lmount).Should(ExitCleanly())
   221  		Expect(lmount.OutputToString()).To(ContainSubstring(cid1))
   222  		Expect(lmount.OutputToString()).ToNot(ContainSubstring(cid2))
   223  		Expect(lmount.OutputToString()).To(ContainSubstring(cid3))
   224  
   225  		umount := podmanTest.Podman([]string{"umount", cid1, cid3})
   226  		umount.WaitWithDefaultTimeout()
   227  		Expect(umount).Should(ExitCleanly())
   228  
   229  		lmount = podmanTest.Podman([]string{"mount", "--no-trunc"})
   230  		lmount.WaitWithDefaultTimeout()
   231  		Expect(lmount).Should(ExitCleanly())
   232  		Expect(lmount.OutputToString()).To(Equal(""))
   233  
   234  	})
   235  
   236  	It("podman list mounted container", func() {
   237  
   238  		setup := podmanTest.Podman([]string{"create", ALPINE, "ls"})
   239  		setup.WaitWithDefaultTimeout()
   240  		Expect(setup).Should(ExitCleanly())
   241  		cid := setup.OutputToString()
   242  
   243  		lmount := podmanTest.Podman([]string{"mount", "--no-trunc"})
   244  		lmount.WaitWithDefaultTimeout()
   245  		Expect(lmount).Should(ExitCleanly())
   246  		Expect(lmount.OutputToString()).To(Equal(""))
   247  
   248  		mount := podmanTest.Podman([]string{"mount", cid})
   249  		mount.WaitWithDefaultTimeout()
   250  		Expect(mount).Should(ExitCleanly())
   251  
   252  		// test --notruncate alias
   253  		lmount = podmanTest.Podman([]string{"mount", "--notruncate"})
   254  		lmount.WaitWithDefaultTimeout()
   255  		Expect(lmount).Should(ExitCleanly())
   256  		Expect(lmount.OutputToString()).To(ContainSubstring(cid))
   257  
   258  		umount := podmanTest.Podman([]string{"umount", cid})
   259  		umount.WaitWithDefaultTimeout()
   260  		Expect(umount).Should(ExitCleanly())
   261  	})
   262  
   263  	It("podman image mount", func() {
   264  		images := podmanTest.Podman([]string{"images"})
   265  		images.WaitWithDefaultTimeout()
   266  		Expect(images).Should(ExitCleanly())
   267  
   268  		mount := podmanTest.Podman([]string{"image", "mount", ALPINE})
   269  		mount.WaitWithDefaultTimeout()
   270  		Expect(mount).Should(ExitCleanly())
   271  
   272  		umount := podmanTest.Podman([]string{"image", "umount", ALPINE})
   273  		umount.WaitWithDefaultTimeout()
   274  		Expect(umount).Should(ExitCleanly())
   275  
   276  		mount = podmanTest.Podman([]string{"image", "mount"})
   277  		mount.WaitWithDefaultTimeout()
   278  		Expect(mount).Should(ExitCleanly())
   279  		Expect(mount.OutputToString()).To(Equal(""))
   280  
   281  		// Mount multiple times
   282  		mount = podmanTest.Podman([]string{"image", "mount", ALPINE})
   283  		mount.WaitWithDefaultTimeout()
   284  		Expect(mount).Should(ExitCleanly())
   285  
   286  		mount = podmanTest.Podman([]string{"image", "mount", ALPINE})
   287  		mount.WaitWithDefaultTimeout()
   288  		Expect(mount).Should(ExitCleanly())
   289  
   290  		// Unmount once
   291  		mount = podmanTest.Podman([]string{"image", "mount", ALPINE})
   292  		mount.WaitWithDefaultTimeout()
   293  		Expect(mount).Should(ExitCleanly())
   294  
   295  		mount = podmanTest.Podman([]string{"image", "mount"})
   296  		mount.WaitWithDefaultTimeout()
   297  		Expect(mount).Should(ExitCleanly())
   298  		Expect(mount.OutputToString()).To(ContainSubstring(ALPINE))
   299  
   300  		mount = podmanTest.Podman([]string{"image", "umount", "--all"})
   301  		mount.WaitWithDefaultTimeout()
   302  		Expect(mount).Should(ExitCleanly())
   303  	})
   304  
   305  	It("podman mount with json format", func() {
   306  		podmanTest.AddImageToRWStore(fedoraMinimal)
   307  		mount := podmanTest.Podman([]string{"image", "mount", fedoraMinimal})
   308  		mount.WaitWithDefaultTimeout()
   309  		Expect(mount).Should(ExitCleanly())
   310  
   311  		j := podmanTest.Podman([]string{"image", "mount", "--format=json"})
   312  		j.WaitWithDefaultTimeout()
   313  		Expect(j).Should(ExitCleanly())
   314  		Expect(j.OutputToString()).To(BeValidJSON())
   315  
   316  		umount := podmanTest.Podman([]string{"image", "umount", fedoraMinimal})
   317  		umount.WaitWithDefaultTimeout()
   318  		Expect(umount).Should(ExitCleanly())
   319  	})
   320  
   321  	It("podman umount --all", func() {
   322  		podmanTest.AddImageToRWStore(fedoraMinimal)
   323  		mount := podmanTest.Podman([]string{"image", "mount", fedoraMinimal})
   324  		mount.WaitWithDefaultTimeout()
   325  		Expect(mount).Should(ExitCleanly())
   326  
   327  		umount := podmanTest.Podman([]string{"image", "umount", "--all"})
   328  		umount.WaitWithDefaultTimeout()
   329  		Expect(umount).Should(ExitCleanly())
   330  		Expect(umount.OutputToStringArray()).To(HaveLen(1))
   331  	})
   332  
   333  	It("podman mount many", func() {
   334  		Skip("Issue where using short name when we have a lookaside store")
   335  		podmanTest.AddImageToRWStore(fedoraMinimal)
   336  		podmanTest.AddImageToRWStore(BB)
   337  
   338  		mount1 := podmanTest.Podman([]string{"image", "mount", fedoraMinimal, ALPINE, "busybox"})
   339  		mount1.WaitWithDefaultTimeout()
   340  		Expect(mount1).Should(ExitCleanly())
   341  
   342  		umount := podmanTest.Podman([]string{"image", "umount", fedoraMinimal, ALPINE})
   343  		umount.WaitWithDefaultTimeout()
   344  		Expect(umount).Should(ExitCleanly())
   345  
   346  		mount := podmanTest.Podman([]string{"image", "mount"})
   347  		mount.WaitWithDefaultTimeout()
   348  		Expect(mount).Should(ExitCleanly())
   349  		Expect(mount.OutputToString()).To(ContainSubstring("busybox"))
   350  
   351  		mount1 = podmanTest.Podman([]string{"image", "unmount", "busybox"})
   352  		mount1.WaitWithDefaultTimeout()
   353  		Expect(mount1).Should(ExitCleanly())
   354  
   355  		mount = podmanTest.Podman([]string{"image", "mount"})
   356  		mount.WaitWithDefaultTimeout()
   357  		Expect(mount).Should(ExitCleanly())
   358  		Expect(mount.OutputToString()).To(Equal(""))
   359  
   360  		mount1 = podmanTest.Podman([]string{"image", "mount", fedoraMinimal, ALPINE, "busybox"})
   361  		mount1.WaitWithDefaultTimeout()
   362  		Expect(mount1).Should(ExitCleanly())
   363  
   364  		mount = podmanTest.Podman([]string{"image", "mount"})
   365  		mount.WaitWithDefaultTimeout()
   366  		Expect(mount).Should(ExitCleanly())
   367  		Expect(mount.OutputToString()).To(ContainSubstring(fedoraMinimal))
   368  		Expect(mount.OutputToString()).To(ContainSubstring(ALPINE))
   369  
   370  		umount = podmanTest.Podman([]string{"image", "umount", "--all"})
   371  		umount.WaitWithDefaultTimeout()
   372  		Expect(umount).Should(ExitCleanly())
   373  
   374  		mount = podmanTest.Podman([]string{"image", "mount"})
   375  		mount.WaitWithDefaultTimeout()
   376  		Expect(mount).Should(ExitCleanly())
   377  		Expect(mount.OutputToString()).To(Equal(""))
   378  
   379  		umount = podmanTest.Podman([]string{"image", "umount", fedoraMinimal, ALPINE})
   380  		umount.WaitWithDefaultTimeout()
   381  		Expect(umount).Should(ExitCleanly())
   382  
   383  		mount1 = podmanTest.Podman([]string{"image", "mount", "--all"})
   384  		mount1.WaitWithDefaultTimeout()
   385  		Expect(mount1).Should(ExitCleanly())
   386  
   387  		mount = podmanTest.Podman([]string{"image", "mount"})
   388  		mount.WaitWithDefaultTimeout()
   389  		Expect(mount).Should(ExitCleanly())
   390  		Expect(mount.OutputToString()).To(ContainSubstring(fedoraMinimal))
   391  		Expect(mount.OutputToString()).To(ContainSubstring(ALPINE))
   392  
   393  		umount = podmanTest.Podman([]string{"image", "umount", "--all"})
   394  		umount.WaitWithDefaultTimeout()
   395  		Expect(umount).Should(ExitCleanly())
   396  
   397  		mount = podmanTest.Podman([]string{"image", "mount"})
   398  		mount.WaitWithDefaultTimeout()
   399  		Expect(mount).Should(ExitCleanly())
   400  		Expect(mount.OutputToString()).To(Equal(""))
   401  	})
   402  })