xref: /aosp_15_r20/external/bazelbuild-rules_go/tests/bcr/proto/foo_grpc_test.go (revision 9bb1b549b6a84214c53be0924760be030e66b93a)
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