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 }