github.com/kaisenlinux/docker.io@v0.0.0-20230510090727-ea55db55fac7/engine/client/container_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 TestContainersPruneError(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.ContainersPrune(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 TestContainersPrune(t *testing.T) { 35 expectedURL := "/v1.25/containers/prune" 36 37 danglingFilters := filters.NewArgs() 38 danglingFilters.Add("dangling", "true") 39 40 noDanglingFilters := filters.NewArgs() 41 noDanglingFilters.Add("dangling", "false") 42 43 danglingUntilFilters := filters.NewArgs() 44 danglingUntilFilters.Add("dangling", "true") 45 danglingUntilFilters.Add("until", "2016-12-15T14:00") 46 47 labelFilters := filters.NewArgs() 48 labelFilters.Add("dangling", "true") 49 labelFilters.Add("label", "label1=foo") 50 labelFilters.Add("label", "label2!=bar") 51 52 listCases := []struct { 53 filters filters.Args 54 expectedQueryParams map[string]string 55 }{ 56 { 57 filters: filters.Args{}, 58 expectedQueryParams: map[string]string{ 59 "until": "", 60 "filter": "", 61 "filters": "", 62 }, 63 }, 64 { 65 filters: danglingFilters, 66 expectedQueryParams: map[string]string{ 67 "until": "", 68 "filter": "", 69 "filters": `{"dangling":{"true":true}}`, 70 }, 71 }, 72 { 73 filters: danglingUntilFilters, 74 expectedQueryParams: map[string]string{ 75 "until": "", 76 "filter": "", 77 "filters": `{"dangling":{"true":true},"until":{"2016-12-15T14:00":true}}`, 78 }, 79 }, 80 { 81 filters: noDanglingFilters, 82 expectedQueryParams: map[string]string{ 83 "until": "", 84 "filter": "", 85 "filters": `{"dangling":{"false":true}}`, 86 }, 87 }, 88 { 89 filters: labelFilters, 90 expectedQueryParams: map[string]string{ 91 "until": "", 92 "filter": "", 93 "filters": `{"dangling":{"true":true},"label":{"label1=foo":true,"label2!=bar":true}}`, 94 }, 95 }, 96 } 97 for _, listCase := range listCases { 98 client := &Client{ 99 client: newMockClient(func(req *http.Request) (*http.Response, error) { 100 if !strings.HasPrefix(req.URL.Path, expectedURL) { 101 return nil, fmt.Errorf("Expected URL '%s', got '%s'", expectedURL, req.URL) 102 } 103 query := req.URL.Query() 104 for key, expected := range listCase.expectedQueryParams { 105 actual := query.Get(key) 106 assert.Check(t, is.Equal(expected, actual)) 107 } 108 content, err := json.Marshal(types.ContainersPruneReport{ 109 ContainersDeleted: []string{"container_id1", "container_id2"}, 110 SpaceReclaimed: 9999, 111 }) 112 if err != nil { 113 return nil, err 114 } 115 return &http.Response{ 116 StatusCode: http.StatusOK, 117 Body: io.NopCloser(bytes.NewReader(content)), 118 }, nil 119 }), 120 version: "1.25", 121 } 122 123 report, err := client.ContainersPrune(context.Background(), listCase.filters) 124 assert.Check(t, err) 125 assert.Check(t, is.Len(report.ContainersDeleted, 2)) 126 assert.Check(t, is.Equal(uint64(9999), report.SpaceReclaimed)) 127 } 128 }