From ff0bd76905429112646a9d8c3afa5d88487f96e2 Mon Sep 17 00:00:00 2001 From: Asim Date: Tue, 7 Jun 2016 01:18:54 +0100 Subject: [PATCH] Add a pool test --- client/rpc_pool_test.go | 84 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 client/rpc_pool_test.go diff --git a/client/rpc_pool_test.go b/client/rpc_pool_test.go new file mode 100644 index 00000000..cd08252d --- /dev/null +++ b/client/rpc_pool_test.go @@ -0,0 +1,84 @@ +package client + +import ( + "testing" + "time" + + "github.com/micro/go-micro/transport" + "github.com/micro/go-micro/transport/mock" +) + +func testPool(t *testing.T, size int, ttl time.Duration) { + // zero pool + p := newPool(size, ttl) + + // mock transport + tr := mock.NewTransport() + + // listen + l, err := tr.Listen(":0") + if err != nil { + t.Fatal(err) + } + defer l.Close() + + // accept loop + go func() { + for { + if err := l.Accept(func(s transport.Socket) { + for { + var msg transport.Message + if err := s.Recv(&msg); err != nil { + return + } + if err := s.Send(&msg); err != nil { + return + } + } + }); err != nil { + return + } + } + }() + + for i := 0; i < 10; i++ { + // get a conn + c, err := p.getConn(l.Addr(), tr) + if err != nil { + t.Fatal(err) + } + + msg := &transport.Message{ + Body: []byte(`hello world`), + } + + if err := c.Send(msg); err != nil { + t.Fatal(err) + } + + var rcv transport.Message + + if err := c.Recv(&rcv); err != nil { + t.Fatal(err) + } + + if string(rcv.Body) != string(msg.Body) { + t.Fatalf("got %v, expected %v", rcv.Body, msg.Body) + } + + // release the conn + p.release(l.Addr(), c, nil) + + p.Lock() + if i := len(p.conns[l.Addr()]); i > size { + p.Unlock() + t.Fatal("pool size %d is greater than expected %d", i, size) + } + p.Unlock() + } +} + +func TestRPCPool(t *testing.T) { + testPool(t, 0, time.Minute) + testPool(t, 2, time.Minute) +}