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