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
|
||||
// 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 {
|
||||
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...)
|
||||
if err != nil {
|
||||
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) {
|
||||
server := newTestServer()
|
||||
defer server.Stop()
|
||||
|
Loading…
Reference in New Issue
Block a user