rpc_server_test.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package server
  2. import (
  3. "net/rpc"
  4. "testing"
  5. "time"
  6. )
  7. const (
  8. testRPCHost = "localhost:12346"
  9. )
  10. var testRPCArgs = &Args{100, 200}
  11. type Args struct {
  12. A, B int
  13. }
  14. type Arith int
  15. func (t *Arith) Multiply(args *Args, reply *int) error {
  16. *reply = args.A * args.B
  17. return nil
  18. }
  19. func validateRPCServer(t *testing.T, addr string, method string) {
  20. rpccli, err := rpc.Dial("tcp", addr)
  21. if err != nil {
  22. t.Fatal(err)
  23. }
  24. var reply int
  25. err = rpccli.Call(method, testRPCArgs, &reply)
  26. if err != nil {
  27. t.Fatal(err)
  28. }
  29. if reply != testRPCArgs.A*testRPCArgs.B {
  30. t.Fatalf("rpc test faild, want %d, got %d", testRPCArgs.A*testRPCArgs.B, reply)
  31. }
  32. }
  33. func TestRPCServer(t *testing.T) {
  34. initLog("test", "debug")
  35. testRPC := new(Arith)
  36. err := rpc.Register(testRPC)
  37. if err != nil {
  38. t.Fatal(err)
  39. }
  40. handler := rpcHandler{}
  41. svr := &RPCServer{
  42. TCPServer{
  43. addr: testRPCHost,
  44. handler: &handler,
  45. useTls: false,
  46. },
  47. }
  48. err = svr.Start()
  49. if err != nil {
  50. t.Fatal(err)
  51. }
  52. time.Sleep(time.Millisecond * 300)
  53. validateRPCServer(t, testRPCHost, "Arith.Multiply")
  54. }