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