]> Cypherpunks repositories - gostls13.git/commitdiff
net/rpc: add test for issue 7689 (gob error should cause EOF)
authorRob Pike <r@golang.org>
Tue, 7 Oct 2014 17:52:16 +0000 (10:52 -0700)
committerRob Pike <r@golang.org>
Tue, 7 Oct 2014 17:52:16 +0000 (10:52 -0700)
Helpfully supplied by tommi.virtanen in issue 8173.

LGTM=rsc
R=golang-codereviews, rsc
CC=golang-codereviews
https://golang.org/cl/151370043

src/net/rpc/client_test.go

index bbfc1ec3a3ec2851a97eb5b9c7ac6f601e2f9204..c138c06b8d33cb4303b20a2d34143078f10bb7d8 100644 (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()
+}