create_test.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. package secret
  2. import (
  3. "bytes"
  4. "io/ioutil"
  5. "path/filepath"
  6. "strings"
  7. "testing"
  8. "github.com/docker/docker/api/types"
  9. "github.com/docker/docker/api/types/swarm"
  10. "github.com/docker/docker/cli/internal/test"
  11. "github.com/docker/docker/pkg/testutil/assert"
  12. "github.com/docker/docker/pkg/testutil/golden"
  13. "github.com/pkg/errors"
  14. )
  15. const secretDataFile = "secret-create-with-name.golden"
  16. func TestSecretCreateErrors(t *testing.T) {
  17. testCases := []struct {
  18. args []string
  19. secretCreateFunc func(swarm.SecretSpec) (types.SecretCreateResponse, error)
  20. expectedError string
  21. }{
  22. {
  23. args: []string{"too_few"},
  24. expectedError: "requires exactly 2 argument(s)",
  25. },
  26. {args: []string{"too", "many", "arguments"},
  27. expectedError: "requires exactly 2 argument(s)",
  28. },
  29. {
  30. args: []string{"name", filepath.Join("testdata", secretDataFile)},
  31. secretCreateFunc: func(secretSpec swarm.SecretSpec) (types.SecretCreateResponse, error) {
  32. return types.SecretCreateResponse{}, errors.Errorf("error creating secret")
  33. },
  34. expectedError: "error creating secret",
  35. },
  36. }
  37. for _, tc := range testCases {
  38. buf := new(bytes.Buffer)
  39. cmd := newSecretCreateCommand(
  40. test.NewFakeCli(&fakeClient{
  41. secretCreateFunc: tc.secretCreateFunc,
  42. }, buf),
  43. )
  44. cmd.SetArgs(tc.args)
  45. cmd.SetOutput(ioutil.Discard)
  46. assert.Error(t, cmd.Execute(), tc.expectedError)
  47. }
  48. }
  49. func TestSecretCreateWithName(t *testing.T) {
  50. name := "foo"
  51. buf := new(bytes.Buffer)
  52. var actual []byte
  53. cli := test.NewFakeCli(&fakeClient{
  54. secretCreateFunc: func(spec swarm.SecretSpec) (types.SecretCreateResponse, error) {
  55. if spec.Name != name {
  56. return types.SecretCreateResponse{}, errors.Errorf("expected name %q, got %q", name, spec.Name)
  57. }
  58. actual = spec.Data
  59. return types.SecretCreateResponse{
  60. ID: "ID-" + spec.Name,
  61. }, nil
  62. },
  63. }, buf)
  64. cmd := newSecretCreateCommand(cli)
  65. cmd.SetArgs([]string{name, filepath.Join("testdata", secretDataFile)})
  66. assert.NilError(t, cmd.Execute())
  67. expected := golden.Get(t, actual, secretDataFile)
  68. assert.Equal(t, string(actual), string(expected))
  69. assert.Equal(t, strings.TrimSpace(buf.String()), "ID-"+name)
  70. }
  71. func TestSecretCreateWithLabels(t *testing.T) {
  72. expectedLabels := map[string]string{
  73. "lbl1": "Label-foo",
  74. "lbl2": "Label-bar",
  75. }
  76. name := "foo"
  77. buf := new(bytes.Buffer)
  78. cli := test.NewFakeCli(&fakeClient{
  79. secretCreateFunc: func(spec swarm.SecretSpec) (types.SecretCreateResponse, error) {
  80. if spec.Name != name {
  81. return types.SecretCreateResponse{}, errors.Errorf("expected name %q, got %q", name, spec.Name)
  82. }
  83. if !compareMap(spec.Labels, expectedLabels) {
  84. return types.SecretCreateResponse{}, errors.Errorf("expected labels %v, got %v", expectedLabels, spec.Labels)
  85. }
  86. return types.SecretCreateResponse{
  87. ID: "ID-" + spec.Name,
  88. }, nil
  89. },
  90. }, buf)
  91. cmd := newSecretCreateCommand(cli)
  92. cmd.SetArgs([]string{name, filepath.Join("testdata", secretDataFile)})
  93. cmd.Flags().Set("label", "lbl1=Label-foo")
  94. cmd.Flags().Set("label", "lbl2=Label-bar")
  95. assert.NilError(t, cmd.Execute())
  96. assert.Equal(t, strings.TrimSpace(buf.String()), "ID-"+name)
  97. }
  98. func compareMap(actual map[string]string, expected map[string]string) bool {
  99. if len(actual) != len(expected) {
  100. return false
  101. }
  102. for key, value := range actual {
  103. if expectedValue, ok := expected[key]; ok {
  104. if expectedValue != value {
  105. return false
  106. }
  107. } else {
  108. return false
  109. }
  110. }
  111. return true
  112. }