github.com/itscaro/cli@v0.0.0-20190705081621-c9db0fe93829/cli/command/node/inspect_test.go (about) 1 package node 2 3 import ( 4 "fmt" 5 "io/ioutil" 6 "testing" 7 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 // Import builders to get the builder function as package function 13 . "github.com/docker/cli/internal/test/builders" 14 "gotest.tools/assert" 15 "gotest.tools/golden" 16 ) 17 18 func TestNodeInspectErrors(t *testing.T) { 19 testCases := []struct { 20 args []string 21 flags map[string]string 22 nodeInspectFunc func() (swarm.Node, []byte, error) 23 infoFunc func() (types.Info, error) 24 expectedError string 25 }{ 26 { 27 expectedError: "requires at least 1 argument", 28 }, 29 { 30 args: []string{"self"}, 31 infoFunc: func() (types.Info, error) { 32 return types.Info{}, errors.Errorf("error asking for node info") 33 }, 34 expectedError: "error asking for node info", 35 }, 36 { 37 args: []string{"nodeID"}, 38 nodeInspectFunc: func() (swarm.Node, []byte, error) { 39 return swarm.Node{}, []byte{}, errors.Errorf("error inspecting the node") 40 }, 41 infoFunc: func() (types.Info, error) { 42 return types.Info{}, errors.Errorf("error asking for node info") 43 }, 44 expectedError: "error inspecting the node", 45 }, 46 { 47 args: []string{"self"}, 48 nodeInspectFunc: func() (swarm.Node, []byte, error) { 49 return swarm.Node{}, []byte{}, errors.Errorf("error inspecting the node") 50 }, 51 infoFunc: func() (types.Info, error) { 52 return types.Info{Swarm: swarm.Info{NodeID: "abc"}}, nil 53 }, 54 expectedError: "error inspecting the node", 55 }, 56 { 57 args: []string{"self"}, 58 flags: map[string]string{ 59 "pretty": "true", 60 }, 61 infoFunc: func() (types.Info, error) { 62 return types.Info{}, errors.Errorf("error asking for node info") 63 }, 64 expectedError: "error asking for node info", 65 }, 66 } 67 for _, tc := range testCases { 68 cmd := newInspectCommand( 69 test.NewFakeCli(&fakeClient{ 70 nodeInspectFunc: tc.nodeInspectFunc, 71 infoFunc: tc.infoFunc, 72 })) 73 cmd.SetArgs(tc.args) 74 for key, value := range tc.flags { 75 cmd.Flags().Set(key, value) 76 } 77 cmd.SetOutput(ioutil.Discard) 78 assert.ErrorContains(t, cmd.Execute(), tc.expectedError) 79 } 80 } 81 82 func TestNodeInspectPretty(t *testing.T) { 83 testCases := []struct { 84 name string 85 nodeInspectFunc func() (swarm.Node, []byte, error) 86 }{ 87 { 88 name: "simple", 89 nodeInspectFunc: func() (swarm.Node, []byte, error) { 90 return *Node(NodeLabels(map[string]string{ 91 "lbl1": "value1", 92 })), []byte{}, nil 93 }, 94 }, 95 { 96 name: "manager", 97 nodeInspectFunc: func() (swarm.Node, []byte, error) { 98 return *Node(Manager()), []byte{}, nil 99 }, 100 }, 101 { 102 name: "manager-leader", 103 nodeInspectFunc: func() (swarm.Node, []byte, error) { 104 return *Node(Manager(Leader())), []byte{}, nil 105 }, 106 }, 107 } 108 for _, tc := range testCases { 109 cli := test.NewFakeCli(&fakeClient{ 110 nodeInspectFunc: tc.nodeInspectFunc, 111 }) 112 cmd := newInspectCommand(cli) 113 cmd.SetArgs([]string{"nodeID"}) 114 cmd.Flags().Set("pretty", "true") 115 assert.NilError(t, cmd.Execute()) 116 golden.Assert(t, cli.OutBuffer().String(), fmt.Sprintf("node-inspect-pretty.%s.golden", tc.name)) 117 } 118 }