go-micro.dev/v5@v5.12.0/client/grpc/grpc_pool_test.go (about) 1 package grpc 2 3 import ( 4 "context" 5 "net" 6 "testing" 7 "time" 8 9 "google.golang.org/grpc" 10 pb "google.golang.org/grpc/examples/helloworld/helloworld" 11 ) 12 13 func testPool(t *testing.T, size int, ttl time.Duration, idle int, ms int) { 14 // setup server 15 l, err := net.Listen("tcp", ":0") 16 if err != nil { 17 t.Errorf("failed to listen: %v", err) 18 } 19 defer l.Close() 20 21 s := grpc.NewServer() 22 pb.RegisterGreeterServer(s, &greeterServer{}) 23 24 go s.Serve(l) 25 defer s.Stop() 26 27 // zero pool 28 p := newPool(size, ttl, idle, ms) 29 30 for i := 0; i < 10; i++ { 31 // get a conn 32 cc, err := p.getConn(context.TODO(), l.Addr().String(), grpc.WithInsecure()) 33 if err != nil { 34 t.Fatal(err) 35 } 36 37 rsp := pb.HelloReply{} 38 39 err = cc.Invoke(context.TODO(), "/helloworld.Greeter/SayHello", &pb.HelloRequest{Name: "John"}, &rsp) 40 if err != nil { 41 t.Fatal(err) 42 } 43 44 if rsp.Message != "Hello John" { 45 t.Errorf("Got unexpected response %v", rsp.Message) 46 } 47 48 // release the conn 49 p.release(l.Addr().String(), cc, nil) 50 51 p.Lock() 52 if i := p.conns[l.Addr().String()].count; i > size { 53 p.Unlock() 54 t.Errorf("pool size %d is greater than expected %d", i, size) 55 } 56 p.Unlock() 57 } 58 } 59 60 func TestGRPCPool(t *testing.T) { 61 testPool(t, 0, time.Minute, 10, 2) 62 testPool(t, 2, time.Minute, 10, 1) 63 }