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