Skip to content

Commit 9142e41

Browse files
committed
Wait for server to be ready
1 parent e7a8097 commit 9142e41

File tree

1 file changed

+28
-1
lines changed

1 file changed

+28
-1
lines changed

test/xds/xds_server_integration_test.go

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,15 @@ import (
2525
"net"
2626
"strconv"
2727
"testing"
28+
"time"
2829

2930
"github.com/google/uuid"
3031
"google.golang.org/grpc"
3132
"google.golang.org/grpc/codes"
3233
"google.golang.org/grpc/credentials/insecure"
3334
xdscreds "google.golang.org/grpc/credentials/xds"
3435
"google.golang.org/grpc/internal"
36+
"google.golang.org/grpc/internal/grpcsync"
3537
"google.golang.org/grpc/internal/testutils"
3638
"google.golang.org/grpc/internal/testutils/xds/e2e"
3739
"google.golang.org/grpc/internal/testutils/xds/e2e/setup"
@@ -78,6 +80,19 @@ func testModeChangeServerOption(t *testing.T) grpc.ServerOption {
7880
})
7981
}
8082

83+
// acceptNotifyingListener wraps a listener and notifies users when a server
84+
// calls the Listener.Accept() method. This can be used to ensure that the
85+
// server is ready before requests are sent to it.
86+
type acceptNotifyingListener struct {
87+
net.Listener
88+
serverReady grpcsync.Event
89+
}
90+
91+
func (l *acceptNotifyingListener) Accept() (net.Conn, error) {
92+
l.serverReady.Fire()
93+
return l.Listener.Accept()
94+
}
95+
8196
// setupGRPCServer performs the following:
8297
// - spin up an xDS-enabled gRPC server, configure it with xdsCredentials and
8398
// register the test service on it
@@ -110,12 +125,24 @@ func setupGRPCServer(t *testing.T, bootstrapContents []byte) (net.Listener, func
110125
t.Fatalf("testutils.LocalTCPListener() failed: %v", err)
111126
}
112127

128+
readyLis := &acceptNotifyingListener{
129+
Listener: lis,
130+
serverReady: *grpcsync.NewEvent(),
131+
}
132+
113133
go func() {
114-
if err := server.Serve(lis); err != nil {
134+
if err := server.Serve(readyLis); err != nil {
115135
t.Errorf("Serve() failed: %v", err)
116136
}
117137
}()
118138

139+
// Wait for the server to start running.
140+
select {
141+
case <-readyLis.serverReady.Done():
142+
case <-time.After(defaultTestTimeout):
143+
t.Fatalf("Timed out while waiting for the back end server to start")
144+
}
145+
119146
return lis, func() {
120147
server.Stop()
121148
}

0 commit comments

Comments
 (0)