Last active
May 1, 2022 20:34
-
-
Save AntonioSun/badf66c164eaf76a7440ded00845f03e to your computer and use it in GitHub Desktop.
Revisions
-
AntonioSun revised this gist
May 1, 2022 . 2 changed files with 29 additions and 5 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -10,8 +10,6 @@ import ( "time" "google.golang.org/grpc" "google.golang.org/grpc/test/bufconn" pb "github.com/AntonioSun/grpc-go-examples-bank/pkg/proto/bank/account" @@ -21,9 +19,12 @@ type mockDepositServer struct { pb.UnimplementedDepositServiceServer } var ErrInvalidArgument = errors.New("InvalidArgument") func (*mockDepositServer) Deposit(ctx context.Context, req *pb.DepositRequest) (*pb.DepositResponse, error) { if req.GetAmount() < 0 { return nil, fmt.Errorf("cannot deposit %v: %w", req.GetAmount(), ErrInvalidArgument) } return &pb.DepositResponse{Ok: true}, nil @@ -58,7 +59,9 @@ func TestDepositClient_Deposit(t *testing.T) { "invalid request with negative amount", -1.11, false, // codes.InvalidArgument, X: cannot use codes.InvalidArgument (constant 3 of type codes.Code) as type error in struct literal // ErrInvalidArgument, X: error wrapping is discarded fmt.Errorf("grpc: Unknown, cannot deposit %v: %w", -1.11, ErrInvalidArgument), }, { "valid request with non negative amount", @@ -84,7 +87,20 @@ func TestDepositClient_Deposit(t *testing.T) { t.Error("error: expected", tt.res, "received", response) } e0 := ErrInvalidArgument e1 := tt.err //t.Logf("] %+v\n] %+v\n", err, tt.err) e2 := fmt.Errorf("cannot deposit %v: %w", -1.11, ErrInvalidArgument) t.Logf("] %v %v %v:%v %v:%v %v:%v %v:%v\n", errors.Is(err, tt.err), errors.Is(tt.err, err), errors.Is(err, ErrInvalidArgument), errors.Is(err, e0), errors.Is(tt.err, ErrInvalidArgument), errors.Is(tt.err, e0), errors.Is(e1, ErrInvalidArgument), errors.Is(e1, e0), errors.Is(e2, ErrInvalidArgument), errors.Is(e2, e0), ) //if !errors.Is(err, tt.err) { //if err != tt.err { if err != nil && err.Error() != tt.err.Error() { t.Error("error: expected", tt.err, "received", err) } }) This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,8 @@ ``` === RUN TestDepositClient_Deposit === RUN TestDepositClient_Deposit/invalid_request_with_negative_amount deposit_client_test.go:94: ] false false false:false true:true true:true true:true === RUN TestDepositClient_Deposit/valid_request_with_non_negative_amount deposit_client_test.go:94: ] true true false:false false:false false:false true:true --- PASS: TestDepositClient_Deposit (0.00s) ``` -
AntonioSun created this gist
May 1, 2022 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,92 @@ package account import ( "context" "errors" "fmt" "log" "net" "testing" "time" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" "google.golang.org/grpc/test/bufconn" pb "github.com/AntonioSun/grpc-go-examples-bank/pkg/proto/bank/account" ) type mockDepositServer struct { pb.UnimplementedDepositServiceServer } func (*mockDepositServer) Deposit(ctx context.Context, req *pb.DepositRequest) (*pb.DepositResponse, error) { if req.GetAmount() < 0 { return nil, status.Errorf(codes.InvalidArgument, "cannot deposit %v", req.GetAmount()) } return &pb.DepositResponse{Ok: true}, nil } func dialer() func(context.Context, string) (net.Conn, error) { listener := bufconn.Listen(1024 * 1024) server := grpc.NewServer() pb.RegisterDepositServiceServer(server, &mockDepositServer{}) go func() { if err := server.Serve(listener); err != nil { log.Fatal(err) } }() return func(context.Context, string) (net.Conn, error) { return listener.Dial() } } func TestDepositClient_Deposit(t *testing.T) { tests := []struct { name string amount float32 res bool err error }{ { "invalid request with negative amount", -1.11, false, fmt.Errorf("grpc: InvalidArgument, cannot deposit %v", -1.11), }, { "valid request with non negative amount", 0.00, true, nil, }, } ctx := context.Background() conn, err := grpc.DialContext(ctx, "", grpc.WithInsecure(), grpc.WithContextDialer(dialer())) if err != nil { log.Fatal(err) } defer conn.Close() for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { response, err := NewDepositClient(conn, time.Second).Deposit(context.Background(), tt.amount) if response != tt.res { t.Error("error: expected", tt.res, "received", response) } if err != nil && errors.Is(err, tt.err) { t.Error("error: expected", tt.err, "received", err) } }) } }