remove_test.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package image
  2. import (
  3. "bytes"
  4. "fmt"
  5. "io/ioutil"
  6. "testing"
  7. "github.com/docker/docker/api/types"
  8. "github.com/docker/docker/cli/internal/test"
  9. "github.com/docker/docker/pkg/testutil"
  10. "github.com/docker/docker/pkg/testutil/golden"
  11. "github.com/pkg/errors"
  12. "github.com/stretchr/testify/assert"
  13. )
  14. func TestNewRemoveCommandAlias(t *testing.T) {
  15. cmd := newRemoveCommand(test.NewFakeCli(&fakeClient{}, new(bytes.Buffer)))
  16. assert.Equal(t, cmd.HasAlias("rmi"), true)
  17. assert.Equal(t, cmd.HasAlias("remove"), true)
  18. assert.Equal(t, cmd.HasAlias("other"), false)
  19. }
  20. func TestNewRemoveCommandErrors(t *testing.T) {
  21. testCases := []struct {
  22. name string
  23. args []string
  24. expectedError string
  25. imageRemoveFunc func(image string, options types.ImageRemoveOptions) ([]types.ImageDeleteResponseItem, error)
  26. }{
  27. {
  28. name: "wrong args",
  29. expectedError: "requires at least 1 argument(s).",
  30. },
  31. {
  32. name: "ImageRemove fail",
  33. args: []string{"arg1"},
  34. expectedError: "error removing image",
  35. imageRemoveFunc: func(image string, options types.ImageRemoveOptions) ([]types.ImageDeleteResponseItem, error) {
  36. assert.Equal(t, options.Force, false)
  37. assert.Equal(t, options.PruneChildren, true)
  38. return []types.ImageDeleteResponseItem{}, errors.Errorf("error removing image")
  39. },
  40. },
  41. }
  42. for _, tc := range testCases {
  43. cmd := NewRemoveCommand(test.NewFakeCli(&fakeClient{
  44. imageRemoveFunc: tc.imageRemoveFunc,
  45. }, new(bytes.Buffer)))
  46. cmd.SetOutput(ioutil.Discard)
  47. cmd.SetArgs(tc.args)
  48. assert.Error(t, cmd.Execute(), tc.expectedError)
  49. }
  50. }
  51. func TestNewRemoveCommandSuccess(t *testing.T) {
  52. testCases := []struct {
  53. name string
  54. args []string
  55. imageRemoveFunc func(image string, options types.ImageRemoveOptions) ([]types.ImageDeleteResponseItem, error)
  56. }{
  57. {
  58. name: "Image Deleted",
  59. args: []string{"image1"},
  60. imageRemoveFunc: func(image string, options types.ImageRemoveOptions) ([]types.ImageDeleteResponseItem, error) {
  61. assert.Equal(t, image, "image1")
  62. return []types.ImageDeleteResponseItem{{Deleted: image}}, nil
  63. },
  64. },
  65. {
  66. name: "Image Untagged",
  67. args: []string{"image1"},
  68. imageRemoveFunc: func(image string, options types.ImageRemoveOptions) ([]types.ImageDeleteResponseItem, error) {
  69. assert.Equal(t, image, "image1")
  70. return []types.ImageDeleteResponseItem{{Untagged: image}}, nil
  71. },
  72. },
  73. {
  74. name: "Image Deleted and Untagged",
  75. args: []string{"image1", "image2"},
  76. imageRemoveFunc: func(image string, options types.ImageRemoveOptions) ([]types.ImageDeleteResponseItem, error) {
  77. if image == "image1" {
  78. return []types.ImageDeleteResponseItem{{Untagged: image}}, nil
  79. }
  80. return []types.ImageDeleteResponseItem{{Deleted: image}}, nil
  81. },
  82. },
  83. }
  84. for _, tc := range testCases {
  85. buf := new(bytes.Buffer)
  86. cmd := NewRemoveCommand(test.NewFakeCli(&fakeClient{
  87. imageRemoveFunc: tc.imageRemoveFunc,
  88. }, buf))
  89. cmd.SetOutput(ioutil.Discard)
  90. cmd.SetArgs(tc.args)
  91. assert.NoError(t, cmd.Execute())
  92. err := cmd.Execute()
  93. assert.NoError(t, err)
  94. actual := buf.String()
  95. expected := string(golden.Get(t, []byte(actual), fmt.Sprintf("remove-command-success.%s.golden", tc.name))[:])
  96. testutil.EqualNormalizedString(t, testutil.RemoveSpace, actual, expected)
  97. }
  98. }