github.com/jiasir/docker@v1.3.3-0.20170609024000-252e610103e7/integration-cli/docker_api_volumes_test.go (about) 1 package main 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "net/http" 7 "path/filepath" 8 "strings" 9 "time" 10 11 "github.com/docker/docker/api/types" 12 volumetypes "github.com/docker/docker/api/types/volume" 13 "github.com/docker/docker/integration-cli/checker" 14 "github.com/docker/docker/integration-cli/request" 15 "github.com/go-check/check" 16 ) 17 18 func (s *DockerSuite) TestVolumesAPIList(c *check.C) { 19 prefix, _ := getPrefixAndSlashFromDaemonPlatform() 20 dockerCmd(c, "run", "-v", prefix+"/foo", "busybox") 21 22 status, b, err := request.SockRequest("GET", "/volumes", nil, daemonHost()) 23 c.Assert(err, checker.IsNil) 24 c.Assert(status, checker.Equals, http.StatusOK) 25 26 var volumes volumetypes.VolumesListOKBody 27 c.Assert(json.Unmarshal(b, &volumes), checker.IsNil) 28 29 c.Assert(len(volumes.Volumes), checker.Equals, 1, check.Commentf("\n%v", volumes.Volumes)) 30 } 31 32 func (s *DockerSuite) TestVolumesAPICreate(c *check.C) { 33 config := volumetypes.VolumesCreateBody{ 34 Name: "test", 35 } 36 status, b, err := request.SockRequest("POST", "/volumes/create", config, daemonHost()) 37 c.Assert(err, check.IsNil) 38 c.Assert(status, check.Equals, http.StatusCreated, check.Commentf(string(b))) 39 40 var vol types.Volume 41 err = json.Unmarshal(b, &vol) 42 c.Assert(err, checker.IsNil) 43 44 c.Assert(filepath.Base(filepath.Dir(vol.Mountpoint)), checker.Equals, config.Name) 45 } 46 47 func (s *DockerSuite) TestVolumesAPIRemove(c *check.C) { 48 prefix, _ := getPrefixAndSlashFromDaemonPlatform() 49 dockerCmd(c, "run", "-v", prefix+"/foo", "--name=test", "busybox") 50 51 status, b, err := request.SockRequest("GET", "/volumes", nil, daemonHost()) 52 c.Assert(err, checker.IsNil) 53 c.Assert(status, checker.Equals, http.StatusOK) 54 55 var volumes volumetypes.VolumesListOKBody 56 c.Assert(json.Unmarshal(b, &volumes), checker.IsNil) 57 c.Assert(len(volumes.Volumes), checker.Equals, 1, check.Commentf("\n%v", volumes.Volumes)) 58 59 v := volumes.Volumes[0] 60 status, _, err = request.SockRequest("DELETE", "/volumes/"+v.Name, nil, daemonHost()) 61 c.Assert(err, checker.IsNil) 62 c.Assert(status, checker.Equals, http.StatusConflict, check.Commentf("Should not be able to remove a volume that is in use")) 63 64 dockerCmd(c, "rm", "-f", "test") 65 status, data, err := request.SockRequest("DELETE", "/volumes/"+v.Name, nil, daemonHost()) 66 c.Assert(err, checker.IsNil) 67 c.Assert(status, checker.Equals, http.StatusNoContent, check.Commentf(string(data))) 68 69 } 70 71 func (s *DockerSuite) TestVolumesAPIInspect(c *check.C) { 72 config := volumetypes.VolumesCreateBody{ 73 Name: "test", 74 } 75 // sampling current time minus a minute so to now have false positive in case of delays 76 now := time.Now().Truncate(time.Minute) 77 status, b, err := request.SockRequest("POST", "/volumes/create", config, daemonHost()) 78 c.Assert(err, check.IsNil) 79 c.Assert(status, check.Equals, http.StatusCreated, check.Commentf(string(b))) 80 81 status, b, err = request.SockRequest("GET", "/volumes", nil, daemonHost()) 82 c.Assert(err, checker.IsNil) 83 c.Assert(status, checker.Equals, http.StatusOK, check.Commentf(string(b))) 84 85 var volumes volumetypes.VolumesListOKBody 86 c.Assert(json.Unmarshal(b, &volumes), checker.IsNil) 87 c.Assert(len(volumes.Volumes), checker.Equals, 1, check.Commentf("\n%v", volumes.Volumes)) 88 89 var vol types.Volume 90 status, b, err = request.SockRequest("GET", "/volumes/"+config.Name, nil, daemonHost()) 91 c.Assert(err, checker.IsNil) 92 c.Assert(status, checker.Equals, http.StatusOK, check.Commentf(string(b))) 93 c.Assert(json.Unmarshal(b, &vol), checker.IsNil) 94 c.Assert(vol.Name, checker.Equals, config.Name) 95 96 // comparing CreatedAt field time for the new volume to now. Removing a minute from both to avoid false positive 97 testCreatedAt, err := time.Parse(time.RFC3339, strings.TrimSpace(vol.CreatedAt)) 98 c.Assert(err, check.IsNil) 99 testCreatedAt = testCreatedAt.Truncate(time.Minute) 100 if !testCreatedAt.Equal(now) { 101 c.Assert(fmt.Errorf("Time Volume is CreatedAt not equal to current time"), check.NotNil) 102 } 103 }