demote_test.go 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package node
  2. import (
  3. "bytes"
  4. "fmt"
  5. "io/ioutil"
  6. "testing"
  7. "github.com/docker/docker/api/types/swarm"
  8. "github.com/docker/docker/cli/internal/test"
  9. // Import builders to get the builder function as package function
  10. . "github.com/docker/docker/cli/internal/test/builders"
  11. "github.com/docker/docker/pkg/testutil/assert"
  12. )
  13. func TestNodeDemoteErrors(t *testing.T) {
  14. testCases := []struct {
  15. args []string
  16. nodeInspectFunc func() (swarm.Node, []byte, error)
  17. nodeUpdateFunc func(nodeID string, version swarm.Version, node swarm.NodeSpec) error
  18. expectedError string
  19. }{
  20. {
  21. expectedError: "requires at least 1 argument",
  22. },
  23. {
  24. args: []string{"nodeID"},
  25. nodeInspectFunc: func() (swarm.Node, []byte, error) {
  26. return swarm.Node{}, []byte{}, fmt.Errorf("error inspecting the node")
  27. },
  28. expectedError: "error inspecting the node",
  29. },
  30. {
  31. args: []string{"nodeID"},
  32. nodeUpdateFunc: func(nodeID string, version swarm.Version, node swarm.NodeSpec) error {
  33. return fmt.Errorf("error updating the node")
  34. },
  35. expectedError: "error updating the node",
  36. },
  37. }
  38. for _, tc := range testCases {
  39. buf := new(bytes.Buffer)
  40. cmd := newDemoteCommand(
  41. test.NewFakeCli(&fakeClient{
  42. nodeInspectFunc: tc.nodeInspectFunc,
  43. nodeUpdateFunc: tc.nodeUpdateFunc,
  44. }, buf))
  45. cmd.SetArgs(tc.args)
  46. cmd.SetOutput(ioutil.Discard)
  47. assert.Error(t, cmd.Execute(), tc.expectedError)
  48. }
  49. }
  50. func TestNodeDemoteNoChange(t *testing.T) {
  51. buf := new(bytes.Buffer)
  52. cmd := newDemoteCommand(
  53. test.NewFakeCli(&fakeClient{
  54. nodeInspectFunc: func() (swarm.Node, []byte, error) {
  55. return *Node(), []byte{}, nil
  56. },
  57. nodeUpdateFunc: func(nodeID string, version swarm.Version, node swarm.NodeSpec) error {
  58. if node.Role != swarm.NodeRoleWorker {
  59. return fmt.Errorf("expected role worker, got %s", node.Role)
  60. }
  61. return nil
  62. },
  63. }, buf))
  64. cmd.SetArgs([]string{"nodeID"})
  65. assert.NilError(t, cmd.Execute())
  66. }
  67. func TestNodeDemoteMultipleNode(t *testing.T) {
  68. buf := new(bytes.Buffer)
  69. cmd := newDemoteCommand(
  70. test.NewFakeCli(&fakeClient{
  71. nodeInspectFunc: func() (swarm.Node, []byte, error) {
  72. return *Node(Manager()), []byte{}, nil
  73. },
  74. nodeUpdateFunc: func(nodeID string, version swarm.Version, node swarm.NodeSpec) error {
  75. if node.Role != swarm.NodeRoleWorker {
  76. return fmt.Errorf("expected role worker, got %s", node.Role)
  77. }
  78. return nil
  79. },
  80. }, buf))
  81. cmd.SetArgs([]string{"nodeID1", "nodeID2"})
  82. assert.NilError(t, cmd.Execute())
  83. }