tracinginterceptor_test.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. package serverinterceptors
  2. import (
  3. "context"
  4. "sync"
  5. "sync/atomic"
  6. "testing"
  7. "github.com/stretchr/testify/assert"
  8. "github.com/tal-tech/go-zero/core/trace"
  9. "google.golang.org/grpc"
  10. "google.golang.org/grpc/metadata"
  11. )
  12. func TestUnaryOpenTracingInterceptor_Disable(t *testing.T) {
  13. _, err := UnaryTracingInterceptor(context.Background(), nil, &grpc.UnaryServerInfo{
  14. FullMethod: "/",
  15. }, func(ctx context.Context, req interface{}) (interface{}, error) {
  16. return nil, nil
  17. })
  18. assert.Nil(t, err)
  19. }
  20. func TestUnaryOpenTracingInterceptor_Enabled(t *testing.T) {
  21. trace.StartAgent(trace.Config{
  22. Name: "go-zero-test",
  23. Endpoint: "http://localhost:14268/api/traces",
  24. Batcher: "jaeger",
  25. Sampler: 1.0,
  26. })
  27. _, err := UnaryTracingInterceptor(context.Background(), nil, &grpc.UnaryServerInfo{
  28. FullMethod: "/package.TestService.GetUser",
  29. }, func(ctx context.Context, req interface{}) (interface{}, error) {
  30. return nil, nil
  31. })
  32. assert.Nil(t, err)
  33. }
  34. func TestUnaryTracingInterceptor(t *testing.T) {
  35. var run int32
  36. var wg sync.WaitGroup
  37. wg.Add(1)
  38. _, err := UnaryTracingInterceptor(context.Background(), nil, &grpc.UnaryServerInfo{
  39. FullMethod: "/",
  40. }, func(ctx context.Context, req interface{}) (interface{}, error) {
  41. defer wg.Done()
  42. atomic.AddInt32(&run, 1)
  43. return nil, nil
  44. })
  45. wg.Wait()
  46. assert.Nil(t, err)
  47. assert.Equal(t, int32(1), atomic.LoadInt32(&run))
  48. }
  49. func TestStreamTracingInterceptor_GrpcFormat(t *testing.T) {
  50. var run int32
  51. var wg sync.WaitGroup
  52. wg.Add(1)
  53. var md metadata.MD
  54. ctx := metadata.NewIncomingContext(context.Background(), md)
  55. stream := mockedServerStream{ctx: ctx}
  56. err := StreamTracingInterceptor(nil, &stream, &grpc.StreamServerInfo{
  57. FullMethod: "/foo",
  58. }, func(srv interface{}, stream grpc.ServerStream) error {
  59. defer wg.Done()
  60. atomic.AddInt32(&run, 1)
  61. return nil
  62. })
  63. wg.Wait()
  64. assert.Nil(t, err)
  65. assert.Equal(t, int32(1), atomic.LoadInt32(&run))
  66. }
  67. type mockedServerStream struct {
  68. ctx context.Context
  69. }
  70. func (m *mockedServerStream) SetHeader(md metadata.MD) error {
  71. panic("implement me")
  72. }
  73. func (m *mockedServerStream) SendHeader(md metadata.MD) error {
  74. panic("implement me")
  75. }
  76. func (m *mockedServerStream) SetTrailer(md metadata.MD) {
  77. panic("implement me")
  78. }
  79. func (m *mockedServerStream) Context() context.Context {
  80. if m.ctx == nil {
  81. return context.Background()
  82. }
  83. return m.ctx
  84. }
  85. func (m *mockedServerStream) SendMsg(v interface{}) error {
  86. panic("implement me")
  87. }
  88. func (m *mockedServerStream) RecvMsg(v interface{}) error {
  89. panic("implement me")
  90. }