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