github.com/ph/moby@v1.13.1/client/network_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 TestNetworkListError(t *testing.T) { 18 client := &Client{ 19 client: newMockClient(errorMock(http.StatusInternalServerError, "Server error")), 20 } 21 22 _, err := client.NetworkList(context.Background(), types.NetworkListOptions{ 23 Filters: filters.NewArgs(), 24 }) 25 if err == nil || err.Error() != "Error response from daemon: Server error" { 26 t.Fatalf("expected a Server Error, got %v", err) 27 } 28 } 29 30 func TestNetworkList(t *testing.T) { 31 expectedURL := "/networks" 32 33 noDanglingFilters := filters.NewArgs() 34 noDanglingFilters.Add("dangling", "false") 35 36 danglingFilters := filters.NewArgs() 37 danglingFilters.Add("dangling", "true") 38 39 labelFilters := filters.NewArgs() 40 labelFilters.Add("label", "label1") 41 labelFilters.Add("label", "label2") 42 43 listCases := []struct { 44 options types.NetworkListOptions 45 expectedFilters string 46 }{ 47 { 48 options: types.NetworkListOptions{ 49 Filters: filters.NewArgs(), 50 }, 51 expectedFilters: "", 52 }, { 53 options: types.NetworkListOptions{ 54 Filters: noDanglingFilters, 55 }, 56 expectedFilters: `{"dangling":{"false":true}}`, 57 }, { 58 options: types.NetworkListOptions{ 59 Filters: danglingFilters, 60 }, 61 expectedFilters: `{"dangling":{"true":true}}`, 62 }, { 63 options: types.NetworkListOptions{ 64 Filters: labelFilters, 65 }, 66 expectedFilters: `{"label":{"label1":true,"label2":true}}`, 67 }, 68 } 69 70 for _, listCase := range listCases { 71 client := &Client{ 72 client: newMockClient(func(req *http.Request) (*http.Response, error) { 73 if !strings.HasPrefix(req.URL.Path, expectedURL) { 74 return nil, fmt.Errorf("Expected URL '%s', got '%s'", expectedURL, req.URL) 75 } 76 if req.Method != "GET" { 77 return nil, fmt.Errorf("expected GET method, got %s", req.Method) 78 } 79 query := req.URL.Query() 80 actualFilters := query.Get("filters") 81 if actualFilters != listCase.expectedFilters { 82 return nil, fmt.Errorf("filters not set in URL query properly. Expected '%s', got %s", listCase.expectedFilters, actualFilters) 83 } 84 content, err := json.Marshal([]types.NetworkResource{ 85 { 86 Name: "network", 87 Driver: "bridge", 88 }, 89 }) 90 if err != nil { 91 return nil, err 92 } 93 return &http.Response{ 94 StatusCode: http.StatusOK, 95 Body: ioutil.NopCloser(bytes.NewReader(content)), 96 }, nil 97 }), 98 } 99 100 networkResources, err := client.NetworkList(context.Background(), listCase.options) 101 if err != nil { 102 t.Fatal(err) 103 } 104 if len(networkResources) != 1 { 105 t.Fatalf("expected 1 network resource, got %v", networkResources) 106 } 107 } 108 }