mirror of
https://github.com/gogrlx/nats-server.git
synced 2026-04-02 03:38:42 -07:00
Replace GetListenEndpoint() with ReadyForConnections()
The RunServer() function (and the various variants) call Server.Start() in a go-routine, but do not return until it has verified that the server is ready to accept connections. To do so, it use GetListenEndpoint() to get a suitable connect address (replacing "0.0.0.0" or "::" with localhost - important on Windows). It then creates a raw TCP connection to ensure the server is started, repeating the process in case of failure up to 10 seconds. This PR replaces this with a function that checks that client listener, and route listener if configured, are set. This removes the need to get a connect address and create test tcp connections. The reason for this change is that NATS Streaming when starting the NATS Server (unless configured to connect to a remote one) calls RunServerWithAuth(), which when getting "localhost" from GetListenEndpoint(), would fail trying to resolve it. This happened for the NATS Streaming Docker image built with Go 1.7+.
This commit is contained in:
25
test/test.go
25
test/test.go
@@ -97,28 +97,11 @@ func RunServerWithAuth(opts *server.Options, auth server.Auth) *server.Server {
|
||||
// Run server in Go routine.
|
||||
go s.Start()
|
||||
|
||||
end := time.Now().Add(10 * time.Second)
|
||||
for time.Now().Before(end) {
|
||||
addr := s.GetListenEndpoint()
|
||||
if addr == "" {
|
||||
time.Sleep(50 * time.Millisecond)
|
||||
// Retry. We might take a little while to open a connection.
|
||||
continue
|
||||
}
|
||||
conn, err := net.Dial("tcp", addr)
|
||||
if err != nil {
|
||||
// Retry after 50ms
|
||||
time.Sleep(50 * time.Millisecond)
|
||||
continue
|
||||
}
|
||||
conn.Close()
|
||||
// Wait a bit to give a chance to the server to remove this
|
||||
// "client" from its state, which may otherwise interfere with
|
||||
// some tests.
|
||||
time.Sleep(25 * time.Millisecond)
|
||||
return s
|
||||
// Wait for accept loop(s) to be started
|
||||
if !s.ReadyForConnections(10 * time.Second) {
|
||||
panic("Unable to start NATS Server in Go Routine")
|
||||
}
|
||||
panic("Unable to start NATS Server in Go Routine")
|
||||
return s
|
||||
}
|
||||
|
||||
func stackFatalf(t tLogger, f string, args ...interface{}) {
|
||||
|
||||
Reference in New Issue
Block a user