diff --git a/CHANGELOG_PENDING.md b/CHANGELOG_PENDING.md index 35a395d5..d471b2fd 100644 --- a/CHANGELOG_PENDING.md +++ b/CHANGELOG_PENDING.md @@ -33,3 +33,4 @@ IMPROVEMENTS: BUG FIXES: - [node] \#2294 Delay starting node until Genesis time +- [rpc] \#2460 StartHTTPAndTLSServer() now passes StartTLS() errors back to the caller rather than hanging forever. diff --git a/rpc/lib/server/http_server.go b/rpc/lib/server/http_server.go index ff7173a1..8069a81d 100644 --- a/rpc/lib/server/http_server.go +++ b/rpc/lib/server/http_server.go @@ -102,15 +102,16 @@ func StartHTTPAndTLSServer( listener = netutil.LimitListener(listener, config.MaxOpenConnections) } - go func() { - err := http.ServeTLS( - listener, - RecoverAndLogHandler(maxBytesHandler{h: handler, n: maxBodyBytes}, logger), - certFile, - keyFile, - ) + err = http.ServeTLS( + listener, + RecoverAndLogHandler(maxBytesHandler{h: handler, n: maxBodyBytes}, logger), + certFile, + keyFile, + ) + if err != nil { logger.Error("RPC HTTPS server stopped", "err", err) - }() + return nil, err + } return listener, nil } diff --git a/rpc/lib/server/http_server_test.go b/rpc/lib/server/http_server_test.go index 3cbe0d90..73ebc2e7 100644 --- a/rpc/lib/server/http_server_test.go +++ b/rpc/lib/server/http_server_test.go @@ -5,11 +5,14 @@ import ( "io" "io/ioutil" "net/http" + "os" "sync" "sync/atomic" "testing" "time" + "github.com/stretchr/testify/require" + "github.com/tendermint/tendermint/libs/log" ) @@ -60,3 +63,15 @@ func TestMaxOpenConnections(t *testing.T) { t.Errorf("%d requests failed within %d attempts", failed, attempts) } } + +func TestStartHTTPAndTLSServer(t *testing.T) { + // set up fixtures + listenerAddr := "tcp://0.0.0.0:0" + mux := http.NewServeMux() + mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {}) + + // test failure + gotListener, err := StartHTTPAndTLSServer(listenerAddr, mux, "", "", log.TestingLogger(), Config{MaxOpenConnections: 1}) + require.Nil(t, gotListener) + require.IsType(t, (*os.PathError)(nil), err) +}