mirror of https://github.com/siddontang/go.git
136 lines
1.9 KiB
Go
136 lines
1.9 KiB
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("tcp", "127.0.0.1:11182")
|
|
go testServer.Start()
|
|
}
|
|
|
|
testServerOnce.Do(f)
|
|
|
|
return testServer
|
|
}
|
|
|
|
func newTestClient() *Client {
|
|
f := func() {
|
|
testClient = NewClient("tcp", "127.0.0.1:11182", 10)
|
|
}
|
|
|
|
testClientOnce.Do(f)
|
|
|
|
return testClient
|
|
}
|
|
|
|
func test_Rpc1(id int) (int, string, error) {
|
|
return id * 10, "abc", nil
|
|
}
|
|
|
|
func TestRpc1(t *testing.T) {
|
|
s := newTestServer()
|
|
|
|
s.Register("rpc1", test_Rpc1)
|
|
|
|
c := newTestClient()
|
|
|
|
var r func(int) (int, string, error)
|
|
if err := c.MakeRpc("rpc1", &r); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
a, b, e := r(10)
|
|
if e != nil {
|
|
t.Fatal(e)
|
|
}
|
|
|
|
if a != 100 || b != "abc" {
|
|
t.Fatal(a, b)
|
|
}
|
|
}
|
|
|
|
func test_Rpc2(ids []int) ([]int, error) {
|
|
if ids == nil || len(ids) == 0 {
|
|
return nil, errors.New("nid ids")
|
|
}
|
|
|
|
if len(ids) >= 2 {
|
|
return []int{}, nil
|
|
}
|
|
|
|
return []int{ids[0] * 10}, nil
|
|
}
|
|
|
|
func TestRpc2(t *testing.T) {
|
|
s := newTestServer()
|
|
|
|
s.Register("rpc2", test_Rpc2)
|
|
|
|
c := newTestClient()
|
|
|
|
var r func(ids []int) ([]int, error)
|
|
if err := c.MakeRpc("rpc2", &r); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
a, e := r(nil)
|
|
if e == nil {
|
|
t.Fatal("must error")
|
|
}
|
|
|
|
a, e = r([]int{})
|
|
if e == nil {
|
|
t.Fatal("must error")
|
|
}
|
|
|
|
a, e = r([]int{1})
|
|
if e != nil {
|
|
t.Fatal(e)
|
|
} else if a[0] != 10 {
|
|
t.Fatal(a[0])
|
|
}
|
|
|
|
a, e = r([]int{1, 2, 3})
|
|
if e != nil {
|
|
t.Fatal(e)
|
|
} else if len(a) != 0 {
|
|
t.Fatal("must 0")
|
|
}
|
|
}
|
|
|
|
func test_Rpc3(id int) error {
|
|
return errors.New("hello world")
|
|
}
|
|
|
|
func TestRpc3(t *testing.T) {
|
|
s := newTestServer()
|
|
|
|
s.Register("rpc3", test_Rpc3)
|
|
|
|
c := newTestClient()
|
|
|
|
var r func(int) error
|
|
if err := c.MakeRpc("rpc3", &r); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
e := r(10)
|
|
if e != nil {
|
|
if e.Error() != "hello world" {
|
|
t.Fatal(e.Error())
|
|
}
|
|
} else {
|
|
t.Fatal("must error")
|
|
}
|
|
}
|