proxy_test.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package zrpc
  2. import (
  3. "context"
  4. "fmt"
  5. "testing"
  6. "github.com/stretchr/testify/assert"
  7. "github.com/wuntsong-org/go-zero-plus/internal/mock"
  8. "google.golang.org/grpc"
  9. "google.golang.org/grpc/codes"
  10. "google.golang.org/grpc/credentials/insecure"
  11. "google.golang.org/grpc/status"
  12. )
  13. func TestProxy(t *testing.T) {
  14. tests := []struct {
  15. name string
  16. amount float32
  17. res *mock.DepositResponse
  18. errCode codes.Code
  19. errMsg string
  20. }{
  21. {
  22. "invalid request with negative amount",
  23. -1.11,
  24. nil,
  25. codes.InvalidArgument,
  26. fmt.Sprintf("cannot deposit %v", -1.11),
  27. },
  28. {
  29. "valid request with non negative amount",
  30. 0.00,
  31. &mock.DepositResponse{Ok: true},
  32. codes.OK,
  33. "",
  34. },
  35. }
  36. proxy := NewProxy("foo", WithDialOption(grpc.WithTransportCredentials(insecure.NewCredentials())),
  37. WithDialOption(grpc.WithContextDialer(dialer())))
  38. for _, tt := range tests {
  39. t.Run(tt.name, func(t *testing.T) {
  40. conn, err := proxy.TakeConn(context.Background())
  41. assert.Nil(t, err)
  42. cli := mock.NewDepositServiceClient(conn)
  43. request := &mock.DepositRequest{Amount: tt.amount}
  44. response, err := cli.Deposit(context.Background(), request)
  45. if response != nil {
  46. assert.True(t, len(response.String()) > 0)
  47. if response.GetOk() != tt.res.GetOk() {
  48. t.Error("response: expected", tt.res.GetOk(), "received", response.GetOk())
  49. }
  50. }
  51. if err != nil {
  52. if e, ok := status.FromError(err); ok {
  53. if e.Code() != tt.errCode {
  54. t.Error("error code: expected", codes.InvalidArgument, "received", e.Code())
  55. }
  56. if e.Message() != tt.errMsg {
  57. t.Error("error message: expected", tt.errMsg, "received", e.Message())
  58. }
  59. }
  60. }
  61. })
  62. }
  63. }
  64. func TestRpcProxy_TakeConnNewClientFailed(t *testing.T) {
  65. proxy := NewProxy("foo", WithDialOption(grpc.WithTransportCredentials(insecure.NewCredentials())),
  66. WithDialOption(grpc.WithBlock()))
  67. _, err := proxy.TakeConn(context.Background())
  68. assert.NotNil(t, err)
  69. }