github.com/justincormack/cli@v0.0.0-20201215022714-831ebeae9675/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  }