fix(api): show clean RPC error messages
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"net/http"
|
||||
|
||||
"connectrpc.com/connect"
|
||||
"github.com/pkg/errors"
|
||||
"google.golang.org/grpc/codes"
|
||||
"google.golang.org/grpc/status"
|
||||
|
||||
@@ -67,7 +68,7 @@ func convertGRPCError(err error) error {
|
||||
return nil
|
||||
}
|
||||
if st, ok := status.FromError(err); ok {
|
||||
return connect.NewError(grpcCodeToConnectCode(st.Code()), err)
|
||||
return connect.NewError(grpcCodeToConnectCode(st.Code()), errors.New(st.Message()))
|
||||
}
|
||||
return connect.NewError(connect.CodeInternal, err)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
package v1
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"connectrpc.com/connect"
|
||||
"google.golang.org/grpc/codes"
|
||||
"google.golang.org/grpc/status"
|
||||
)
|
||||
|
||||
func TestConvertGRPCErrorUsesStatusMessage(t *testing.T) {
|
||||
const message = "invalid username: must start with a lowercase letter"
|
||||
|
||||
err := convertGRPCError(status.Error(codes.InvalidArgument, message))
|
||||
connectErr, ok := err.(*connect.Error)
|
||||
if !ok {
|
||||
t.Fatalf("convertGRPCError() returned %T, want *connect.Error", err)
|
||||
}
|
||||
if got := connectErr.Code(); got != connect.CodeInvalidArgument {
|
||||
t.Fatalf("convertGRPCError() code = %v, want %v", got, connect.CodeInvalidArgument)
|
||||
}
|
||||
if got := connectErr.Message(); got != message {
|
||||
t.Fatalf("convertGRPCError() message = %q, want %q", got, message)
|
||||
}
|
||||
if strings.Contains(connectErr.Message(), "rpc error:") {
|
||||
t.Fatalf("convertGRPCError() message contains gRPC transport details: %q", connectErr.Message())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user