github.com/mheon/docker@v0.11.2-0.20150922122814-44f47903a831/integration-cli/docker_cli_volume_test.go (about) 1 package main 2 3 import ( 4 "os/exec" 5 "strings" 6 7 "github.com/docker/docker/pkg/integration/checker" 8 "github.com/go-check/check" 9 ) 10 11 func (s *DockerSuite) TestVolumeCliCreate(c *check.C) { 12 testRequires(c, DaemonIsLinux) 13 dockerCmd(c, "volume", "create") 14 15 _, err := runCommand(exec.Command(dockerBinary, "volume", "create", "-d", "nosuchdriver")) 16 c.Assert(err, check.Not(check.IsNil)) 17 18 out, _ := dockerCmd(c, "volume", "create", "--name=test") 19 name := strings.TrimSpace(out) 20 c.Assert(name, check.Equals, "test") 21 } 22 23 func (s *DockerSuite) TestVolumeCliInspect(c *check.C) { 24 testRequires(c, DaemonIsLinux) 25 c.Assert( 26 exec.Command(dockerBinary, "volume", "inspect", "doesntexist").Run(), 27 check.Not(check.IsNil), 28 check.Commentf("volume inspect should error on non-existant volume"), 29 ) 30 31 out, _ := dockerCmd(c, "volume", "create") 32 name := strings.TrimSpace(out) 33 out, _ = dockerCmd(c, "volume", "inspect", "--format='{{ .Name }}'", name) 34 c.Assert(strings.TrimSpace(out), check.Equals, name) 35 36 dockerCmd(c, "volume", "create", "--name", "test") 37 out, _ = dockerCmd(c, "volume", "inspect", "--format='{{ .Name }}'", "test") 38 c.Assert(strings.TrimSpace(out), check.Equals, "test") 39 } 40 41 func (s *DockerSuite) TestVolumeCliLs(c *check.C) { 42 testRequires(c, DaemonIsLinux) 43 out, _ := dockerCmd(c, "volume", "create") 44 id := strings.TrimSpace(out) 45 46 dockerCmd(c, "volume", "create", "--name", "test") 47 dockerCmd(c, "run", "-v", "/foo", "busybox", "ls", "/") 48 49 out, _ = dockerCmd(c, "volume", "ls") 50 outArr := strings.Split(strings.TrimSpace(out), "\n") 51 c.Assert(len(outArr), check.Equals, 4, check.Commentf("\n%s", out)) 52 53 // Since there is no guarentee of ordering of volumes, we just make sure the names are in the output 54 c.Assert(strings.Contains(out, id+"\n"), check.Equals, true) 55 c.Assert(strings.Contains(out, "test\n"), check.Equals, true) 56 } 57 58 func (s *DockerSuite) TestVolumeCliLsFilterDangling(c *check.C) { 59 testRequires(c, DaemonIsLinux) 60 61 dockerCmd(c, "volume", "create", "--name", "testnotinuse1") 62 dockerCmd(c, "volume", "create", "--name", "testisinuse1") 63 dockerCmd(c, "volume", "create", "--name", "testisinuse2") 64 65 // Make sure both "created" (but not started), and started 66 // containers are included in reference counting 67 dockerCmd(c, "run", "--name", "volume-test1", "-v", "testisinuse1:/foo", "busybox", "true") 68 dockerCmd(c, "create", "--name", "volume-test2", "-v", "testisinuse2:/foo", "busybox", "true") 69 70 out, _ := dockerCmd(c, "volume", "ls") 71 72 // No filter, all volumes should show 73 c.Assert(out, checker.Contains, "testnotinuse1\n", check.Commentf("expected volume 'testnotinuse1' in output")) 74 c.Assert(out, checker.Contains, "testisinuse1\n", check.Commentf("expected volume 'testisinuse1' in output")) 75 c.Assert(out, checker.Contains, "testisinuse2\n", check.Commentf("expected volume 'testisinuse2' in output")) 76 77 out, _ = dockerCmd(c, "volume", "ls", "--filter", "dangling=false") 78 79 // Same as above, but expicitly disabling dangling 80 c.Assert(out, checker.Contains, "testnotinuse1\n", check.Commentf("expected volume 'testnotinuse1' in output")) 81 c.Assert(out, checker.Contains, "testisinuse1\n", check.Commentf("expected volume 'testisinuse1' in output")) 82 c.Assert(out, checker.Contains, "testisinuse2\n", check.Commentf("expected volume 'testisinuse2' in output")) 83 84 out, _ = dockerCmd(c, "volume", "ls", "--filter", "dangling=true") 85 86 // Filter "dangling" volumes; ony "dangling" (unused) volumes should be in the output 87 c.Assert(out, checker.Contains, "testnotinuse1\n", check.Commentf("expected volume 'testnotinuse1' in output")) 88 c.Assert(out, check.Not(checker.Contains), "testisinuse1\n", check.Commentf("volume 'testisinuse1' in output, but not expected")) 89 c.Assert(out, check.Not(checker.Contains), "testisinuse2\n", check.Commentf("volume 'testisinuse2' in output, but not expected")) 90 } 91 92 func (s *DockerSuite) TestVolumeCliRm(c *check.C) { 93 testRequires(c, DaemonIsLinux) 94 out, _ := dockerCmd(c, "volume", "create") 95 id := strings.TrimSpace(out) 96 97 dockerCmd(c, "volume", "create", "--name", "test") 98 dockerCmd(c, "volume", "rm", id) 99 dockerCmd(c, "volume", "rm", "test") 100 101 out, _ = dockerCmd(c, "volume", "ls") 102 outArr := strings.Split(strings.TrimSpace(out), "\n") 103 c.Assert(len(outArr), check.Equals, 1, check.Commentf("%s\n", out)) 104 105 volumeID := "testing" 106 dockerCmd(c, "run", "-v", volumeID+":/foo", "--name=test", "busybox", "sh", "-c", "echo hello > /foo/bar") 107 out, _, err := runCommandWithOutput(exec.Command(dockerBinary, "volume", "rm", "testing")) 108 c.Assert( 109 err, 110 check.Not(check.IsNil), 111 check.Commentf("Should not be able to remove volume that is in use by a container\n%s", out)) 112 113 out, _ = dockerCmd(c, "run", "--volumes-from=test", "--name=test2", "busybox", "sh", "-c", "cat /foo/bar") 114 c.Assert(strings.TrimSpace(out), check.Equals, "hello") 115 dockerCmd(c, "rm", "-fv", "test2") 116 dockerCmd(c, "volume", "inspect", volumeID) 117 dockerCmd(c, "rm", "-f", "test") 118 119 out, _ = dockerCmd(c, "run", "--name=test2", "-v", volumeID+":/foo", "busybox", "sh", "-c", "cat /foo/bar") 120 c.Assert(strings.TrimSpace(out), check.Equals, "hello", check.Commentf("volume data was removed")) 121 dockerCmd(c, "rm", "test2") 122 123 dockerCmd(c, "volume", "rm", volumeID) 124 c.Assert( 125 exec.Command("volume", "rm", "doesntexist").Run(), 126 check.Not(check.IsNil), 127 check.Commentf("volume rm should fail with non-existant volume"), 128 ) 129 } 130 131 func (s *DockerSuite) TestVolumeCliNoArgs(c *check.C) { 132 out, _ := dockerCmd(c, "volume") 133 // no args should produce the `volume ls` output 134 c.Assert(strings.Contains(out, "DRIVER"), check.Equals, true) 135 136 // invalid arg should error and show the command usage on stderr 137 _, stderr, _, err := runCommandWithStdoutStderr(exec.Command(dockerBinary, "volume", "somearg")) 138 c.Assert(err, check.NotNil) 139 140 expected := "Usage: docker volume [OPTIONS] [COMMAND]" 141 c.Assert(strings.Contains(stderr, expected), check.Equals, true) 142 }