github.com/itscaro/cli@v0.0.0-20190705081621-c9db0fe93829/cli/command/node/list_test.go (about)

     1  package node
     2  
     3  import (
     4  	"io/ioutil"
     5  	"testing"
     6  
     7  	"github.com/docker/cli/cli/config/configfile"
     8  	"github.com/docker/cli/internal/test"
     9  	"github.com/docker/docker/api/types"
    10  	"github.com/docker/docker/api/types/swarm"
    11  	"github.com/pkg/errors"
    12  	"gotest.tools/assert"
    13  	is "gotest.tools/assert/cmp"
    14  	"gotest.tools/golden"
    15  	// Import builders to get the builder function as package function
    16  	. "github.com/docker/cli/internal/test/builders"
    17  )
    18  
    19  func TestNodeListErrorOnAPIFailure(t *testing.T) {
    20  	testCases := []struct {
    21  		nodeListFunc  func() ([]swarm.Node, error)
    22  		infoFunc      func() (types.Info, error)
    23  		expectedError string
    24  	}{
    25  		{
    26  			nodeListFunc: func() ([]swarm.Node, error) {
    27  				return []swarm.Node{}, errors.Errorf("error listing nodes")
    28  			},
    29  			expectedError: "error listing nodes",
    30  		},
    31  		{
    32  			nodeListFunc: func() ([]swarm.Node, error) {
    33  				return []swarm.Node{
    34  					{
    35  						ID: "nodeID",
    36  					},
    37  				}, nil
    38  			},
    39  			infoFunc: func() (types.Info, error) {
    40  				return types.Info{}, errors.Errorf("error asking for node info")
    41  			},
    42  			expectedError: "error asking for node info",
    43  		},
    44  	}
    45  	for _, tc := range testCases {
    46  		cli := test.NewFakeCli(&fakeClient{
    47  			nodeListFunc: tc.nodeListFunc,
    48  			infoFunc:     tc.infoFunc,
    49  		})
    50  		cmd := newListCommand(cli)
    51  		cmd.SetOutput(ioutil.Discard)
    52  		assert.Error(t, cmd.Execute(), tc.expectedError)
    53  	}
    54  }
    55  
    56  func TestNodeList(t *testing.T) {
    57  	cli := test.NewFakeCli(&fakeClient{
    58  		nodeListFunc: func() ([]swarm.Node, error) {
    59  			return []swarm.Node{
    60  				*Node(NodeID("nodeID1"), Hostname("node-2-foo"), Manager(Leader()), EngineVersion(".")),
    61  				*Node(NodeID("nodeID2"), Hostname("node-10-foo"), Manager(), EngineVersion("18.03.0-ce")),
    62  				*Node(NodeID("nodeID3"), Hostname("node-1-foo")),
    63  			}, nil
    64  		},
    65  		infoFunc: func() (types.Info, error) {
    66  			return types.Info{
    67  				Swarm: swarm.Info{
    68  					NodeID: "nodeID1",
    69  				},
    70  			}, nil
    71  		},
    72  	})
    73  
    74  	cmd := newListCommand(cli)
    75  	assert.NilError(t, cmd.Execute())
    76  	golden.Assert(t, cli.OutBuffer().String(), "node-list-sort.golden")
    77  }
    78  
    79  func TestNodeListQuietShouldOnlyPrintIDs(t *testing.T) {
    80  	cli := test.NewFakeCli(&fakeClient{
    81  		nodeListFunc: func() ([]swarm.Node, error) {
    82  			return []swarm.Node{
    83  				*Node(NodeID("nodeID1")),
    84  			}, nil
    85  		},
    86  	})
    87  	cmd := newListCommand(cli)
    88  	cmd.Flags().Set("quiet", "true")
    89  	assert.NilError(t, cmd.Execute())
    90  	assert.Check(t, is.Equal(cli.OutBuffer().String(), "nodeID1\n"))
    91  }
    92  
    93  func TestNodeListDefaultFormatFromConfig(t *testing.T) {
    94  	cli := test.NewFakeCli(&fakeClient{
    95  		nodeListFunc: func() ([]swarm.Node, error) {
    96  			return []swarm.Node{
    97  				*Node(NodeID("nodeID1"), Hostname("nodeHostname1"), Manager(Leader())),
    98  				*Node(NodeID("nodeID2"), Hostname("nodeHostname2"), Manager()),
    99  				*Node(NodeID("nodeID3"), Hostname("nodeHostname3")),
   100  			}, nil
   101  		},
   102  		infoFunc: func() (types.Info, error) {
   103  			return types.Info{
   104  				Swarm: swarm.Info{
   105  					NodeID: "nodeID1",
   106  				},
   107  			}, nil
   108  		},
   109  	})
   110  	cli.SetConfigFile(&configfile.ConfigFile{
   111  		NodesFormat: "{{.ID}}: {{.Hostname}} {{.Status}}/{{.ManagerStatus}}",
   112  	})
   113  	cmd := newListCommand(cli)
   114  	assert.NilError(t, cmd.Execute())
   115  	golden.Assert(t, cli.OutBuffer().String(), "node-list-format-from-config.golden")
   116  }
   117  
   118  func TestNodeListFormat(t *testing.T) {
   119  	cli := test.NewFakeCli(&fakeClient{
   120  		nodeListFunc: func() ([]swarm.Node, error) {
   121  			return []swarm.Node{
   122  				*Node(NodeID("nodeID1"), Hostname("nodeHostname1"), Manager(Leader())),
   123  				*Node(NodeID("nodeID2"), Hostname("nodeHostname2"), Manager()),
   124  			}, nil
   125  		},
   126  		infoFunc: func() (types.Info, error) {
   127  			return types.Info{
   128  				Swarm: swarm.Info{
   129  					NodeID: "nodeID1",
   130  				},
   131  			}, nil
   132  		},
   133  	})
   134  	cli.SetConfigFile(&configfile.ConfigFile{
   135  		NodesFormat: "{{.ID}}: {{.Hostname}} {{.Status}}/{{.ManagerStatus}}",
   136  	})
   137  	cmd := newListCommand(cli)
   138  	cmd.Flags().Set("format", "{{.Hostname}}: {{.ManagerStatus}}")
   139  	assert.NilError(t, cmd.Execute())
   140  	golden.Assert(t, cli.OutBuffer().String(), "node-list-format-flag.golden")
   141  }