mirror of
https://github.com/fluencelabs/tendermint
synced 2025-06-11 20:31:20 +00:00
Make RPCError an actual error and don't swallow its companion data
This commit is contained in:
@ -147,7 +147,7 @@ func unmarshalResponseBytes(responseBytes []byte, result interface{}) (interface
|
||||
return nil, errors.Errorf("Error unmarshalling rpc response: %v", err)
|
||||
}
|
||||
if response.Error != nil {
|
||||
return nil, errors.Errorf("Response error: %v", response.Error.Message)
|
||||
return nil, errors.Errorf("Response error: %v", response.Error)
|
||||
}
|
||||
// unmarshal the RawMessage into the result
|
||||
err = json.Unmarshal(*response.Result, result)
|
||||
|
@ -437,7 +437,7 @@ func (c *WSClient) readRoutine() {
|
||||
continue
|
||||
}
|
||||
if response.Error != nil {
|
||||
c.ErrorsCh <- errors.New(response.Error.Message)
|
||||
c.ErrorsCh <- response.Error
|
||||
continue
|
||||
}
|
||||
c.Logger.Info("got response", "resp", response.Result)
|
||||
|
@ -6,7 +6,6 @@ import (
|
||||
"strings"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
|
||||
events "github.com/tendermint/tmlibs/events"
|
||||
)
|
||||
|
||||
@ -60,6 +59,14 @@ type RPCError struct {
|
||||
Data string `json:"data,omitempty"`
|
||||
}
|
||||
|
||||
func (err RPCError) Error() string {
|
||||
const baseFormat = "RPC error %v - %s"
|
||||
if err.Data != "" {
|
||||
return fmt.Sprintf(baseFormat+": %s", err.Code, err.Message, err.Data)
|
||||
}
|
||||
return fmt.Sprintf(baseFormat, err.Code, err.Message)
|
||||
}
|
||||
|
||||
type RPCResponse struct {
|
||||
JSONRPC string `json:"jsonrpc"`
|
||||
ID string `json:"id"`
|
||||
|
@ -4,6 +4,8 @@ import (
|
||||
"encoding/json"
|
||||
"testing"
|
||||
|
||||
"fmt"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
@ -30,3 +32,18 @@ func TestResponses(t *testing.T) {
|
||||
i := `{"jsonrpc":"2.0","id":"2","error":{"code":-32601,"message":"Method not found"}}`
|
||||
assert.Equal(string(h), string(i))
|
||||
}
|
||||
|
||||
func TestRPCError(t *testing.T) {
|
||||
assert.Equal(t, "RPC error 12 - Badness: One worse than a code 11",
|
||||
fmt.Sprintf("%v", &RPCError{
|
||||
Code: 12,
|
||||
Message: "Badness",
|
||||
Data: "One worse than a code 11",
|
||||
}))
|
||||
|
||||
assert.Equal(t, "RPC error 12 - Badness",
|
||||
fmt.Sprintf("%v", &RPCError{
|
||||
Code: 12,
|
||||
Message: "Badness",
|
||||
}))
|
||||
}
|
||||
|
Reference in New Issue
Block a user