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  }