github.com/fabiokung/docker@v0.11.2-0.20170222101415-4534dcd49497/cli/command/node/inspect_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  	"github.com/docker/docker/pkg/testutil/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{}, fmt.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{}, fmt.Errorf("error inspecting the node")
    40  			},
    41  			infoFunc: func() (types.Info, error) {
    42  				return types.Info{}, fmt.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{}, fmt.Errorf("error inspecting the node")
    50  			},
    51  			infoFunc: func() (types.Info, error) {
    52  				return types.Info{}, 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{}, fmt.Errorf("error asking for node info")
    63  			},
    64  			expectedError: "error asking for node info",
    65  		},
    66  	}
    67  	for _, tc := range testCases {
    68  		buf := new(bytes.Buffer)
    69  		cmd := newInspectCommand(
    70  			test.NewFakeCli(&fakeClient{
    71  				nodeInspectFunc: tc.nodeInspectFunc,
    72  				infoFunc:        tc.infoFunc,
    73  			}, buf))
    74  		cmd.SetArgs(tc.args)
    75  		for key, value := range tc.flags {
    76  			cmd.Flags().Set(key, value)
    77  		}
    78  		cmd.SetOutput(ioutil.Discard)
    79  		assert.Error(t, cmd.Execute(), tc.expectedError)
    80  	}
    81  }
    82  
    83  func TestNodeInspectPretty(t *testing.T) {
    84  	testCases := []struct {
    85  		name            string
    86  		nodeInspectFunc func() (swarm.Node, []byte, error)
    87  	}{
    88  		{
    89  			name: "simple",
    90  			nodeInspectFunc: func() (swarm.Node, []byte, error) {
    91  				return *Node(NodeLabels(map[string]string{
    92  					"lbl1": "value1",
    93  				})), []byte{}, nil
    94  			},
    95  		},
    96  		{
    97  			name: "manager",
    98  			nodeInspectFunc: func() (swarm.Node, []byte, error) {
    99  				return *Node(Manager()), []byte{}, nil
   100  			},
   101  		},
   102  		{
   103  			name: "manager-leader",
   104  			nodeInspectFunc: func() (swarm.Node, []byte, error) {
   105  				return *Node(Manager(Leader())), []byte{}, nil
   106  			},
   107  		},
   108  	}
   109  	for _, tc := range testCases {
   110  		buf := new(bytes.Buffer)
   111  		cmd := newInspectCommand(
   112  			test.NewFakeCli(&fakeClient{
   113  				nodeInspectFunc: tc.nodeInspectFunc,
   114  			}, buf))
   115  		cmd.SetArgs([]string{"nodeID"})
   116  		cmd.Flags().Set("pretty", "true")
   117  		assert.NilError(t, cmd.Execute())
   118  		actual := buf.String()
   119  		expected := golden.Get(t, []byte(actual), fmt.Sprintf("node-inspect-pretty.%s.golden", tc.name))
   120  		assert.EqualNormalizedString(t, assert.RemoveSpace, actual, string(expected))
   121  	}
   122  }