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