network_list_test.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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"
  12. "github.com/docker/docker/api/types/filters"
  13. "github.com/docker/docker/errdefs"
  14. )
  15. func TestNetworkListError(t *testing.T) {
  16. client := &Client{
  17. client: newMockClient(errorMock(http.StatusInternalServerError, "Server error")),
  18. }
  19. _, err := client.NetworkList(context.Background(), types.NetworkListOptions{
  20. Filters: filters.NewArgs(),
  21. })
  22. if !errdefs.IsSystem(err) {
  23. t.Fatalf("expected a Server Error, got %[1]T: %[1]v", err)
  24. }
  25. }
  26. func TestNetworkList(t *testing.T) {
  27. expectedURL := "/networks"
  28. noDanglingFilters := filters.NewArgs()
  29. noDanglingFilters.Add("dangling", "false")
  30. danglingFilters := filters.NewArgs()
  31. danglingFilters.Add("dangling", "true")
  32. labelFilters := filters.NewArgs()
  33. labelFilters.Add("label", "label1")
  34. labelFilters.Add("label", "label2")
  35. listCases := []struct {
  36. options types.NetworkListOptions
  37. expectedFilters string
  38. }{
  39. {
  40. options: types.NetworkListOptions{
  41. Filters: filters.NewArgs(),
  42. },
  43. expectedFilters: "",
  44. }, {
  45. options: types.NetworkListOptions{
  46. Filters: noDanglingFilters,
  47. },
  48. expectedFilters: `{"dangling":{"false":true}}`,
  49. }, {
  50. options: types.NetworkListOptions{
  51. Filters: danglingFilters,
  52. },
  53. expectedFilters: `{"dangling":{"true":true}}`,
  54. }, {
  55. options: types.NetworkListOptions{
  56. Filters: labelFilters,
  57. },
  58. expectedFilters: `{"label":{"label1":true,"label2":true}}`,
  59. },
  60. }
  61. for _, listCase := range listCases {
  62. client := &Client{
  63. client: newMockClient(func(req *http.Request) (*http.Response, error) {
  64. if !strings.HasPrefix(req.URL.Path, expectedURL) {
  65. return nil, fmt.Errorf("Expected URL '%s', got '%s'", expectedURL, req.URL)
  66. }
  67. if req.Method != http.MethodGet {
  68. return nil, fmt.Errorf("expected GET method, got %s", req.Method)
  69. }
  70. query := req.URL.Query()
  71. actualFilters := query.Get("filters")
  72. if actualFilters != listCase.expectedFilters {
  73. return nil, fmt.Errorf("filters not set in URL query properly. Expected '%s', got %s", listCase.expectedFilters, actualFilters)
  74. }
  75. content, err := json.Marshal([]types.NetworkResource{
  76. {
  77. Name: "network",
  78. Driver: "bridge",
  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. networkResources, err := client.NetworkList(context.Background(), listCase.options)
  91. if err != nil {
  92. t.Fatal(err)
  93. }
  94. if len(networkResources) != 1 {
  95. t.Fatalf("expected 1 network resource, got %v", networkResources)
  96. }
  97. }
  98. }