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