network_list_test.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. package client
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "fmt"
  6. "io/ioutil"
  7. "net/http"
  8. "strings"
  9. "testing"
  10. "github.com/docker/docker/api/types"
  11. "github.com/docker/docker/api/types/filters"
  12. "golang.org/x/net/context"
  13. )
  14. func TestNetworkListError(t *testing.T) {
  15. client := &Client{
  16. client: newMockClient(errorMock(http.StatusInternalServerError, "Server error")),
  17. }
  18. _, err := client.NetworkList(context.Background(), types.NetworkListOptions{
  19. Filters: filters.NewArgs(),
  20. })
  21. if err == nil || err.Error() != "Error response from daemon: Server error" {
  22. t.Fatalf("expected a Server Error, got %v", err)
  23. }
  24. }
  25. func TestNetworkList(t *testing.T) {
  26. expectedURL := "/networks"
  27. noDanglingFilters := filters.NewArgs()
  28. noDanglingFilters.Add("dangling", "false")
  29. danglingFilters := filters.NewArgs()
  30. danglingFilters.Add("dangling", "true")
  31. labelFilters := filters.NewArgs()
  32. labelFilters.Add("label", "label1")
  33. labelFilters.Add("label", "label2")
  34. listCases := []struct {
  35. options types.NetworkListOptions
  36. expectedFilters string
  37. }{
  38. {
  39. options: types.NetworkListOptions{
  40. Filters: filters.NewArgs(),
  41. },
  42. expectedFilters: "",
  43. }, {
  44. options: types.NetworkListOptions{
  45. Filters: noDanglingFilters,
  46. },
  47. expectedFilters: `{"dangling":{"false":true}}`,
  48. }, {
  49. options: types.NetworkListOptions{
  50. Filters: danglingFilters,
  51. },
  52. expectedFilters: `{"dangling":{"true":true}}`,
  53. }, {
  54. options: types.NetworkListOptions{
  55. Filters: labelFilters,
  56. },
  57. expectedFilters: `{"label":{"label1":true,"label2":true}}`,
  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. if req.Method != "GET" {
  67. return nil, fmt.Errorf("expected GET method, got %s", req.Method)
  68. }
  69. query := req.URL.Query()
  70. actualFilters := query.Get("filters")
  71. if actualFilters != listCase.expectedFilters {
  72. return nil, fmt.Errorf("filters not set in URL query properly. Expected '%s', got %s", listCase.expectedFilters, actualFilters)
  73. }
  74. content, err := json.Marshal([]types.NetworkResource{
  75. {
  76. Name: "network",
  77. Driver: "bridge",
  78. },
  79. })
  80. if err != nil {
  81. return nil, err
  82. }
  83. return &http.Response{
  84. StatusCode: http.StatusOK,
  85. Body: ioutil.NopCloser(bytes.NewReader(content)),
  86. }, nil
  87. }),
  88. }
  89. networkResources, err := client.NetworkList(context.Background(), listCase.options)
  90. if err != nil {
  91. t.Fatal(err)
  92. }
  93. if len(networkResources) != 1 {
  94. t.Fatalf("expected 1 network resource, got %v", networkResources)
  95. }
  96. }
  97. }