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  }