inspect_test.go 3.3 KB

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