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