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