github.com/containers/podman/v2@v2.2.2-0.20210501105131-c1e07d070c4c/test/e2e/mount_test.go (about)

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