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  }