gitee.com/liuxuezhan/go-micro-v1.18.0@v1.0.0/client/grpc/grpc_test.go (about) 1 package grpc 2 3 import ( 4 "context" 5 "net" 6 "testing" 7 8 "gitee.com/liuxuezhan/go-micro-v1.18.0/client" 9 "gitee.com/liuxuezhan/go-micro-v1.18.0/client/selector" 10 "gitee.com/liuxuezhan/go-micro-v1.18.0/registry" 11 "gitee.com/liuxuezhan/go-micro-v1.18.0/registry/memory" 12 pgrpc "google.golang.org/grpc" 13 pb "google.golang.org/grpc/examples/helloworld/helloworld" 14 ) 15 16 // server is used to implement helloworld.GreeterServer. 17 type greeterServer struct{} 18 19 // SayHello implements helloworld.GreeterServer 20 func (g *greeterServer) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) { 21 return &pb.HelloReply{Message: "Hello " + in.Name}, nil 22 } 23 24 func TestGRPCClient(t *testing.T) { 25 l, err := net.Listen("tcp", ":0") 26 if err != nil { 27 t.Fatalf("failed to listen: %v", err) 28 } 29 defer l.Close() 30 31 s := pgrpc.NewServer() 32 pb.RegisterGreeterServer(s, &greeterServer{}) 33 34 go s.Serve(l) 35 defer s.Stop() 36 37 // create mock registry 38 r := memory.NewRegistry() 39 40 // register service 41 r.Register(®istry.Service{ 42 Name: "helloworld", 43 Version: "test", 44 Nodes: []*registry.Node{ 45 { 46 Id: "test-1", 47 Address: l.Addr().String(), 48 Metadata: map[string]string{ 49 "protocol": "grpc", 50 }, 51 }, 52 }, 53 }) 54 55 // create selector 56 se := selector.NewSelector( 57 selector.Registry(r), 58 ) 59 60 // create client 61 c := NewClient( 62 client.Registry(r), 63 client.Selector(se), 64 ) 65 66 testMethods := []string{ 67 "/helloworld.Greeter/SayHello", 68 "Greeter.SayHello", 69 } 70 71 for _, method := range testMethods { 72 req := c.NewRequest("helloworld", method, &pb.HelloRequest{ 73 Name: "John", 74 }) 75 76 rsp := pb.HelloReply{} 77 78 err = c.Call(context.TODO(), req, &rsp) 79 if err != nil { 80 t.Fatal(err) 81 } 82 83 if rsp.Message != "Hello John" { 84 t.Fatalf("Got unexpected response %v", rsp.Message) 85 } 86 } 87 }