client_test.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. package internal
  2. import (
  3. "context"
  4. "net"
  5. "strings"
  6. "sync"
  7. "testing"
  8. "time"
  9. "github.com/stretchr/testify/assert"
  10. "google.golang.org/grpc"
  11. )
  12. func TestWithDialOption(t *testing.T) {
  13. var options ClientOptions
  14. agent := grpc.WithUserAgent("chrome")
  15. opt := WithDialOption(agent)
  16. opt(&options)
  17. assert.Contains(t, options.DialOptions, agent)
  18. }
  19. func TestWithTimeout(t *testing.T) {
  20. var options ClientOptions
  21. opt := WithTimeout(time.Second)
  22. opt(&options)
  23. assert.Equal(t, time.Second, options.Timeout)
  24. }
  25. func TestWithNonBlock(t *testing.T) {
  26. var options ClientOptions
  27. opt := WithNonBlock()
  28. opt(&options)
  29. assert.True(t, options.NonBlock)
  30. }
  31. func TestWithStreamClientInterceptor(t *testing.T) {
  32. var options ClientOptions
  33. opt := WithStreamClientInterceptor(func(ctx context.Context, desc *grpc.StreamDesc,
  34. cc *grpc.ClientConn, method string, streamer grpc.Streamer,
  35. opts ...grpc.CallOption) (grpc.ClientStream, error) {
  36. return nil, nil
  37. })
  38. opt(&options)
  39. assert.Equal(t, 1, len(options.DialOptions))
  40. }
  41. func TestWithTransportCredentials(t *testing.T) {
  42. var options ClientOptions
  43. opt := WithTransportCredentials(nil)
  44. opt(&options)
  45. assert.Equal(t, 1, len(options.DialOptions))
  46. }
  47. func TestWithUnaryClientInterceptor(t *testing.T) {
  48. var options ClientOptions
  49. opt := WithUnaryClientInterceptor(func(ctx context.Context, method string, req, reply any,
  50. cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error {
  51. return nil
  52. })
  53. opt(&options)
  54. assert.Equal(t, 1, len(options.DialOptions))
  55. }
  56. func TestBuildDialOptions(t *testing.T) {
  57. c := client{
  58. middlewares: ClientMiddlewaresConf{
  59. Trace: true,
  60. Duration: true,
  61. Prometheus: true,
  62. Breaker: true,
  63. Timeout: true,
  64. },
  65. }
  66. agent := grpc.WithUserAgent("chrome")
  67. opts := c.buildDialOptions(WithDialOption(agent))
  68. assert.Contains(t, opts, agent)
  69. }
  70. func TestClientDial(t *testing.T) {
  71. var addr string
  72. var wg sync.WaitGroup
  73. wg.Add(1)
  74. server := grpc.NewServer()
  75. go func() {
  76. lis, err := net.Listen("tcp", "localhost:0")
  77. assert.NoError(t, err)
  78. defer lis.Close()
  79. addr = lis.Addr().String()
  80. wg.Done()
  81. server.Serve(lis)
  82. }()
  83. wg.Wait()
  84. c, err := NewClient(addr, ClientMiddlewaresConf{
  85. Trace: true,
  86. Duration: true,
  87. Prometheus: true,
  88. Breaker: true,
  89. Timeout: true,
  90. })
  91. assert.NoError(t, err)
  92. assert.NotNil(t, c.Conn())
  93. server.Stop()
  94. }
  95. func TestClientDialFail(t *testing.T) {
  96. _, err := NewClient("localhost:54321", ClientMiddlewaresConf{
  97. Trace: true,
  98. Duration: true,
  99. Prometheus: true,
  100. Breaker: true,
  101. Timeout: true,
  102. })
  103. assert.Error(t, err)
  104. assert.True(t, strings.Contains(err.Error(), "localhost:54321"))
  105. _, err = NewClient("localhost:54321/fail", ClientMiddlewaresConf{
  106. Trace: true,
  107. Duration: true,
  108. Prometheus: true,
  109. Breaker: true,
  110. Timeout: true,
  111. })
  112. assert.Error(t, err)
  113. assert.True(t, strings.Contains(err.Error(), "localhost:54321/fail"))
  114. }