github.com/kaisenlinux/docker.io@v0.0.0-20230510090727-ea55db55fac7/engine/client/network_prune_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 "gotest.tools/v3/assert" 17 is "gotest.tools/v3/assert/cmp" 18 ) 19 20 func TestNetworksPruneError(t *testing.T) { 21 client := &Client{ 22 client: newMockClient(errorMock(http.StatusInternalServerError, "Server error")), 23 version: "1.25", 24 } 25 26 filters := filters.NewArgs() 27 28 _, err := client.NetworksPrune(context.Background(), filters) 29 if !errdefs.IsSystem(err) { 30 t.Fatalf("expected a Server Error, got %[1]T: %[1]v", err) 31 } 32 } 33 34 func TestNetworksPrune(t *testing.T) { 35 expectedURL := "/v1.25/networks/prune" 36 37 danglingFilters := filters.NewArgs() 38 danglingFilters.Add("dangling", "true") 39 40 noDanglingFilters := filters.NewArgs() 41 noDanglingFilters.Add("dangling", "false") 42 43 labelFilters := filters.NewArgs() 44 labelFilters.Add("dangling", "true") 45 labelFilters.Add("label", "label1=foo") 46 labelFilters.Add("label", "label2!=bar") 47 48 listCases := []struct { 49 filters filters.Args 50 expectedQueryParams map[string]string 51 }{ 52 { 53 filters: filters.Args{}, 54 expectedQueryParams: map[string]string{ 55 "until": "", 56 "filter": "", 57 "filters": "", 58 }, 59 }, 60 { 61 filters: danglingFilters, 62 expectedQueryParams: map[string]string{ 63 "until": "", 64 "filter": "", 65 "filters": `{"dangling":{"true":true}}`, 66 }, 67 }, 68 { 69 filters: noDanglingFilters, 70 expectedQueryParams: map[string]string{ 71 "until": "", 72 "filter": "", 73 "filters": `{"dangling":{"false":true}}`, 74 }, 75 }, 76 { 77 filters: labelFilters, 78 expectedQueryParams: map[string]string{ 79 "until": "", 80 "filter": "", 81 "filters": `{"dangling":{"true":true},"label":{"label1=foo":true,"label2!=bar":true}}`, 82 }, 83 }, 84 } 85 for _, listCase := range listCases { 86 client := &Client{ 87 client: newMockClient(func(req *http.Request) (*http.Response, error) { 88 if !strings.HasPrefix(req.URL.Path, expectedURL) { 89 return nil, fmt.Errorf("Expected URL '%s', got '%s'", expectedURL, req.URL) 90 } 91 query := req.URL.Query() 92 for key, expected := range listCase.expectedQueryParams { 93 actual := query.Get(key) 94 assert.Check(t, is.Equal(expected, actual)) 95 } 96 content, err := json.Marshal(types.NetworksPruneReport{ 97 NetworksDeleted: []string{"network_id1", "network_id2"}, 98 }) 99 if err != nil { 100 return nil, err 101 } 102 return &http.Response{ 103 StatusCode: http.StatusOK, 104 Body: io.NopCloser(bytes.NewReader(content)), 105 }, nil 106 }), 107 version: "1.25", 108 } 109 110 report, err := client.NetworksPrune(context.Background(), listCase.filters) 111 assert.Check(t, err) 112 assert.Check(t, is.Len(report.NetworksDeleted, 2)) 113 } 114 }