From e7dda13d65f1266ede33930f161bf8559d6adc55 Mon Sep 17 00:00:00 2001 From: John Reese Date: Fri, 3 Apr 2020 20:56:54 -0400 Subject: [PATCH 1/2] Ignore casing on log levels --- cmd/server.go | 20 +++++++++++++++++--- cmd/server_test.go | 37 ++++++++++++++++++++++++++++++------- 2 files changed, 47 insertions(+), 10 deletions(-) diff --git a/cmd/server.go b/cmd/server.go index bad053b534..6f4e53e27b 100644 --- a/cmd/server.go +++ b/cmd/server.go @@ -291,6 +291,9 @@ var intFlags = map[string]intFlag{ }, } +// ValidLogLevels are the valid log levels that can be set +var ValidLogLevels = []string{"debug", "info", "warn", "error"} + type stringFlag struct { description string defaultValue string @@ -494,10 +497,11 @@ func (s *ServerCmd) setDefaults(c *server.UserConfig) { } func (s *ServerCmd) validate(userConfig server.UserConfig) error { - logLevel := userConfig.LogLevel - if logLevel != "debug" && logLevel != "info" && logLevel != "warn" && logLevel != "error" { - return errors.New("invalid log level: not one of debug, info, warn, error") + userConfig.LogLevel = strings.ToLower(userConfig.LogLevel) + if !isValidLogLevel(userConfig.LogLevel) { + return fmt.Errorf("invalid log level: must be one of %v", ValidLogLevels) } + checkoutStrategy := userConfig.CheckoutStrategy if checkoutStrategy != "branch" && checkoutStrategy != "merge" { return errors.New("invalid checkout strategy: not one of branch or merge") @@ -693,3 +697,13 @@ func (s *ServerCmd) withErrPrint(f func(*cobra.Command, []string) error) func(*c func (s *ServerCmd) printErr(err error) { fmt.Fprintf(os.Stderr, "%sError: %s%s\n", "\033[31m", err.Error(), "\033[39m") } + +func isValidLogLevel(level string) bool { + for _, logLevel := range ValidLogLevels { + if strings.EqualFold(logLevel, level) { + return true + } + } + + return false +} diff --git a/cmd/server_test.go b/cmd/server_test.go index 77b03b8a17..a9709a4114 100644 --- a/cmd/server_test.go +++ b/cmd/server_test.go @@ -257,13 +257,36 @@ func TestExecute_RepoWhitelistScheme(t *testing.T) { } func TestExecute_ValidateLogLevel(t *testing.T) { - t.Log("Should validate log level.") - c := setupWithDefaults(map[string]interface{}{ - LogLevelFlag: "invalid", - }) - err := c.Execute() - Assert(t, err != nil, "should be an error") - Equals(t, "invalid log level: not one of debug, info, warn, error", err.Error()) + cases := []struct { + description string + flags map[string]interface{} + expectError bool + }{ + { + "log level is invalid", + map[string]interface{}{ + LogLevelFlag: "invalid", + }, + true, + }, + { + "log level is valid uppercase", + map[string]interface{}{ + LogLevelFlag: "DEBUG", + }, + false, + }, + } + for _, testCase := range cases { + t.Log("Should validate log level when " + testCase.description) + c := setupWithDefaults(testCase.flags) + err := c.Execute() + if testCase.expectError { + Assert(t, err != nil, "should be an error") + } else { + Ok(t, err) + } + } } func TestExecute_ValidateCheckoutStrategy(t *testing.T) { From f51be62cc32a92a1caa33e29ebc212e1f7394d10 Mon Sep 17 00:00:00 2001 From: John Reese Date: Mon, 6 Apr 2020 12:26:07 -0400 Subject: [PATCH 2/2] Remove EqualFold from log level comparison --- cmd/server.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/server.go b/cmd/server.go index 6f4e53e27b..37d6c725e0 100644 --- a/cmd/server.go +++ b/cmd/server.go @@ -700,7 +700,7 @@ func (s *ServerCmd) printErr(err error) { func isValidLogLevel(level string) bool { for _, logLevel := range ValidLogLevels { - if strings.EqualFold(logLevel, level) { + if logLevel == level { return true } }