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