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