load_test.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. package image
  2. import (
  3. "bytes"
  4. "fmt"
  5. "io"
  6. "io/ioutil"
  7. "strings"
  8. "testing"
  9. "github.com/docker/docker/api/types"
  10. "github.com/docker/docker/cli/internal/test"
  11. "github.com/docker/docker/pkg/testutil"
  12. "github.com/docker/docker/pkg/testutil/golden"
  13. "github.com/pkg/errors"
  14. "github.com/stretchr/testify/assert"
  15. )
  16. func TestNewLoadCommandErrors(t *testing.T) {
  17. testCases := []struct {
  18. name string
  19. args []string
  20. isTerminalIn bool
  21. expectedError string
  22. imageLoadFunc func(input io.Reader, quiet bool) (types.ImageLoadResponse, error)
  23. }{
  24. {
  25. name: "wrong-args",
  26. args: []string{"arg"},
  27. expectedError: "accepts no argument(s).",
  28. },
  29. {
  30. name: "input-to-terminal",
  31. isTerminalIn: true,
  32. expectedError: "requested load from stdin, but stdin is empty",
  33. },
  34. {
  35. name: "pull-error",
  36. expectedError: "something went wrong",
  37. imageLoadFunc: func(input io.Reader, quiet bool) (types.ImageLoadResponse, error) {
  38. return types.ImageLoadResponse{}, errors.Errorf("something went wrong")
  39. },
  40. },
  41. }
  42. for _, tc := range testCases {
  43. cli := test.NewFakeCli(&fakeClient{imageLoadFunc: tc.imageLoadFunc}, new(bytes.Buffer))
  44. cli.In().SetIsTerminal(tc.isTerminalIn)
  45. cmd := NewLoadCommand(cli)
  46. cmd.SetOutput(ioutil.Discard)
  47. cmd.SetArgs(tc.args)
  48. testutil.ErrorContains(t, cmd.Execute(), tc.expectedError)
  49. }
  50. }
  51. func TestNewLoadCommandInvalidInput(t *testing.T) {
  52. expectedError := "open *"
  53. cmd := NewLoadCommand(test.NewFakeCli(&fakeClient{}, new(bytes.Buffer)))
  54. cmd.SetOutput(ioutil.Discard)
  55. cmd.SetArgs([]string{"--input", "*"})
  56. err := cmd.Execute()
  57. testutil.ErrorContains(t, err, expectedError)
  58. }
  59. func TestNewLoadCommandSuccess(t *testing.T) {
  60. testCases := []struct {
  61. name string
  62. args []string
  63. imageLoadFunc func(input io.Reader, quiet bool) (types.ImageLoadResponse, error)
  64. }{
  65. {
  66. name: "simple",
  67. imageLoadFunc: func(input io.Reader, quiet bool) (types.ImageLoadResponse, error) {
  68. return types.ImageLoadResponse{Body: ioutil.NopCloser(strings.NewReader("Success"))}, nil
  69. },
  70. },
  71. {
  72. name: "json",
  73. imageLoadFunc: func(input io.Reader, quiet bool) (types.ImageLoadResponse, error) {
  74. json := "{\"ID\": \"1\"}"
  75. return types.ImageLoadResponse{
  76. Body: ioutil.NopCloser(strings.NewReader(json)),
  77. JSON: true,
  78. }, nil
  79. },
  80. },
  81. {
  82. name: "input-file",
  83. args: []string{"--input", "testdata/load-command-success.input.txt"},
  84. imageLoadFunc: func(input io.Reader, quiet bool) (types.ImageLoadResponse, error) {
  85. return types.ImageLoadResponse{Body: ioutil.NopCloser(strings.NewReader("Success"))}, nil
  86. },
  87. },
  88. }
  89. for _, tc := range testCases {
  90. buf := new(bytes.Buffer)
  91. cmd := NewLoadCommand(test.NewFakeCli(&fakeClient{imageLoadFunc: tc.imageLoadFunc}, buf))
  92. cmd.SetOutput(ioutil.Discard)
  93. cmd.SetArgs(tc.args)
  94. err := cmd.Execute()
  95. assert.NoError(t, err)
  96. actual := buf.String()
  97. expected := string(golden.Get(t, []byte(actual), fmt.Sprintf("load-command-success.%s.golden", tc.name))[:])
  98. testutil.EqualNormalizedString(t, testutil.RemoveSpace, actual, expected)
  99. }
  100. }