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