aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMatthew Heon <matthew.heon@pm.me>2019-10-17 11:25:28 -0400
committerMatthew Heon <matthew.heon@pm.me>2019-10-17 13:18:17 -0400
commit0d623914d01bcbc10beebf2db966e17da215dfbb (patch)
tree00ef58cddd025309918465e447d34bd5f26b644d /test
parentd7cbcfadd07e9c79831e51de294b307b00292d49 (diff)
downloadpodman-0d623914d01bcbc10beebf2db966e17da215dfbb.tar.gz
podman-0d623914d01bcbc10beebf2db966e17da215dfbb.tar.bz2
podman-0d623914d01bcbc10beebf2db966e17da215dfbb.zip
Add support for anonymous volumes to `podman run -v`
Previously, when `podman run` encountered a volume mount without separate source and destination (e.g. `-v /run`) we would assume that both were the same - a bind mount of `/run` on the host to `/run` in the container. However, this does not match Docker's behavior - in Docker, this makes an anonymous named volume that will be mounted at `/run`. We already have (more limited) support for these anonymous volumes in the form of image volumes. Extend this support to allow it to be used with user-created volumes coming in from the `-v` flag. This change also affects how named volumes created by the container but given names are treated by `podman run --rm` and `podman rm -v`. Previously, they would be removed with the container in these cases, but this did not match Docker's behaviour. Docker only removed anonymous volumes. With this patch we move to that model as well; `podman run -v testvol:/test` will not have `testvol` survive the container being removed by `podman rm -v`. The sum total of these changes let us turn on volume removal in `--rm` by default. Fixes: #4276 Signed-off-by: Matthew Heon <matthew.heon@pm.me>
Diffstat (limited to 'test')
-rw-r--r--test/e2e/run_volume_test.go77
1 files changed, 77 insertions, 0 deletions
diff --git a/test/e2e/run_volume_test.go b/test/e2e/run_volume_test.go
index 94bfebab7..d04eb07b3 100644
--- a/test/e2e/run_volume_test.go
+++ b/test/e2e/run_volume_test.go
@@ -280,4 +280,81 @@ var _ = Describe("Podman run with volumes", func() {
session2.WaitWithDefaultTimeout()
Expect(session2.ExitCode()).To(Equal(0))
})
+
+ It("podman run with anonymous volume", func() {
+ list1 := podmanTest.Podman([]string{"volume", "list", "--quiet"})
+ list1.WaitWithDefaultTimeout()
+ Expect(list1.ExitCode()).To(Equal(0))
+ Expect(list1.OutputToString()).To(Equal(""))
+
+ session := podmanTest.Podman([]string{"create", "-v", "/test", ALPINE, "top"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+
+ list2 := podmanTest.Podman([]string{"volume", "list", "--quiet"})
+ list2.WaitWithDefaultTimeout()
+ Expect(list2.ExitCode()).To(Equal(0))
+ arr := list2.OutputToStringArray()
+ Expect(len(arr)).To(Equal(1))
+ Expect(arr[0]).To(Not(Equal("")))
+ })
+
+ It("podman rm -v removes anonymous volume", func() {
+ list1 := podmanTest.Podman([]string{"volume", "list", "--quiet"})
+ list1.WaitWithDefaultTimeout()
+ Expect(list1.ExitCode()).To(Equal(0))
+ Expect(list1.OutputToString()).To(Equal(""))
+
+ ctrName := "testctr"
+ session := podmanTest.Podman([]string{"create", "--name", ctrName, "-v", "/test", ALPINE, "top"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+
+ list2 := podmanTest.Podman([]string{"volume", "list", "--quiet"})
+ list2.WaitWithDefaultTimeout()
+ Expect(list2.ExitCode()).To(Equal(0))
+ arr := list2.OutputToStringArray()
+ Expect(len(arr)).To(Equal(1))
+ Expect(arr[0]).To(Not(Equal("")))
+
+ remove := podmanTest.Podman([]string{"rm", "-v", ctrName})
+ remove.WaitWithDefaultTimeout()
+ Expect(remove.ExitCode()).To(Equal(0))
+
+ list3 := podmanTest.Podman([]string{"volume", "list", "--quiet"})
+ list3.WaitWithDefaultTimeout()
+ Expect(list3.ExitCode()).To(Equal(0))
+ Expect(list3.OutputToString()).To(Equal(""))
+ })
+
+ It("podman rm -v retains named volume", func() {
+ list1 := podmanTest.Podman([]string{"volume", "list", "--quiet"})
+ list1.WaitWithDefaultTimeout()
+ Expect(list1.ExitCode()).To(Equal(0))
+ Expect(list1.OutputToString()).To(Equal(""))
+
+ ctrName := "testctr"
+ volName := "testvol"
+ session := podmanTest.Podman([]string{"create", "--name", ctrName, "-v", fmt.Sprintf("%s:/test", volName), ALPINE, "top"})
+ session.WaitWithDefaultTimeout()
+ Expect(session.ExitCode()).To(Equal(0))
+
+ list2 := podmanTest.Podman([]string{"volume", "list", "--quiet"})
+ list2.WaitWithDefaultTimeout()
+ Expect(list2.ExitCode()).To(Equal(0))
+ arr := list2.OutputToStringArray()
+ Expect(len(arr)).To(Equal(1))
+ Expect(arr[0]).To(Equal(volName))
+
+ remove := podmanTest.Podman([]string{"rm", "-v", ctrName})
+ remove.WaitWithDefaultTimeout()
+ Expect(remove.ExitCode()).To(Equal(0))
+
+ list3 := podmanTest.Podman([]string{"volume", "list", "--quiet"})
+ list3.WaitWithDefaultTimeout()
+ Expect(list3.ExitCode()).To(Equal(0))
+ arr2 := list3.OutputToStringArray()
+ Expect(len(arr2)).To(Equal(1))
+ Expect(arr2[0]).To(Equal(volName))
+ })
})