From 076ddcf07d0b2ed5f1d5904e72a94b62021ed78a Mon Sep 17 00:00:00 2001 From: Alessio Treglia Date: Fri, 21 Sep 2018 15:06:40 +0100 Subject: [PATCH] Pass http.ServeTLS() errors back to the caller Closes: #2460 --- rpc/lib/server/http_server.go | 17 +++++++++-------- rpc/lib/server/http_server_test.go | 15 +++++++++++++++ 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/rpc/lib/server/http_server.go b/rpc/lib/server/http_server.go index ff7173a10..8069a81d4 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 3cbe0d906..73ebc2e7e 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) +}