From c343cf28712d76518fe4b49057d545dcfc330df1 Mon Sep 17 00:00:00 2001 From: Felipe Zipitria Date: Sat, 20 May 2023 11:30:42 -0300 Subject: [PATCH] chore: add tests for gh logger output Signed-off-by: Felipe Zipitria --- logger/logger.go | 17 ++++++++++------ logger/logger_test.go | 46 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 6 deletions(-) create mode 100644 logger/logger_test.go diff --git a/logger/logger.go b/logger/logger.go index 66a2a19..6c992c6 100644 --- a/logger/logger.go +++ b/logger/logger.go @@ -11,7 +11,7 @@ import ( "github.com/rs/zerolog/log" ) -const DefaultLogLevel zerolog.Level = zerolog.InfoLevel +const DefaultLogLevel zerolog.Level = zerolog.TraceLevel var consoleOutput = zerolog.ConsoleWriter{Out: os.Stderr, TimeFormat: "03:04:05"} @@ -26,9 +26,10 @@ func init() { // - debug, notice, error, warning // Another possibility is to add the following strings between the level and the message: // file={name},line={line},endLine={endLine},title={title} -func SetGithubOutput() zerolog.Logger { +func SetGithubOutput(w *zerolog.ConsoleWriter) zerolog.Logger { + w.NoColor = true // the following formatlevel loosely translates from posix levels to github levels - consoleOutput.FormatLevel = func(i interface{}) string { + w.FormatLevel = func(i interface{}) string { var l string if ll, ok := i.(string); ok { switch ll { @@ -50,9 +51,13 @@ func SetGithubOutput() zerolog.Logger { } return fmt.Sprintf("::%s", l) } - consoleOutput.FormatMessage = func(i interface{}) string { + w.FormatMessage = func(i interface{}) string { + if i == nil { + return "" + } return fmt.Sprintf("::%s", i) } - consoleOutput.PartsExclude = []string{zerolog.TimestampFieldName} - return zerolog.New(consoleOutput).With().Logger() + w.PartsExclude = []string{zerolog.TimestampFieldName, zerolog.CallerFieldName} + w.PartsOrder = []string{zerolog.LevelFieldName, zerolog.MessageFieldName} + return zerolog.New(w).With().Logger() } diff --git a/logger/logger_test.go b/logger/logger_test.go new file mode 100644 index 0000000..3add7f8 --- /dev/null +++ b/logger/logger_test.go @@ -0,0 +1,46 @@ +package logger + +import ( + "bytes" + "github.com/rs/zerolog" + "github.com/stretchr/testify/suite" + "testing" +) + +type loggerTestSuite struct { + suite.Suite + zl zerolog.Logger + buf *bytes.Buffer +} + +func TestLoggerTestSuite(t *testing.T) { + suite.Run(t, new(loggerTestSuite)) +} + +func (s *loggerTestSuite) SetupSuite() { + s.buf = &bytes.Buffer{} + s.zl = zerolog.New(zerolog.ConsoleWriter{Out: s.buf}).With().Timestamp().Logger() +} + +// TestLogger_Normal tests the normal logger output +func (s *loggerTestSuite) TestLogger_Normal() { + s.zl.Info().Msg("This is a test message") + s.Contains(s.buf.String(), "\x1b[32mINF\x1b[0m This is a test message\n") + s.Equal(52, s.buf.Len()) + s.buf.Reset() +} + +// TestLogger_GitHub tests the GitHub logger output +func (s *loggerTestSuite) TestLogger_GitHub() { + githubLogger := SetGithubOutput(&zerolog.ConsoleWriter{Out: s.buf}) + githubLogger.Info().Msg("This is an info message") + msg, err := s.buf.ReadString('\n') + s.NoError(err) + s.Equal("::notice ::This is an info message\n", msg) + s.Len(msg, 36) + + githubLogger.Debug().Msg("This is a debug message") + msg, err = s.buf.ReadString('\n') + s.NoError(err) + s.Equal("::debug::This is a debug message\n", msg) +}