github.com/fabiokung/docker@v0.11.2-0.20170222101415-4534dcd49497/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/docker/docker/pkg/testutil/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.Error(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 listCases := []struct { 40 filters filters.Args 41 expectedQueryParams map[string]string 42 }{ 43 { 44 filters: filters.Args{}, 45 expectedQueryParams: map[string]string{ 46 "until": "", 47 "filter": "", 48 "filters": "", 49 }, 50 }, 51 { 52 filters: danglingFilters, 53 expectedQueryParams: map[string]string{ 54 "until": "", 55 "filter": "", 56 "filters": `{"dangling":{"true":true}}`, 57 }, 58 }, 59 { 60 filters: noDanglingFilters, 61 expectedQueryParams: map[string]string{ 62 "until": "", 63 "filter": "", 64 "filters": `{"dangling":{"false":true}}`, 65 }, 66 }, 67 } 68 for _, listCase := range listCases { 69 client := &Client{ 70 client: newMockClient(func(req *http.Request) (*http.Response, error) { 71 if !strings.HasPrefix(req.URL.Path, expectedURL) { 72 return nil, fmt.Errorf("Expected URL '%s', got '%s'", expectedURL, req.URL) 73 } 74 query := req.URL.Query() 75 for key, expected := range listCase.expectedQueryParams { 76 actual := query.Get(key) 77 assert.Equal(t, actual, expected) 78 } 79 content, err := json.Marshal(types.ImagesPruneReport{ 80 ImagesDeleted: []types.ImageDeleteResponseItem{ 81 { 82 Deleted: "image_id1", 83 }, 84 { 85 Deleted: "image_id2", 86 }, 87 }, 88 SpaceReclaimed: 9999, 89 }) 90 if err != nil { 91 return nil, err 92 } 93 return &http.Response{ 94 StatusCode: http.StatusOK, 95 Body: ioutil.NopCloser(bytes.NewReader(content)), 96 }, nil 97 }), 98 version: "1.25", 99 } 100 101 report, err := client.ImagesPrune(context.Background(), listCase.filters) 102 assert.NilError(t, err) 103 assert.Equal(t, len(report.ImagesDeleted), 2) 104 assert.Equal(t, report.SpaceReclaimed, uint64(9999)) 105 } 106 }