github.com/rsampaio/docker@v0.7.2-0.20150827203920-fdc73cc3fc31/integration-cli/docker_cli_volume_test.go (about)

     1  package main
     2  
     3  import (
     4  	"os/exec"
     5  	"strings"
     6  
     7  	"github.com/go-check/check"
     8  )
     9  
    10  func (s *DockerSuite) TestVolumeCliCreate(c *check.C) {
    11  	dockerCmd(c, "volume", "create")
    12  
    13  	_, err := runCommand(exec.Command(dockerBinary, "volume", "create", "-d", "nosuchdriver"))
    14  	c.Assert(err, check.Not(check.IsNil))
    15  
    16  	out, _ := dockerCmd(c, "volume", "create", "--name=test")
    17  	name := strings.TrimSpace(out)
    18  	c.Assert(name, check.Equals, "test")
    19  }
    20  
    21  func (s *DockerSuite) TestVolumeCliInspect(c *check.C) {
    22  	c.Assert(
    23  		exec.Command(dockerBinary, "volume", "inspect", "doesntexist").Run(),
    24  		check.Not(check.IsNil),
    25  		check.Commentf("volume inspect should error on non-existant volume"),
    26  	)
    27  
    28  	out, _ := dockerCmd(c, "volume", "create")
    29  	name := strings.TrimSpace(out)
    30  	out, _ = dockerCmd(c, "volume", "inspect", "--format='{{ .Name }}'", name)
    31  	c.Assert(strings.TrimSpace(out), check.Equals, name)
    32  
    33  	dockerCmd(c, "volume", "create", "--name", "test")
    34  	out, _ = dockerCmd(c, "volume", "inspect", "--format='{{ .Name }}'", "test")
    35  	c.Assert(strings.TrimSpace(out), check.Equals, "test")
    36  }
    37  
    38  func (s *DockerSuite) TestVolumeCliLs(c *check.C) {
    39  	out, _ := dockerCmd(c, "volume", "create")
    40  	id := strings.TrimSpace(out)
    41  
    42  	dockerCmd(c, "volume", "create", "--name", "test")
    43  	dockerCmd(c, "run", "-v", "/foo", "busybox", "ls", "/")
    44  
    45  	out, _ = dockerCmd(c, "volume", "ls")
    46  	outArr := strings.Split(strings.TrimSpace(out), "\n")
    47  	c.Assert(len(outArr), check.Equals, 4, check.Commentf("\n%s", out))
    48  
    49  	// Since there is no guarentee of ordering of volumes, we just make sure the names are in the output
    50  	c.Assert(strings.Contains(out, id+"\n"), check.Equals, true)
    51  	c.Assert(strings.Contains(out, "test\n"), check.Equals, true)
    52  }
    53  
    54  func (s *DockerSuite) TestVolumeCliRm(c *check.C) {
    55  	out, _ := dockerCmd(c, "volume", "create")
    56  	id := strings.TrimSpace(out)
    57  
    58  	dockerCmd(c, "volume", "create", "--name", "test")
    59  	dockerCmd(c, "volume", "rm", id)
    60  	dockerCmd(c, "volume", "rm", "test")
    61  
    62  	out, _ = dockerCmd(c, "volume", "ls")
    63  	outArr := strings.Split(strings.TrimSpace(out), "\n")
    64  	c.Assert(len(outArr), check.Equals, 1, check.Commentf("%s\n", out))
    65  
    66  	volumeID := "testing"
    67  	dockerCmd(c, "run", "-v", volumeID+":/foo", "--name=test", "busybox", "sh", "-c", "echo hello > /foo/bar")
    68  	out, _, err := runCommandWithOutput(exec.Command(dockerBinary, "volume", "rm", "testing"))
    69  	c.Assert(
    70  		err,
    71  		check.Not(check.IsNil),
    72  		check.Commentf("Should not be able to remove volume that is in use by a container\n%s", out))
    73  
    74  	out, _ = dockerCmd(c, "run", "--volumes-from=test", "--name=test2", "busybox", "sh", "-c", "cat /foo/bar")
    75  	c.Assert(strings.TrimSpace(out), check.Equals, "hello")
    76  	dockerCmd(c, "rm", "-fv", "test2")
    77  	dockerCmd(c, "volume", "inspect", volumeID)
    78  	dockerCmd(c, "rm", "-f", "test")
    79  
    80  	out, _ = dockerCmd(c, "run", "--name=test2", "-v", volumeID+":/foo", "busybox", "sh", "-c", "cat /foo/bar")
    81  	c.Assert(strings.TrimSpace(out), check.Equals, "hello", check.Commentf("volume data was removed"))
    82  	dockerCmd(c, "rm", "test2")
    83  
    84  	dockerCmd(c, "volume", "rm", volumeID)
    85  	c.Assert(
    86  		exec.Command("volume", "rm", "doesntexist").Run(),
    87  		check.Not(check.IsNil),
    88  		check.Commentf("volume rm should fail with non-existant volume"),
    89  	)
    90  }