1package grpc_test 2 3import ( 4 "context" 5 "fmt" 6 "log" 7 "net" 8 "testing" 9 10 "example.com/foo_proto" 11 12 "google.golang.org/grpc" 13 "google.golang.org/grpc/credentials/insecure" 14) 15 16type fooerServer struct { 17} 18 19func newServer() *fooerServer { 20 return &fooerServer{} 21} 22 23func (*fooerServer) RoundTripFoo(ctx context.Context, foo *foo_proto.Foo) (*foo_proto.Foo, error) { 24 foo.Value += 1 25 return foo, nil 26} 27 28func TestRoundTripFoo(t *testing.T) { 29 // Start the server. 30 address := fmt.Sprintf("localhost:%d", 12345) 31 lis, err := net.Listen("tcp", address) 32 if err != nil { 33 log.Fatalf("failed to listen on %s: %v", address, err) 34 } 35 grpcServer := grpc.NewServer() 36 foo_proto.RegisterFooerServer(grpcServer, newServer()) 37 go func() { 38 grpcServer.Serve(lis) 39 }() 40 41 // Start the client. 42 conn, err := grpc.Dial(address, grpc.WithTransportCredentials(insecure.NewCredentials())) 43 if err != nil { 44 log.Fatalf("fail to dial %s: %v", address, err) 45 } 46 defer conn.Close() 47 client := foo_proto.NewFooerClient(conn) 48 49 // Send a message and verify that it is returned correctly. 50 msgIn := &foo_proto.Foo{ 51 Value: 42, 52 } 53 msgOut, err := client.RoundTripFoo(context.TODO(), msgIn) 54 if err != nil { 55 log.Fatalf("failed to round-trip message: %v", err) 56 } 57 if msgOut.Value != 43 { 58 log.Fatalf("message did not round-trip correctly: sent %v, got %v", msgIn, msgOut) 59 } 60 61 grpcServer.GracefulStop() 62} 63