rpc: add error when call result parameter is not addressable (#20638)
This commit is contained in:
parent
34bb132b10
commit
172f7778fe
@ -276,6 +276,9 @@ func (c *Client) Call(result interface{}, method string, args ...interface{}) er
|
|||||||
// The result must be a pointer so that package json can unmarshal into it. You
|
// The result must be a pointer so that package json can unmarshal into it. You
|
||||||
// can also pass nil, in which case the result is ignored.
|
// can also pass nil, in which case the result is ignored.
|
||||||
func (c *Client) CallContext(ctx context.Context, result interface{}, method string, args ...interface{}) error {
|
func (c *Client) CallContext(ctx context.Context, result interface{}, method string, args ...interface{}) error {
|
||||||
|
if result != nil && reflect.TypeOf(result).Kind() != reflect.Ptr {
|
||||||
|
return fmt.Errorf("call result parameter must be pointer or nil interface: %v", result)
|
||||||
|
}
|
||||||
msg, err := c.newMessage(method, args...)
|
msg, err := c.newMessage(method, args...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -49,6 +49,23 @@ func TestClientRequest(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestClientResponseType(t *testing.T) {
|
||||||
|
server := newTestServer()
|
||||||
|
defer server.Stop()
|
||||||
|
client := DialInProc(server)
|
||||||
|
defer client.Close()
|
||||||
|
|
||||||
|
if err := client.Call(nil, "test_echo", "hello", 10, &echoArgs{"world"}); err != nil {
|
||||||
|
t.Errorf("Passing nil as result should be fine, but got an error: %v", err)
|
||||||
|
}
|
||||||
|
var resultVar echoResult
|
||||||
|
// Note: passing the var, not a ref
|
||||||
|
err := client.Call(resultVar, "test_echo", "hello", 10, &echoArgs{"world"})
|
||||||
|
if err == nil {
|
||||||
|
t.Error("Passing a var as result should be an error")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestClientBatchRequest(t *testing.T) {
|
func TestClientBatchRequest(t *testing.T) {
|
||||||
server := newTestServer()
|
server := newTestServer()
|
||||||
defer server.Stop()
|
defer server.Stop()
|
||||||
|
Loading…
Reference in New Issue
Block a user