idresolver_test.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. package idresolver
  2. import (
  3. "testing"
  4. "github.com/docker/docker/api/types/swarm"
  5. // Import builders to get the builder function as package function
  6. . "github.com/docker/docker/cli/internal/test/builders"
  7. "github.com/pkg/errors"
  8. "github.com/stretchr/testify/assert"
  9. "golang.org/x/net/context"
  10. )
  11. func TestResolveError(t *testing.T) {
  12. cli := &fakeClient{
  13. nodeInspectFunc: func(nodeID string) (swarm.Node, []byte, error) {
  14. return swarm.Node{}, []byte{}, errors.Errorf("error inspecting node")
  15. },
  16. }
  17. idResolver := New(cli, false)
  18. _, err := idResolver.Resolve(context.Background(), struct{}{}, "nodeID")
  19. assert.EqualError(t, err, "unsupported type")
  20. }
  21. func TestResolveWithNoResolveOption(t *testing.T) {
  22. resolved := false
  23. cli := &fakeClient{
  24. nodeInspectFunc: func(nodeID string) (swarm.Node, []byte, error) {
  25. resolved = true
  26. return swarm.Node{}, []byte{}, nil
  27. },
  28. serviceInspectFunc: func(serviceID string) (swarm.Service, []byte, error) {
  29. resolved = true
  30. return swarm.Service{}, []byte{}, nil
  31. },
  32. }
  33. idResolver := New(cli, true)
  34. id, err := idResolver.Resolve(context.Background(), swarm.Node{}, "nodeID")
  35. assert.NoError(t, err)
  36. assert.Equal(t, "nodeID", id)
  37. assert.False(t, resolved)
  38. }
  39. func TestResolveWithCache(t *testing.T) {
  40. inspectCounter := 0
  41. cli := &fakeClient{
  42. nodeInspectFunc: func(nodeID string) (swarm.Node, []byte, error) {
  43. inspectCounter++
  44. return *Node(NodeName("node-foo")), []byte{}, nil
  45. },
  46. }
  47. idResolver := New(cli, false)
  48. ctx := context.Background()
  49. for i := 0; i < 2; i++ {
  50. id, err := idResolver.Resolve(ctx, swarm.Node{}, "nodeID")
  51. assert.NoError(t, err)
  52. assert.Equal(t, "node-foo", id)
  53. }
  54. assert.Equal(t, 1, inspectCounter)
  55. }
  56. func TestResolveNode(t *testing.T) {
  57. testCases := []struct {
  58. nodeID string
  59. nodeInspectFunc func(string) (swarm.Node, []byte, error)
  60. expectedID string
  61. }{
  62. {
  63. nodeID: "nodeID",
  64. nodeInspectFunc: func(string) (swarm.Node, []byte, error) {
  65. return swarm.Node{}, []byte{}, errors.Errorf("error inspecting node")
  66. },
  67. expectedID: "nodeID",
  68. },
  69. {
  70. nodeID: "nodeID",
  71. nodeInspectFunc: func(string) (swarm.Node, []byte, error) {
  72. return *Node(NodeName("node-foo")), []byte{}, nil
  73. },
  74. expectedID: "node-foo",
  75. },
  76. {
  77. nodeID: "nodeID",
  78. nodeInspectFunc: func(string) (swarm.Node, []byte, error) {
  79. return *Node(NodeName(""), Hostname("node-hostname")), []byte{}, nil
  80. },
  81. expectedID: "node-hostname",
  82. },
  83. }
  84. ctx := context.Background()
  85. for _, tc := range testCases {
  86. cli := &fakeClient{
  87. nodeInspectFunc: tc.nodeInspectFunc,
  88. }
  89. idResolver := New(cli, false)
  90. id, err := idResolver.Resolve(ctx, swarm.Node{}, tc.nodeID)
  91. assert.NoError(t, err)
  92. assert.Equal(t, tc.expectedID, id)
  93. }
  94. }
  95. func TestResolveService(t *testing.T) {
  96. testCases := []struct {
  97. serviceID string
  98. serviceInspectFunc func(string) (swarm.Service, []byte, error)
  99. expectedID string
  100. }{
  101. {
  102. serviceID: "serviceID",
  103. serviceInspectFunc: func(string) (swarm.Service, []byte, error) {
  104. return swarm.Service{}, []byte{}, errors.Errorf("error inspecting service")
  105. },
  106. expectedID: "serviceID",
  107. },
  108. {
  109. serviceID: "serviceID",
  110. serviceInspectFunc: func(string) (swarm.Service, []byte, error) {
  111. return *Service(ServiceName("service-foo")), []byte{}, nil
  112. },
  113. expectedID: "service-foo",
  114. },
  115. }
  116. ctx := context.Background()
  117. for _, tc := range testCases {
  118. cli := &fakeClient{
  119. serviceInspectFunc: tc.serviceInspectFunc,
  120. }
  121. idResolver := New(cli, false)
  122. id, err := idResolver.Resolve(ctx, swarm.Service{}, tc.serviceID)
  123. assert.NoError(t, err)
  124. assert.Equal(t, tc.expectedID, id)
  125. }
  126. }