rpcserver_test.go 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. package internal
  2. import (
  3. "context"
  4. "sync"
  5. "testing"
  6. "github.com/stretchr/testify/assert"
  7. "github.com/zeromicro/go-zero/core/proc"
  8. "github.com/zeromicro/go-zero/core/stat"
  9. "github.com/zeromicro/go-zero/zrpc/internal/mock"
  10. "google.golang.org/grpc"
  11. )
  12. func TestRpcServer(t *testing.T) {
  13. metrics := stat.NewMetrics("foo")
  14. server := NewRpcServer("localhost:54321", ServerMiddlewaresConf{
  15. Trace: true,
  16. Recover: true,
  17. Stat: true,
  18. Prometheus: true,
  19. Breaker: true,
  20. }, WithMetrics(metrics), WithRpcHealth(true))
  21. server.SetName("mock")
  22. var wg sync.WaitGroup
  23. var grpcServer *grpc.Server
  24. var lock sync.Mutex
  25. wg.Add(1)
  26. go func() {
  27. err := server.Start(func(server *grpc.Server) {
  28. lock.Lock()
  29. mock.RegisterDepositServiceServer(server, new(mock.DepositServer))
  30. grpcServer = server
  31. lock.Unlock()
  32. wg.Done()
  33. })
  34. assert.Nil(t, err)
  35. }()
  36. wg.Wait()
  37. proc.WrapUp()
  38. lock.Lock()
  39. grpcServer.GracefulStop()
  40. lock.Unlock()
  41. }
  42. func TestRpcServer_WithBadAddress(t *testing.T) {
  43. server := NewRpcServer("localhost:111111", ServerMiddlewaresConf{
  44. Trace: true,
  45. Recover: true,
  46. Stat: true,
  47. Prometheus: true,
  48. Breaker: true,
  49. }, WithRpcHealth(true))
  50. server.SetName("mock")
  51. err := server.Start(func(server *grpc.Server) {
  52. mock.RegisterDepositServiceServer(server, new(mock.DepositServer))
  53. })
  54. assert.NotNil(t, err)
  55. }
  56. func TestRpcServer_buildUnaryInterceptor(t *testing.T) {
  57. tests := []struct {
  58. name string
  59. r *rpcServer
  60. len int
  61. }{
  62. {
  63. name: "empty",
  64. r: &rpcServer{
  65. baseRpcServer: &baseRpcServer{},
  66. },
  67. len: 0,
  68. },
  69. {
  70. name: "custom",
  71. r: &rpcServer{
  72. baseRpcServer: &baseRpcServer{
  73. unaryInterceptors: []grpc.UnaryServerInterceptor{
  74. func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo,
  75. handler grpc.UnaryHandler) (interface{}, error) {
  76. return nil, nil
  77. },
  78. },
  79. },
  80. },
  81. len: 1,
  82. },
  83. {
  84. name: "middleware",
  85. r: &rpcServer{
  86. baseRpcServer: &baseRpcServer{
  87. unaryInterceptors: []grpc.UnaryServerInterceptor{
  88. func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo,
  89. handler grpc.UnaryHandler) (interface{}, error) {
  90. return nil, nil
  91. },
  92. },
  93. },
  94. middlewares: ServerMiddlewaresConf{
  95. Trace: true,
  96. Recover: true,
  97. Stat: true,
  98. Prometheus: true,
  99. Breaker: true,
  100. },
  101. },
  102. len: 6,
  103. },
  104. }
  105. for _, test := range tests {
  106. t.Run(test.name, func(t *testing.T) {
  107. assert.Equal(t, test.len, len(test.r.buildUnaryInterceptors()))
  108. })
  109. }
  110. }
  111. func TestRpcServer_buildStreamInterceptor(t *testing.T) {
  112. tests := []struct {
  113. name string
  114. r *rpcServer
  115. len int
  116. }{
  117. {
  118. name: "empty",
  119. r: &rpcServer{
  120. baseRpcServer: &baseRpcServer{},
  121. },
  122. len: 0,
  123. },
  124. {
  125. name: "custom",
  126. r: &rpcServer{
  127. baseRpcServer: &baseRpcServer{
  128. streamInterceptors: []grpc.StreamServerInterceptor{
  129. func(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo,
  130. handler grpc.StreamHandler) error {
  131. return nil
  132. },
  133. },
  134. },
  135. },
  136. len: 1,
  137. },
  138. {
  139. name: "middleware",
  140. r: &rpcServer{
  141. baseRpcServer: &baseRpcServer{
  142. streamInterceptors: []grpc.StreamServerInterceptor{
  143. func(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo,
  144. handler grpc.StreamHandler) error {
  145. return nil
  146. },
  147. },
  148. },
  149. middlewares: ServerMiddlewaresConf{
  150. Trace: true,
  151. Recover: true,
  152. Breaker: true,
  153. },
  154. },
  155. len: 4,
  156. },
  157. }
  158. for _, test := range tests {
  159. t.Run(test.name, func(t *testing.T) {
  160. assert.Equal(t, test.len, len(test.r.buildStreamInterceptors()))
  161. })
  162. }
  163. }