join_test.go 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. package swarm
  2. import (
  3. "bytes"
  4. "fmt"
  5. "io/ioutil"
  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. )
  13. func TestSwarmJoinErrors(t *testing.T) {
  14. testCases := []struct {
  15. name string
  16. args []string
  17. swarmJoinFunc func() error
  18. infoFunc func() (types.Info, error)
  19. expectedError string
  20. }{
  21. {
  22. name: "not-enough-args",
  23. expectedError: "requires exactly 1 argument",
  24. },
  25. {
  26. name: "too-many-args",
  27. args: []string{"remote1", "remote2"},
  28. expectedError: "requires exactly 1 argument",
  29. },
  30. {
  31. name: "join-failed",
  32. args: []string{"remote"},
  33. swarmJoinFunc: func() error {
  34. return fmt.Errorf("error joining the swarm")
  35. },
  36. expectedError: "error joining the swarm",
  37. },
  38. {
  39. name: "join-failed-on-init",
  40. args: []string{"remote"},
  41. infoFunc: func() (types.Info, error) {
  42. return types.Info{}, fmt.Errorf("error asking for node info")
  43. },
  44. expectedError: "error asking for node info",
  45. },
  46. }
  47. for _, tc := range testCases {
  48. buf := new(bytes.Buffer)
  49. cmd := newJoinCommand(
  50. test.NewFakeCli(&fakeClient{
  51. swarmJoinFunc: tc.swarmJoinFunc,
  52. infoFunc: tc.infoFunc,
  53. }, buf))
  54. cmd.SetArgs(tc.args)
  55. cmd.SetOutput(ioutil.Discard)
  56. assert.Error(t, cmd.Execute(), tc.expectedError)
  57. }
  58. }
  59. func TestSwarmJoin(t *testing.T) {
  60. testCases := []struct {
  61. name string
  62. infoFunc func() (types.Info, error)
  63. expected string
  64. }{
  65. {
  66. name: "join-as-manager",
  67. infoFunc: func() (types.Info, error) {
  68. return types.Info{
  69. Swarm: swarm.Info{
  70. ControlAvailable: true,
  71. },
  72. }, nil
  73. },
  74. expected: "This node joined a swarm as a manager.",
  75. },
  76. {
  77. name: "join-as-worker",
  78. infoFunc: func() (types.Info, error) {
  79. return types.Info{
  80. Swarm: swarm.Info{
  81. ControlAvailable: false,
  82. },
  83. }, nil
  84. },
  85. expected: "This node joined a swarm as a worker.",
  86. },
  87. }
  88. for _, tc := range testCases {
  89. buf := new(bytes.Buffer)
  90. cmd := newJoinCommand(
  91. test.NewFakeCli(&fakeClient{
  92. infoFunc: tc.infoFunc,
  93. }, buf))
  94. cmd.SetArgs([]string{"remote"})
  95. assert.NilError(t, cmd.Execute())
  96. assert.Equal(t, strings.TrimSpace(buf.String()), tc.expected)
  97. }
  98. }