rpcreplay: fix Connection to work with grpc >= v1.17
It is now required that an actual gRPC server be running for Dial to succeed.
So modify Replayer.Connection to start one.
Change-Id: Ie7c2dd38bee497e42520eced853458b19c51a670
Reviewed-on: https://code-review.googlesource.com/c/37710
Reviewed-by: Eno Compton <enocom@google.com>
diff --git a/rpcreplay/rpcreplay.go b/rpcreplay/rpcreplay.go
index dadd6a7..5151acc 100644
--- a/rpcreplay/rpcreplay.go
+++ b/rpcreplay/rpcreplay.go
@@ -378,18 +378,24 @@
func (rep *Replayer) Connection() (*grpc.ClientConn, error) {
// We don't need an actual connection, not even a loopback one.
// But we do need something to attach gRPC interceptors to.
- // So we start a local listener and connect to it, then close them down.
+ // So we start a local server and connect to it, then close it down.
+ srv := grpc.NewServer()
l, err := net.Listen("tcp", "127.0.0.1:0")
if err != nil {
return nil, err
}
+ go func() {
+ if err := srv.Serve(l); err != nil {
+ panic(err) // we should never get an error because we just connect and stop
+ }
+ }()
conn, err := grpc.Dial(l.Addr().String(),
append([]grpc.DialOption{grpc.WithInsecure()}, rep.DialOptions()...)...)
if err != nil {
return nil, err
}
conn.Close()
- l.Close()
+ srv.Stop()
return conn, nil
}
diff --git a/rpcreplay/rpcreplay_test.go b/rpcreplay/rpcreplay_test.go
index 08b343d..8e17322 100644
--- a/rpcreplay/rpcreplay_test.go
+++ b/rpcreplay/rpcreplay_test.go
@@ -243,7 +243,6 @@
}
func TestReplay(t *testing.T) {
- t.Skip("skipping until listening on loopback doesn't timeout on Kokoro.")
srv := newIntStoreServer()
defer srv.stop()