diff options
author | Zeger-Jan van de Weg <git@zjvandeweg.nl> | 2019-03-04 12:46:28 +0300 |
---|---|---|
committer | Zeger-Jan van de Weg <git@zjvandeweg.nl> | 2019-03-05 11:10:43 +0300 |
commit | 77fee8f6cf539ceec5389a6322dbd9ade8f8676b (patch) | |
tree | 46a3e43ee7fcbb0e1b2e29db035ec4ffe9dcd49b | |
parent | 412148b34485702db63a4b365b3f896b421c5a90 (diff) |
Fix undefined logger panicing
An oversight made the situation possible where the logger had to log a
message while the logger wasn't defined yet. This happened in a case
where no config file was passed for example.
By defining a the default logger this panic doesn't occur anymore. The
configuration options for the logger aren't set yet, so the output is
different than what users might expect, but it's better than a panic.
-rw-r--r-- | changelogs/unreleased/zj-start-without-config.yml | 5 | ||||
-rw-r--r-- | cmd/praefect/main.go | 36 | ||||
-rw-r--r-- | cmd/praefect/main_test.go | 13 |
3 files changed, 44 insertions, 10 deletions
diff --git a/changelogs/unreleased/zj-start-without-config.yml b/changelogs/unreleased/zj-start-without-config.yml new file mode 100644 index 000000000..4df37ca0a --- /dev/null +++ b/changelogs/unreleased/zj-start-without-config.yml @@ -0,0 +1,5 @@ +--- +title: Fix undefined logger panicing +merge_request: 1114 +author: +type: fixed diff --git a/cmd/praefect/main.go b/cmd/praefect/main.go index 6d4189e17..23e5aa89e 100644 --- a/cmd/praefect/main.go +++ b/cmd/praefect/main.go @@ -2,6 +2,7 @@ package main import ( "context" + "errors" "flag" "fmt" "net" @@ -18,33 +19,48 @@ import ( var ( flagConfig = flag.String("config", "", "Location for the config.toml") - logger *logrus.Logger + logger = logrus.New() + + errNoConfigFile = errors.New("the config flag must be passed") ) func main() { flag.Parse() - conf, err := config.FromFile(*flagConfig) + conf, err := configure() if err != nil { - logger.Fatalf("%s", err) + logger.Fatal(err) } - if err := conf.Validate(); err != nil { + l, err := net.Listen("tcp", conf.ListenAddr) + if err != nil { logger.Fatalf("%s", err) } - logger := conf.ConfigureLogger() + logger.WithField("address", conf.ListenAddr).Info("listening at tcp address") + logger.Fatalf("%v", run(l, conf)) +} - tracing.Initialize(tracing.WithServiceName("praefect")) +func configure() (config.Config, error) { + var conf config.Config - l, err := net.Listen("tcp", conf.ListenAddr) + if *flagConfig == "" { + return conf, errNoConfigFile + } + + conf, err := config.FromFile(*flagConfig) if err != nil { - logger.Fatalf("%s", err) + return conf, fmt.Errorf("error reading config file: %v", err) } - logger.WithField("address", conf.ListenAddr).Info("listening at tcp address") + if err := conf.Validate(); err != nil { + return conf, err + } - logger.Fatalf("%v", run(l, conf)) + logger = conf.ConfigureLogger() + tracing.Initialize(tracing.WithServiceName("praefect")) + + return conf, nil } func run(l net.Listener, conf config.Config) error { diff --git a/cmd/praefect/main_test.go b/cmd/praefect/main_test.go new file mode 100644 index 000000000..65d16a86c --- /dev/null +++ b/cmd/praefect/main_test.go @@ -0,0 +1,13 @@ +package main + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestNoConfigFlag(t *testing.T) { + _, err := configure() + + assert.Equal(t, err, errNoConfigFile) +} |