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