github.com/xeptore/docker-cli@v20.10.14+incompatible/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/v3/assert" 13 is "gotest.tools/v3/assert/cmp" 14 "gotest.tools/v3/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.SetOut(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: "label-filter", 75 args: []string{"--force", "--filter", "label=foobar"}, 76 imagesPruneFunc: func(pruneFilter filters.Args) (types.ImagesPruneReport, error) { 77 assert.Check(t, is.Equal("foobar", pruneFilter.Get("label")[0])) 78 return types.ImagesPruneReport{}, nil 79 }, 80 }, 81 { 82 name: "force-untagged", 83 args: []string{"--force"}, 84 imagesPruneFunc: func(pruneFilter filters.Args) (types.ImagesPruneReport, error) { 85 assert.Check(t, is.Equal("true", pruneFilter.Get("dangling")[0])) 86 return types.ImagesPruneReport{ 87 ImagesDeleted: []types.ImageDeleteResponseItem{{Untagged: "image1"}}, 88 SpaceReclaimed: 2, 89 }, nil 90 }, 91 }, 92 } 93 for _, tc := range testCases { 94 cli := test.NewFakeCli(&fakeClient{imagesPruneFunc: tc.imagesPruneFunc}) 95 cmd := NewPruneCommand(cli) 96 cmd.SetOut(ioutil.Discard) 97 cmd.SetArgs(tc.args) 98 err := cmd.Execute() 99 assert.NilError(t, err) 100 golden.Assert(t, cli.OutBuffer().String(), fmt.Sprintf("prune-command-success.%s.golden", tc.name)) 101 } 102 }