go/rpc/rpc_test.go

64 lines
945 B
Go

package rpc
import (
"errors"
"sync"
"testing"
)
var testServerOnce sync.Once
var testClientOnce sync.Once
var testServer *Server
var testClient *Client
func newTestServer() *Server {
f := func() {
testServer = NewServer("127.0.0.1:11182")
go testServer.Start()
}
testServerOnce.Do(f)
return testServer
}
func newTestClient() *Client {
f := func() {
testClient = NewClient("127.0.0.1:11182", 10)
}
testClientOnce.Do(f)
return testClient
}
func OnlineRpc(id int) (int, string, error) {
return id * 10, "abc", errors.New("hello world")
}
func TestRpc(t *testing.T) {
defer func() {
e := recover()
if s, ok := e.(string); ok {
println(s)
}
if err, ok := e.(error); ok {
println(err.Error())
}
}()
s := newTestServer()
s.Register("online_rpc", OnlineRpc)
c := newTestClient()
var r func(int) (int, string, error)
if err := c.MakeRpc("online_rpc", &r); err != nil {
t.Fatal(err)
}
r(10)
}