package testutil import ( "context" "errors" "net" "testing" "github.com/stretchr/testify/require" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/test/bufconn" ) // NewGRPCServer starts a gRPC server and returns a client connection to it. func NewGRPCServer(t testing.TB, register func(s *grpc.Server)) *grpc.ClientConn { t.Helper() li := bufconn.Listen(1024 * 1024) s := grpc.NewServer() register(s) go func() { err := s.Serve(li) if errors.Is(err, grpc.ErrServerStopped) { err = nil } require.NoError(t, err) }() t.Cleanup(func() { s.Stop() }) cc, err := grpc.NewClient("passthrough://bufnet", grpc.WithContextDialer(func(context.Context, string) (net.Conn, error) { return li.Dial() }), grpc.WithTransportCredentials(insecure.NewCredentials())) require.NoError(t, err) t.Cleanup(func() { cc.Close() }) return cc }