inspect_test.go 3.4 KB

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