1
0
mirror of https://github.com/golang/go synced 2024-11-26 20:21:25 -07:00

net/rpc: add test for issue 7689 (gob error should cause EOF)

Helpfully supplied by tommi.virtanen in issue 8173.

LGTM=rsc
R=golang-codereviews, rsc
CC=golang-codereviews
https://golang.org/cl/151370043
This commit is contained in:
Rob Pike 2014-10-07 10:52:16 -07:00
parent 3147d2c4ee
commit 6ee36a9151

View File

@ -6,6 +6,9 @@ package rpc
import (
"errors"
"fmt"
"net"
"strings"
"testing"
)
@ -34,3 +37,51 @@ func TestCloseCodec(t *testing.T) {
t.Error("client.Close did not close codec")
}
}
// Test that errors in gob shut down the connection. Issue 7689.
type R struct {
msg []byte // Not exported, so R does not work with gob.
}
type S struct{}
func (s *S) Recv(nul *struct{}, reply *R) error {
*reply = R{[]byte("foo")}
return nil
}
func TestGobError(t *testing.T) {
defer func() {
err := recover()
if err == nil {
t.Fatal("no error")
}
if !strings.Contains("reading body EOF", err.(error).Error()) {
t.Fatal("expected `reading body EOF', got", err)
}
}()
Register(new(S))
listen, err := net.Listen("tcp", ":5555")
if err != nil {
panic(err)
}
go Accept(listen)
client, err := Dial("tcp", ":5555")
if err != nil {
panic(err)
}
var reply Reply
err = client.Call("S.Recv", &struct{}{}, &reply)
if err != nil {
panic(err)
}
fmt.Printf("%#v\n", reply)
client.Close()
listen.Close()
}