12 "github.com/docker/docker/api/types"
13 "github.com/docker/docker/api/types/filters"
14 volumetypes "github.com/docker/docker/api/types/volume"
15 "golang.org/x/net/context"
18 func TestVolumeListError(t *testing.T) {
20 client: newMockClient(errorMock(http.StatusInternalServerError, "Server error")),
23 _, err := client.VolumeList(context.Background(), filters.NewArgs())
24 if err == nil || err.Error() != "Error response from daemon: Server error" {
25 t.Fatalf("expected a Server Error, got %v", err)
29 func TestVolumeList(t *testing.T) {
30 expectedURL := "/volumes"
32 noDanglingFilters := filters.NewArgs()
33 noDanglingFilters.Add("dangling", "false")
35 danglingFilters := filters.NewArgs()
36 danglingFilters.Add("dangling", "true")
38 labelFilters := filters.NewArgs()
39 labelFilters.Add("label", "label1")
40 labelFilters.Add("label", "label2")
42 listCases := []struct {
44 expectedFilters string
47 filters: filters.NewArgs(),
50 filters: noDanglingFilters,
51 expectedFilters: `{"dangling":{"false":true}}`,
53 filters: danglingFilters,
54 expectedFilters: `{"dangling":{"true":true}}`,
56 filters: labelFilters,
57 expectedFilters: `{"label":{"label1":true,"label2":true}}`,
61 for _, listCase := range listCases {
63 client: newMockClient(func(req *http.Request) (*http.Response, error) {
64 if !strings.HasPrefix(req.URL.Path, expectedURL) {
65 return nil, fmt.Errorf("Expected URL '%s', got '%s'", expectedURL, req.URL)
67 query := req.URL.Query()
68 actualFilters := query.Get("filters")
69 if actualFilters != listCase.expectedFilters {
70 return nil, fmt.Errorf("filters not set in URL query properly. Expected '%s', got %s", listCase.expectedFilters, actualFilters)
72 content, err := json.Marshal(volumetypes.VolumesListOKBody{
73 Volumes: []*types.Volume{
83 return &http.Response{
84 StatusCode: http.StatusOK,
85 Body: ioutil.NopCloser(bytes.NewReader(content)),
90 volumeResponse, err := client.VolumeList(context.Background(), listCase.filters)
94 if len(volumeResponse.Volumes) != 1 {
95 t.Fatalf("expected 1 volume, got %v", volumeResponse.Volumes)