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