github.com/AliyunContainerService/cli@v0.0.0-20181009023821-814ced4b30d0/cli/command/image/prune_test.go (about) 1 package image 2 3 import ( 4 "fmt" 5 "io/ioutil" 6 "testing" 7 8 "github.com/docker/cli/internal/test" 9 "github.com/docker/docker/api/types" 10 "github.com/docker/docker/api/types/filters" 11 "github.com/pkg/errors" 12 "gotest.tools/assert" 13 is "gotest.tools/assert/cmp" 14 "gotest.tools/golden" 15 ) 16 17 func TestNewPruneCommandErrors(t *testing.T) { 18 testCases := []struct { 19 name string 20 args []string 21 expectedError string 22 imagesPruneFunc func(pruneFilter filters.Args) (types.ImagesPruneReport, error) 23 }{ 24 { 25 name: "wrong-args", 26 args: []string{"something"}, 27 expectedError: "accepts no arguments.", 28 }, 29 { 30 name: "prune-error", 31 args: []string{"--force"}, 32 expectedError: "something went wrong", 33 imagesPruneFunc: func(pruneFilter filters.Args) (types.ImagesPruneReport, error) { 34 return types.ImagesPruneReport{}, errors.Errorf("something went wrong") 35 }, 36 }, 37 } 38 for _, tc := range testCases { 39 cmd := NewPruneCommand(test.NewFakeCli(&fakeClient{ 40 imagesPruneFunc: tc.imagesPruneFunc, 41 })) 42 cmd.SetOutput(ioutil.Discard) 43 cmd.SetArgs(tc.args) 44 assert.ErrorContains(t, cmd.Execute(), tc.expectedError) 45 } 46 } 47 48 func TestNewPruneCommandSuccess(t *testing.T) { 49 testCases := []struct { 50 name string 51 args []string 52 imagesPruneFunc func(pruneFilter filters.Args) (types.ImagesPruneReport, error) 53 }{ 54 { 55 name: "all", 56 args: []string{"--all"}, 57 imagesPruneFunc: func(pruneFilter filters.Args) (types.ImagesPruneReport, error) { 58 assert.Check(t, is.Equal("false", pruneFilter.Get("dangling")[0])) 59 return types.ImagesPruneReport{}, nil 60 }, 61 }, 62 { 63 name: "force-deleted", 64 args: []string{"--force"}, 65 imagesPruneFunc: func(pruneFilter filters.Args) (types.ImagesPruneReport, error) { 66 assert.Check(t, is.Equal("true", pruneFilter.Get("dangling")[0])) 67 return types.ImagesPruneReport{ 68 ImagesDeleted: []types.ImageDeleteResponseItem{{Deleted: "image1"}}, 69 SpaceReclaimed: 1, 70 }, nil 71 }, 72 }, 73 { 74 name: "force-untagged", 75 args: []string{"--force"}, 76 imagesPruneFunc: func(pruneFilter filters.Args) (types.ImagesPruneReport, error) { 77 assert.Check(t, is.Equal("true", pruneFilter.Get("dangling")[0])) 78 return types.ImagesPruneReport{ 79 ImagesDeleted: []types.ImageDeleteResponseItem{{Untagged: "image1"}}, 80 SpaceReclaimed: 2, 81 }, nil 82 }, 83 }, 84 } 85 for _, tc := range testCases { 86 cli := test.NewFakeCli(&fakeClient{imagesPruneFunc: tc.imagesPruneFunc}) 87 cmd := NewPruneCommand(cli) 88 cmd.SetOutput(ioutil.Discard) 89 cmd.SetArgs(tc.args) 90 err := cmd.Execute() 91 assert.NilError(t, err) 92 golden.Assert(t, cli.OutBuffer().String(), fmt.Sprintf("prune-command-success.%s.golden", tc.name)) 93 } 94 }