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