github.com/endophage/docker@v1.4.2-0.20161027011718-242853499895/client/volume_list_test.go (about) 1 package client 2 3 import ( 4 "bytes" 5 "encoding/json" 6 "fmt" 7 "io/ioutil" 8 "net/http" 9 "strings" 10 "testing" 11 12 "github.com/docker/docker/api/types" 13 "github.com/docker/docker/api/types/filters" 14 "golang.org/x/net/context" 15 ) 16 17 func TestVolumeListError(t *testing.T) { 18 client := &Client{ 19 client: newMockClient(errorMock(http.StatusInternalServerError, "Server error")), 20 } 21 22 _, err := client.VolumeList(context.Background(), filters.NewArgs()) 23 if err == nil || err.Error() != "Error response from daemon: Server error" { 24 t.Fatalf("expected a Server Error, got %v", err) 25 } 26 } 27 28 func TestVolumeList(t *testing.T) { 29 expectedURL := "/volumes" 30 31 noDanglingFilters := filters.NewArgs() 32 noDanglingFilters.Add("dangling", "false") 33 34 danglingFilters := filters.NewArgs() 35 danglingFilters.Add("dangling", "true") 36 37 labelFilters := filters.NewArgs() 38 labelFilters.Add("label", "label1") 39 labelFilters.Add("label", "label2") 40 41 listCases := []struct { 42 filters filters.Args 43 expectedFilters string 44 }{ 45 { 46 filters: filters.NewArgs(), 47 expectedFilters: "", 48 }, { 49 filters: noDanglingFilters, 50 expectedFilters: `{"dangling":{"false":true}}`, 51 }, { 52 filters: danglingFilters, 53 expectedFilters: `{"dangling":{"true":true}}`, 54 }, { 55 filters: labelFilters, 56 expectedFilters: `{"label":{"label1":true,"label2":true}}`, 57 }, 58 } 59 60 for _, listCase := range listCases { 61 client := &Client{ 62 client: newMockClient(func(req *http.Request) (*http.Response, error) { 63 if !strings.HasPrefix(req.URL.Path, expectedURL) { 64 return nil, fmt.Errorf("Expected URL '%s', got '%s'", expectedURL, req.URL) 65 } 66 query := req.URL.Query() 67 actualFilters := query.Get("filters") 68 if actualFilters != listCase.expectedFilters { 69 return nil, fmt.Errorf("filters not set in URL query properly. Expected '%s', got %s", listCase.expectedFilters, actualFilters) 70 } 71 content, err := json.Marshal(types.VolumesListResponse{ 72 Volumes: []*types.Volume{ 73 { 74 Name: "volume", 75 Driver: "local", 76 }, 77 }, 78 }) 79 if err != nil { 80 return nil, err 81 } 82 return &http.Response{ 83 StatusCode: http.StatusOK, 84 Body: ioutil.NopCloser(bytes.NewReader(content)), 85 }, nil 86 }), 87 } 88 89 volumeResponse, err := client.VolumeList(context.Background(), listCase.filters) 90 if err != nil { 91 t.Fatal(err) 92 } 93 if len(volumeResponse.Volumes) != 1 { 94 t.Fatalf("expected 1 volume, got %v", volumeResponse.Volumes) 95 } 96 } 97 }