github.com/lingyao2333/mo-zero@v1.4.1/zrpc/proxy_test.go (about)

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