mirror of
https://github.com/lukaszraczylo/graphql-monitoring-proxy.git
synced 2026-06-05 23:03:48 +00:00
179 lines
4.9 KiB
Go
179 lines
4.9 KiB
Go
package libpack_logger
|
|
|
|
import (
|
|
"bytes"
|
|
"testing"
|
|
|
|
assertions "github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/suite"
|
|
)
|
|
|
|
// LoggerAdditionalTestSuite extends testing for functions with low coverage
|
|
type LoggerAdditionalTestSuite struct {
|
|
suite.Suite
|
|
logger *Logger
|
|
output *bytes.Buffer
|
|
assert *assertions.Assertions
|
|
}
|
|
|
|
func (suite *LoggerAdditionalTestSuite) SetupTest() {
|
|
suite.output = &bytes.Buffer{}
|
|
suite.logger = New().SetOutput(suite.output).SetShowCaller(false)
|
|
suite.assert = assertions.New(suite.T())
|
|
}
|
|
|
|
func TestLoggerAdditionalTestSuite(t *testing.T) {
|
|
suite.Run(t, new(LoggerAdditionalTestSuite))
|
|
}
|
|
|
|
// Test GetLogLevel function
|
|
func (suite *LoggerAdditionalTestSuite) TestGetLogLevel() {
|
|
tests := []struct {
|
|
name string
|
|
level string
|
|
expected int
|
|
}{
|
|
{"debug level", "debug", LEVEL_DEBUG},
|
|
{"info level", "info", LEVEL_INFO},
|
|
{"warn level", "warn", LEVEL_WARN},
|
|
{"error level", "error", LEVEL_ERROR},
|
|
{"fatal level", "fatal", LEVEL_FATAL},
|
|
{"uppercase level", "DEBUG", LEVEL_DEBUG},
|
|
{"mixed case level", "WaRn", LEVEL_WARN},
|
|
{"invalid level", "invalid", defaultMinLevel},
|
|
{"empty level", "", defaultMinLevel},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
suite.Run(tt.name, func() {
|
|
result := GetLogLevel(tt.level)
|
|
suite.assert.Equal(tt.expected, result)
|
|
})
|
|
}
|
|
}
|
|
|
|
// Test SetFieldName function
|
|
func (suite *LoggerAdditionalTestSuite) TestSetFieldName() {
|
|
// Save original field names
|
|
originalFieldNames := make(map[string]string)
|
|
for k, v := range fieldNames {
|
|
originalFieldNames[k] = v
|
|
}
|
|
|
|
// Restore original field names after test
|
|
defer func() {
|
|
for k, v := range originalFieldNames {
|
|
fieldNames[k] = v
|
|
}
|
|
}()
|
|
|
|
// Test with custom field names
|
|
customTimestampField := "time"
|
|
customLevelField := "severity"
|
|
customMessageField := "text"
|
|
|
|
suite.logger.SetFieldName("timestamp", customTimestampField)
|
|
suite.logger.SetFieldName("level", customLevelField)
|
|
suite.logger.SetFieldName("message", customMessageField)
|
|
|
|
// Verify field names were changed
|
|
suite.assert.Equal(customTimestampField, fieldNames["timestamp"])
|
|
suite.assert.Equal(customLevelField, fieldNames["level"])
|
|
suite.assert.Equal(customMessageField, fieldNames["message"])
|
|
|
|
// Test logging with custom field names
|
|
suite.output.Reset()
|
|
suite.logger.Info(&LogMessage{Message: "test custom fields"})
|
|
output := suite.output.String()
|
|
|
|
// Check if custom field names are used in the output
|
|
suite.assert.Contains(output, customTimestampField)
|
|
suite.assert.Contains(output, customLevelField)
|
|
suite.assert.Contains(output, customMessageField)
|
|
suite.assert.NotContains(output, "timestamp")
|
|
suite.assert.NotContains(output, "level")
|
|
suite.assert.NotContains(output, "message")
|
|
}
|
|
|
|
// Test SetShowCaller and getCaller functions
|
|
func (suite *LoggerAdditionalTestSuite) TestSetShowCaller() {
|
|
// Make sure caller info is disabled
|
|
suite.logger.SetShowCaller(false)
|
|
|
|
// Test with caller info disabled
|
|
suite.output.Reset()
|
|
suite.logger.Info(&LogMessage{Message: "test without cal__ler"})
|
|
output := suite.output.String()
|
|
suite.assert.NotContains(output, "caller")
|
|
|
|
// Test with caller info enabled
|
|
suite.output.Reset()
|
|
suite.logger.SetShowCaller(true)
|
|
suite.logger.Info(&LogMessage{Message: "test with caller"})
|
|
output = suite.output.String()
|
|
suite.assert.Contains(output, "caller")
|
|
|
|
// Verify the caller info format (file:line)
|
|
suite.assert.Regexp(`"caller":"[^:]+:\d+"`, output)
|
|
}
|
|
|
|
// Test Warning function
|
|
func (suite *LoggerAdditionalTestSuite) TestWarning() {
|
|
suite.output.Reset()
|
|
msg := &LogMessage{Message: "test warning"}
|
|
suite.logger.Warning(msg)
|
|
output := suite.output.String()
|
|
suite.assert.Contains(output, "warn")
|
|
suite.assert.Contains(output, "test warning")
|
|
}
|
|
|
|
// Test Error function
|
|
func (suite *LoggerAdditionalTestSuite) TestError() {
|
|
suite.output.Reset()
|
|
msg := &LogMessage{Message: "test error"}
|
|
suite.logger.Error(msg)
|
|
output := suite.output.String()
|
|
suite.assert.Contains(output, "error")
|
|
suite.assert.Contains(output, "test error")
|
|
}
|
|
|
|
// Test Fatal function
|
|
func (suite *LoggerAdditionalTestSuite) TestFatal() {
|
|
suite.output.Reset()
|
|
msg := &LogMessage{Message: "test fatal"}
|
|
suite.logger.Fatal(msg)
|
|
output := suite.output.String()
|
|
suite.assert.Contains(output, "fatal")
|
|
suite.assert.Contains(output, "test fatal")
|
|
}
|
|
|
|
// Test Critical function without exiting
|
|
func (suite *LoggerAdditionalTestSuite) TestCritical() {
|
|
// Safely intercept os.Exit call with proper synchronization
|
|
exitMutex.Lock()
|
|
originalOsExit := osExit
|
|
|
|
var exitCode int
|
|
osExit = func(code int) {
|
|
exitCode = code
|
|
// Don't actually exit
|
|
}
|
|
exitMutex.Unlock()
|
|
|
|
// Ensure we restore the original osExit function
|
|
defer func() {
|
|
exitMutex.Lock()
|
|
osExit = originalOsExit
|
|
exitMutex.Unlock()
|
|
}()
|
|
|
|
suite.output.Reset()
|
|
msg := &LogMessage{Message: "test critical"}
|
|
suite.logger.Critical(msg)
|
|
output := suite.output.String()
|
|
|
|
suite.assert.Contains(output, "fatal")
|
|
suite.assert.Contains(output, "test critical")
|
|
suite.assert.Equal(1, exitCode)
|
|
}
|