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  }