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  }