volume_list_test.go 2.4 KB

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