pull_test.go 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package image
  2. import (
  3. "bytes"
  4. "fmt"
  5. "io/ioutil"
  6. "testing"
  7. "github.com/docker/distribution/reference"
  8. "github.com/docker/docker/api/types"
  9. "github.com/docker/docker/cli/command"
  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/docker/docker/registry"
  14. "github.com/stretchr/testify/assert"
  15. "golang.org/x/net/context"
  16. )
  17. func TestNewPullCommandErrors(t *testing.T) {
  18. testCases := []struct {
  19. name string
  20. args []string
  21. expectedError string
  22. trustedPullFunc func(ctx context.Context, cli command.Cli, repoInfo *registry.RepositoryInfo, ref reference.Named,
  23. authConfig types.AuthConfig, requestPrivilege types.RequestPrivilegeFunc) error
  24. }{
  25. {
  26. name: "wrong-args",
  27. expectedError: "requires exactly 1 argument(s).",
  28. args: []string{},
  29. },
  30. {
  31. name: "invalid-name",
  32. expectedError: "invalid reference format: repository name must be lowercase",
  33. args: []string{"UPPERCASE_REPO"},
  34. },
  35. {
  36. name: "all-tags-with-tag",
  37. expectedError: "tag can't be used with --all-tags/-a",
  38. args: []string{"--all-tags", "image:tag"},
  39. },
  40. {
  41. name: "pull-error",
  42. args: []string{"--disable-content-trust=false", "image:tag"},
  43. expectedError: "you are not authorized to perform this operation: server returned 401.",
  44. },
  45. }
  46. for _, tc := range testCases {
  47. buf := new(bytes.Buffer)
  48. cmd := NewPullCommand(test.NewFakeCli(&fakeClient{}, buf))
  49. cmd.SetOutput(ioutil.Discard)
  50. cmd.SetArgs(tc.args)
  51. assert.Error(t, cmd.Execute(), tc.expectedError)
  52. }
  53. }
  54. func TestNewPullCommandSuccess(t *testing.T) {
  55. testCases := []struct {
  56. name string
  57. args []string
  58. trustedPullFunc func(ctx context.Context, cli command.Cli, repoInfo *registry.RepositoryInfo, ref reference.Named,
  59. authConfig types.AuthConfig, requestPrivilege types.RequestPrivilegeFunc) error
  60. }{
  61. {
  62. name: "simple",
  63. args: []string{"image:tag"},
  64. },
  65. {
  66. name: "simple-no-tag",
  67. args: []string{"image"},
  68. },
  69. }
  70. for _, tc := range testCases {
  71. buf := new(bytes.Buffer)
  72. cmd := NewPullCommand(test.NewFakeCli(&fakeClient{}, buf))
  73. cmd.SetOutput(ioutil.Discard)
  74. cmd.SetArgs(tc.args)
  75. err := cmd.Execute()
  76. assert.NoError(t, err)
  77. actual := buf.String()
  78. expected := string(golden.Get(t, []byte(actual), fmt.Sprintf("pull-command-success.%s.golden", tc.name))[:])
  79. testutil.EqualNormalizedString(t, testutil.RemoveSpace, actual, expected)
  80. }
  81. }