github.com/fabiokung/docker@v0.11.2-0.20170222101415-4534dcd49497/cli/command/node/list_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"
    10  	"github.com/docker/docker/api/types/swarm"
    11  	"github.com/docker/docker/cli/internal/test"
    12  	// Import builders to get the builder function as package function
    13  	. "github.com/docker/docker/cli/internal/test/builders"
    14  	"github.com/docker/docker/pkg/testutil/assert"
    15  )
    16  
    17  func TestNodeListErrorOnAPIFailure(t *testing.T) {
    18  	testCases := []struct {
    19  		nodeListFunc  func() ([]swarm.Node, error)
    20  		infoFunc      func() (types.Info, error)
    21  		expectedError string
    22  	}{
    23  		{
    24  			nodeListFunc: func() ([]swarm.Node, error) {
    25  				return []swarm.Node{}, fmt.Errorf("error listing nodes")
    26  			},
    27  			expectedError: "error listing nodes",
    28  		},
    29  		{
    30  			nodeListFunc: func() ([]swarm.Node, error) {
    31  				return []swarm.Node{
    32  					{
    33  						ID: "nodeID",
    34  					},
    35  				}, nil
    36  			},
    37  			infoFunc: func() (types.Info, error) {
    38  				return types.Info{}, fmt.Errorf("error asking for node info")
    39  			},
    40  			expectedError: "error asking for node info",
    41  		},
    42  	}
    43  	for _, tc := range testCases {
    44  		buf := new(bytes.Buffer)
    45  		cmd := newListCommand(
    46  			test.NewFakeCli(&fakeClient{
    47  				nodeListFunc: tc.nodeListFunc,
    48  				infoFunc:     tc.infoFunc,
    49  			}, buf))
    50  		cmd.SetOutput(ioutil.Discard)
    51  		assert.Error(t, cmd.Execute(), tc.expectedError)
    52  	}
    53  }
    54  
    55  func TestNodeList(t *testing.T) {
    56  	buf := new(bytes.Buffer)
    57  	cmd := newListCommand(
    58  		test.NewFakeCli(&fakeClient{
    59  			nodeListFunc: func() ([]swarm.Node, error) {
    60  				return []swarm.Node{
    61  					*Node(NodeID("nodeID1"), Hostname("nodeHostname1"), Manager(Leader())),
    62  					*Node(NodeID("nodeID2"), Hostname("nodeHostname2"), Manager()),
    63  					*Node(NodeID("nodeID3"), Hostname("nodeHostname3")),
    64  				}, nil
    65  			},
    66  			infoFunc: func() (types.Info, error) {
    67  				return types.Info{
    68  					Swarm: swarm.Info{
    69  						NodeID: "nodeID1",
    70  					},
    71  				}, nil
    72  			},
    73  		}, buf))
    74  	assert.NilError(t, cmd.Execute())
    75  	assert.Contains(t, buf.String(), `nodeID1 *  nodeHostname1  Ready   Active        Leader`)
    76  	assert.Contains(t, buf.String(), `nodeID2    nodeHostname2  Ready   Active        Reachable`)
    77  	assert.Contains(t, buf.String(), `nodeID3    nodeHostname3  Ready   Active`)
    78  }
    79  
    80  func TestNodeListQuietShouldOnlyPrintIDs(t *testing.T) {
    81  	buf := new(bytes.Buffer)
    82  	cmd := newListCommand(
    83  		test.NewFakeCli(&fakeClient{
    84  			nodeListFunc: func() ([]swarm.Node, error) {
    85  				return []swarm.Node{
    86  					*Node(),
    87  				}, nil
    88  			},
    89  		}, buf))
    90  	cmd.Flags().Set("quiet", "true")
    91  	assert.NilError(t, cmd.Execute())
    92  	assert.Contains(t, buf.String(), "nodeID")
    93  }
    94  
    95  // Test case for #24090
    96  func TestNodeListContainsHostname(t *testing.T) {
    97  	buf := new(bytes.Buffer)
    98  	cmd := newListCommand(test.NewFakeCli(&fakeClient{}, buf))
    99  	assert.NilError(t, cmd.Execute())
   100  	assert.Contains(t, buf.String(), "HOSTNAME")
   101  }