docker_api_volumes_test.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. package main
  2. import (
  3. "fmt"
  4. "path/filepath"
  5. "strings"
  6. "time"
  7. "github.com/docker/docker/api/types/filters"
  8. volumetypes "github.com/docker/docker/api/types/volume"
  9. "github.com/docker/docker/client"
  10. "github.com/docker/docker/integration-cli/checker"
  11. "github.com/go-check/check"
  12. "golang.org/x/net/context"
  13. )
  14. func (s *DockerSuite) TestVolumesAPIList(c *check.C) {
  15. prefix, _ := getPrefixAndSlashFromDaemonPlatform()
  16. dockerCmd(c, "run", "-v", prefix+"/foo", "busybox")
  17. cli, err := client.NewEnvClient()
  18. c.Assert(err, checker.IsNil)
  19. defer cli.Close()
  20. volumes, err := cli.VolumeList(context.Background(), filters.Args{})
  21. c.Assert(err, checker.IsNil)
  22. c.Assert(len(volumes.Volumes), checker.Equals, 1, check.Commentf("\n%v", volumes.Volumes))
  23. }
  24. func (s *DockerSuite) TestVolumesAPICreate(c *check.C) {
  25. config := volumetypes.VolumesCreateBody{
  26. Name: "test",
  27. }
  28. cli, err := client.NewEnvClient()
  29. c.Assert(err, checker.IsNil)
  30. defer cli.Close()
  31. vol, err := cli.VolumeCreate(context.Background(), config)
  32. c.Assert(err, check.IsNil)
  33. c.Assert(filepath.Base(filepath.Dir(vol.Mountpoint)), checker.Equals, config.Name)
  34. }
  35. func (s *DockerSuite) TestVolumesAPIRemove(c *check.C) {
  36. prefix, _ := getPrefixAndSlashFromDaemonPlatform()
  37. dockerCmd(c, "run", "-v", prefix+"/foo", "--name=test", "busybox")
  38. cli, err := client.NewEnvClient()
  39. c.Assert(err, checker.IsNil)
  40. defer cli.Close()
  41. volumes, err := cli.VolumeList(context.Background(), filters.Args{})
  42. c.Assert(err, checker.IsNil)
  43. v := volumes.Volumes[0]
  44. err = cli.VolumeRemove(context.Background(), v.Name, false)
  45. c.Assert(err.Error(), checker.Contains, "volume is in use")
  46. dockerCmd(c, "rm", "-f", "test")
  47. err = cli.VolumeRemove(context.Background(), v.Name, false)
  48. c.Assert(err, checker.IsNil)
  49. }
  50. func (s *DockerSuite) TestVolumesAPIInspect(c *check.C) {
  51. config := volumetypes.VolumesCreateBody{
  52. Name: "test",
  53. }
  54. // sampling current time minus a minute so to now have false positive in case of delays
  55. now := time.Now().Truncate(time.Minute)
  56. cli, err := client.NewEnvClient()
  57. c.Assert(err, checker.IsNil)
  58. defer cli.Close()
  59. _, err = cli.VolumeCreate(context.Background(), config)
  60. c.Assert(err, check.IsNil)
  61. volumes, err := cli.VolumeList(context.Background(), filters.Args{})
  62. c.Assert(err, checker.IsNil)
  63. c.Assert(len(volumes.Volumes), checker.Equals, 1, check.Commentf("\n%v", volumes.Volumes))
  64. vol, err := cli.VolumeInspect(context.Background(), config.Name)
  65. c.Assert(err, checker.IsNil)
  66. c.Assert(vol.Name, checker.Equals, config.Name)
  67. // comparing CreatedAt field time for the new volume to now. Removing a minute from both to avoid false positive
  68. testCreatedAt, err := time.Parse(time.RFC3339, strings.TrimSpace(vol.CreatedAt))
  69. c.Assert(err, check.IsNil)
  70. testCreatedAt = testCreatedAt.Truncate(time.Minute)
  71. if !testCreatedAt.Equal(now) {
  72. c.Assert(fmt.Errorf("Time Volume is CreatedAt not equal to current time"), check.NotNil)
  73. }
  74. }