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