From 64e23eae55a5359e9e3d79819c1b80d96c68fdf9 Mon Sep 17 00:00:00 2001 From: Brandon Johnson Date: Fri, 23 Feb 2024 12:35:21 -0500 Subject: [PATCH] fix potential panic if server fails to be created --- receiver/httpreceiver/logs.go | 4 ++++ receiver/httpreceiver/logs_test.go | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/receiver/httpreceiver/logs.go b/receiver/httpreceiver/logs.go index b2ed2df62..a30757817 100644 --- a/receiver/httpreceiver/logs.go +++ b/receiver/httpreceiver/logs.go @@ -100,6 +100,10 @@ func (r *httpLogsReceiver) Shutdown(ctx context.Context) error { // shutdownLIstener tells the server to stop serving and waits for it to stop func (r *httpLogsReceiver) shutdownListener(ctx context.Context) error { r.logger.Debug("shutting down server") + if r.server == nil { + // Nothing to shut down + return nil + } if err := r.server.Shutdown(ctx); err != nil { return err diff --git a/receiver/httpreceiver/logs_test.go b/receiver/httpreceiver/logs_test.go index e7971b432..d7e4365a6 100644 --- a/receiver/httpreceiver/logs_test.go +++ b/receiver/httpreceiver/logs_test.go @@ -16,6 +16,7 @@ package httpreceiver import ( "bytes" + "context" "encoding/json" "errors" "io" @@ -335,6 +336,17 @@ func TestServeHTTP(t *testing.T) { } } +func TestShutdownNoServer(t *testing.T) { + // test that shutdown without a start does not error or panic + recv := newReceiver(t, &Config{ + HTTPServerSettings: confighttp.HTTPServerSettings{ + Endpoint: "localhost:12345", + }, + }, consumertest.NewNop()) + + require.NoError(t, recv.Shutdown(context.Background())) +} + func newReceiver(t *testing.T, cfg *Config, c consumer.Logs) *httpLogsReceiver { s := receivertest.NewNopCreateSettings() s.Logger = zaptest.NewLogger(t)